
嵌入式linux
yuanzhangmei1
这个作者很懒,什么都没留下…
展开
-
运行地址和加载地址
在连接目标代码时,会提到运行地址和加载地址。这两者有什么区别呢? 加载时地址就是程序放置的地址,运行地址就是程序定位的绝对地址,也即在编译连接时定位的地址。如果程序是在flash里运行,则运行地址和加载地址是相同的。如果程序是在ram里运行,但程序是存储在flash里,则运行地址指向ram,而加载地址是指向flash。代码一般是烧写在NAND里面,比如S3C2440转载 2012-10-15 17:25:03 · 461 阅读 · 0 评论 -
在Keil MDK中调试AT91SAM9260--暨ARM菜鸟入门记之四
这一部分酝酿的时间比较长,由于图片较多,所以制作了pdf文件。目录: PDF,请下载,欢迎批评指正:21ic ARM论坛链接:http://bbs.21ic.com/upfiles/img/20093/2009324225254681.pdf转载 2012-12-21 19:53:17 · 3113 阅读 · 0 评论 -
静态库与动态库区别
静态库是被调用时直接加载到内存中的是编译时需要的,而动态库是在使用的时候加载到内存中的,而在不需要的时候从内存中释放是运行时需要的。如果有dll文件,那么对应的lib文件一般是一些索引信息,具体的实现在dll文件中。如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中。原创 2013-01-08 21:35:34 · 500 阅读 · 0 评论 -
JLINK与JTAG的区别
调试ARM,要遵循ARM的调试接口协议,JTAG就是其中的一种。当仿真时,IAR、KEIL、ADS等都有一个公共的调试接口,RDI就是其中的一种, 那么我们如何完成RDI-->ARM调试协议(JTAG)的转换呢? 有以下两种做法: 1. 在电脑上写一个服务程序,把IAR、KEIL和ADS中的RDI命令解析成相关的JTAG协议,然后通后一个物理转换接口(注意,这个转换只是电气物理层上的转载 2013-03-13 15:51:41 · 726 阅读 · 0 评论 -
IO端口和IO内存的区别及分别使用的函数接口
IO端口和IO内存的区别及分别使用的函数接口 每个外设都是通过读写其寄存器来控制的。外设寄存器也称为I/O端口,通常包括:控制寄存器、状态寄存器和数据寄存器三大类。根据访问外设寄存器的不同方式,可以把CPU分成两大类。一类CPU(如M68K,Power PC等)把这些寄存器看作内存的一部分,寄存器参与内存统一编址,访问寄存器就通过访问一般的内存指令进行,所以,这种CPU没转载 2013-03-14 15:01:58 · 1260 阅读 · 0 评论 -
linux文件系统实现浅析
之前有两篇文章整理过linux虚拟文件系统的结构,和linux文件读写的流程。其中一些由具体文件系统类型来实现的地方并没有深入叙述,只是说这是由具体的文件系统来实现的。比如,读写文件的时候,文件的读写位置怎么对应到实际的磁盘块呢?这是由具体的文件系统来实现的;再比如,寻找一个文件路径的时候,怎么知道XXX目录下是否有YYY文件存在呢?这也是由具体的文件系统来实现的。前些天同事问起linux下i转载 2013-03-15 22:09:08 · 805 阅读 · 0 评论 -
linux文件读写浅析
在《linux内核虚拟文件系统浅析》这篇文章中,我们看到文件是如何被打开、文件的读写是如何被触发的。对一个已打开的文件fd进行read/write系统调用时,内核中该文件所对应的file结构的f_op->read/f_op->write被调用。本文将顺着这条路走下去,大致看看普通磁盘文件的读写是怎样实现的。linux内核响应一个块设备文件读写的层次结构如图(摘自ULK3):转载 2013-03-15 22:08:36 · 791 阅读 · 0 评论 -
linux虚拟文件系统浅析
虚拟文件系统(VFS)在我看来, "虚拟"二字主要有两层含义:1, 在同一个目录结构中, 可以挂载着若干种不同的文件系统. VFS隐藏了它们的实现细节, 为使用者提供统一的接口;2, 目录结构本身并不是绝对的, 每个进程可能会看到不一样的目录结构. 目录结构是由"地址空间(namespace)"来描述的, 不同的进程可能拥有不同的namespace, 不同的namespace可能有着不转载 2013-03-15 22:07:57 · 653 阅读 · 0 评论 -
Linux用户空间与内核空间
Linux 操作系统和驱动程序运行在内核空间,应用程序运行在用户空间,两者不能简单地使用指针传递数据,因为Linux使用的虚拟内存机制,用户空间的数据可能被换出,当内核空间使用用户空间指针时,对应的数据可能不在内存中。Linux内核地址映射模型x86 CPU采用了段页式地址映射模型。进程代码中的地址为逻辑地址,经过段页式地址映射后,才真正访问物理内存。段转载 2013-03-18 09:17:08 · 761 阅读 · 0 评论 -
Linux进程地址空间的一步步探究
我们知道,在32位机器上linux操作系统中的进程的地址空间大小是4G,其中0-3G是用户空间,3G-4G是内核空间。其实,这个4G的地址空间是不存在的,也就是我们所说的虚拟内存空间。 那虚拟内存空间是什么呢,它与实际物理内存空间又是怎样对应的呢,为什么有了虚拟内存技术,我们就能运行比实际物理内存大的应用程序,它是怎么做到的呢? 呵呵,这一切的一切都是个迷呀,下面我们就一步一步转载 2013-03-18 22:49:51 · 762 阅读 · 0 评论 -
linux下内存管理学习心得(一)
最近在学习内存管理的时候,发现对linux下的所谓内存如何管理如何分配都不熟悉,通过最近的查阅资料可总结如下,如有不妥之处欢迎大家批评与指正。总的的来说linux的内存管理其实主要难理解的是以下几个部分:1、虚拟地址、物理地址、线性地址、逻辑地址之间的区别。2、用户地址空间与内核地址空间区别。3、内核如何分配所谓的地址。4、一个可执行程序的地址分布以及运行地址分配。目前我也原创 2013-03-19 10:42:32 · 2965 阅读 · 0 评论 -
ARM菜鸟成长记--之三
提起启动代码,我就嗷嗷郁闷,IAR下的程序都死在了这里,Keil中出现的问题很多都是通过对启动代码的修修补补才解决的,一句话:成也启动代码,败也启动代码。启动代码应该是刚接触ARM的新手必须面对而又很头痛的问题吧,刚开始我也很纳闷,为什么搞个这玩意,学51的时候咋就没见过呢。而且还都是汇编写的,俺的汇编还停留在“MOV”阶段,其他的不是很懂,没办法,谁让汇编的效率高呢。提到启动代码还不得不老生转载 2012-12-21 19:52:05 · 777 阅读 · 0 评论 -
ARM菜鸟成长记--之二
这次主要说说第一次搞ARM特别是从51直接跳到ARM的必须面对的几个概念:REMAP、Bootloader、Flashloader。1、REMAP: 提到REMAP。首先应想到什么是MAP,英语不好,开始就断章取义,MAP就是地图嘛,Memory Map就是存储器地图,不过这个地图的参考坐标不是经纬度,而是地址,进而叫做存储器映射。由于要适应不同存储器容量要求的用途,ARM处理器本身转载 2012-12-21 19:51:00 · 562 阅读 · 0 评论 -
ARM汇编ADR,LDR等伪指令
arm中LDR伪指令与LDR加载指令LDR伪指令的形式是“LDR Rn,=expr”。下面举一个例子来说明它的用法。 COUNT EQU 0x40003100 …… LDR R1,=COUNT MOV R0,#0 STR R0,[R1] COUNT是我们定义的一个变量,地址为0x40003100.这中定义方法在汇编语言中是很常见的,如果使用过单片机的话,应该都熟悉这种用法。 LDR R1,=C转载 2012-10-24 16:13:02 · 690 阅读 · 0 评论 -
S3C2440如何从NAND FLASH中启动
S3C2440如何从NAND FLASH中启动 S3C2440可以配置从NOR FLASH中启动,也可以配置成从NAND FLASH中启动,从NOR FLASH中启动比较好理解,因为NOR FLASH和RAM一样可以通过总线访问,cpu可以直接执行NOR FLASH中的程序,但是CPU不能直接通过总线访问到NAND FLASH中的程序,要从NAND FLASH中启动就要转载 2012-10-24 16:13:42 · 607 阅读 · 0 评论 -
init进程
(1)init进程介绍 init进程是由内核启动的第一个也是唯一的一个用户态进程(其它进程均属于内核态),它也是内核启动的最后一个进程,其ID号为1.启动init进程时,它会根据配置文件来决定启动哪些程序,比如,由init进程可以启动用户指定的程序,或启动shell,或执行某些配置脚本.Init进程是后续所有进程的发起者.(2)Init进程启动顺序 启动Init进转载 2012-11-07 11:21:36 · 518 阅读 · 0 评论 -
Keil MDK入门---从新建一个工程开始
熟悉Keil C 51的朋友对于Keil MDK上手应该比较容易,毕竟界面是很像的。但ARM内核毕竟不同于51内核,因此无论在设置上还是在编程思想上,都需要下番功夫研究的。本文以MDK V4.03为例,详细的写一下MDK的设置、界面、工具。可能会有些杂乱,但我想所涉及的东西都是最常用的;可能不是那么的严谨清晰,我想谁也没把我期望成专家!哈,有问题欢迎留言。正式开始。 首先启动MDK.当然转载 2012-12-21 20:14:03 · 1463 阅读 · 0 评论 -
ARM地址重映射机制
ARM体系结构中,系统上电或复位后,处理器将从地址0x0处取第一条指令,因此,上电的时候,地址0x0处必须是非易失性的ROM或FLASH。但是,为了加快中断响应速度,方便更改中断向量表,有时需要把中断向量表复制到RAM中去,然后把RAM重新映射到地址0x0处,这就用到了地址重映射机制。因为地址重映射是在程序执行过程中进行的,必须考虑程序执行流程的连续性。引导加载程序:一个嵌入式系统的软件通原创 2012-12-23 20:57:42 · 10302 阅读 · 1 评论 -
Keil arm 编译 RO RW ZI DATA
ARM程序(指在ARM系统中正在执行的程序,而非保存在ROM中的bin文件)的组成 一个ARM程序包含3部分:RO段,RW段和ZI段 RO是程序中的指令和常量 RW是程序中的已初始化变量 ZI是程序中的未初始化的变量 由以上3点说明可以理解为: RO就是readonly, RW就是read/write, ZI就是zero ARM映像文件的组成 所谓ARM映像转载 2012-12-23 15:52:39 · 887 阅读 · 0 评论 -
S3C2410X的NAND flash启动
S3C2410X有两种启动方式:NOR flash启动和NAND flash启动。NOR flash启动:NOR flash可以象SDRAM那样随机读取,且读取速度快,不但可以存储程序,还可以运行程序。上电复位时,NOR flash被映射到地址0x0处,程序就可以从NOR flash中的第一条语句开始执行。程序即可以在NORflash运行,也可以复制到SDRAM中运行。NAND flash启动:N原创 2012-12-23 21:02:07 · 1615 阅读 · 0 评论 -
LPC2103学习之定时器0和定时器1
这两天学习LPC2103的定时器。开始看前面的寄存器介绍看的有点头晕,一会儿就搞混了。不过当我看到后面用图片描述定时器相关寄存器操作时,一下就明了了。知道应用再看原理后比较明了。 为什么把这两个定时器放到一起,因为它们都是32位的定时器,它们除了外设基地址不同外,其他都相同。说说这两个定时器的特性1.两个32位定时器定时器/计数器各含有一个可编程的32位预分频器;2.计数器或转载 2012-12-24 22:16:35 · 1667 阅读 · 0 评论 -
为什么超级计算机多采用Linux?
为什么超级计算机多采用Linux?负责沃森超级计算机系统管理的Eddie Epstein被问及他们为何选择Linux作为超级计算机操作系统时说,“这个项目一开始是基于x86架构的刀片系统,而负责管理的研究人员对Linux非常熟悉。”这表明Linux在研究人员当中已有知名度。 我们在之前几篇文章中探讨了这一点:90%以上(准确地说是94.2%)的超级计算机转载 2012-12-16 19:56:00 · 3909 阅读 · 0 评论 -
ARM菜鸟成长记——之一
从开始搞ARM到现在将近半年多了,第一个项目搞得有些眉目了,终于感觉像是入门了,半年来,有开始的新鲜,中间的苦闷,到最后的欣喜。其中过程可谓曲折离奇,遇到了很到前人没有遇到过的疑难杂症,当然很多时候是因为我的粗心酿成的。曾经也有过放弃的念头,那个焦虑,像得了狂躁症一样。后来下定决心即使绩效没了,工作丢了也要搞完它。其实在这个过程中,看到跟我一样的很多新人在论坛上发帖求助,可是很多时候回者寥寥无几,转载 2012-12-21 19:50:01 · 726 阅读 · 0 评论 -
linux下内存管理学习心得(二)
接着上面的知识,这篇主要总结如下几个方面知识:1、物理地址的页、区等概念2、内核使用内存的函数3、分配字节与分配页一、区、页前面linux下内存管理学习心得(一)也已经说了关于页的概念,在内核下面是把物理页(页框)作为分配的基本单元,内核下使用struct page结构体来表示系统中的物理页其中该结构体表示页是否被锁定在内存中,是否为脏页,该页被引用几次,同时还有页的虚原创 2013-03-19 15:43:36 · 1342 阅读 · 0 评论