2024年9月21日发(作者:)
・
计算技术与自动化・
嵌入式系统学习中的难点解析
刘国梅.王亚楠
f郑州航空工业管理学院计算机科学与应用系,河南
摘
郑州450015)
要:嵌入式技术的学习有一定的难度,在越来越多的人开始学习嵌入式技术的情况下,本文结合自己实际的学习经验,分析
了初学嵌入式技术时的几个难点,包括嵌入式系统的引导过程、ARM映像文件、¥3C2410的启动模式,文中对这些难点进行了详细的
解析。
关键词:嵌入式系统;Boofloader;ARM映像文件;¥3C2410启动模式
Analysis of Operation Issues in Studying Embedded System
LIU Guo—mei,WANG Ya-nan
(Department of computer science and application of Zhengzhou Instate of Aeronautical Industry Management,Henan Zhengzhou45001 5)
Key words:Embedded system;Bootloader;arm image file;startup mode of¥3C2410
嵌入式系统被定义为以应用为中心,以计算机技术为基础,
软硬件可裁剪,从而能够适应实际应用中对功能、可靠性、成本、
体积、功耗等严格要求的专用计算机系统,目前嵌入式技术已广
泛应用于国防、军工、航天航空、移动通讯、机器人、工业控制、医
疗仪器、汽车电子等领域。由于社会对掌握嵌入式技术人才的大
量需求,学习嵌入式技术的人越来越多,国内多所院校也已开设
了嵌入式系统的相关课程。
操作系统的Bootloader功能比较简单,是最简单的bootloader,叫
做硬件启动程序更合适一些。
2 ARM映像文件
(1) .axf格式和 .bin格式文件
ADS编译后生成的ARM映像文件有 .axf格式和 .bin
格式两种,有时二者容易被混淆。其实 .bin格式文件是真正的
可执行文件,而 .axf格式文件是ARM特有的调试文件,里面
除了包含 .bin格式文件的内容之外,还附加了许多其它调试信
息,这些调试信息可以用在AXD Debugger的调试中,在AXD
Debugger中通过Load Image命令下载 -axf格式的文件到目标
板的RAM中运行调试。由于烧写工具是原封不动地将映像文件
烧人Flash中,所以 .axf格式文件是不可以被烧人的,否则
Flash的OxO0000000处就不是真正的第一条指令,而是 .axf
格式的头部分。应该将 .bin格式文件烧入,保证Flash的
OxO0000000处是第一条指令。总之, .bin格式文件是用来被烧
但是嵌入式系统不像那些8位单片机好懂,嵌入式系统的
学习有一定的难度,特别是入门阶段,好多东西不懂,下面结合
自己学习嵌入式技术时的实际经验,对初学嵌入式时容易迷惑
的几个难点,同时也是比较重要的地方加以分析,希望能对初学
者有所帮助。这里以学习arm9微处理器和嵌入式Linux操作系
统为例。
1 嵌入式系统的引导过程
一
般的嵌入式系统在主程序执行之前都需要执行一些初始
化的过程,来完成对系统的初始化,并创造嵌入式程序运行的环 写入Flash中的,而 .axf格式文件是在AXD Debugger中通过
Load Image命令下载调试用的。
(2)ARM映像文件的结构
一
境,完成初始化过程的代码就是系统引导程序(Bootloader)。
BootLoader所执行的操作跟具体的目标系统和开发系统有关,但
通常可分为两大类:带操作系统的BootLoader和不带操作系统
BootLoader。
个典型的可执行程序的映像文件结构通常如图l所示。
RO段一般包括代码段和一些常量,在运行的时候是只读
的。而RW段包括一些全局变量和静态变量,定义时带初始值,
在运行的时候可以被改变(读写)。如果有部分全局变量被初始
化为零,则RW段里还包括了zI段。因为RO段是只读的,在运
行的时候不可以被改变, 一
不带操作系统的Bootloader完成的主要功能包括:分配中断
向量表;初始化存储器系统;初始化堆栈;初始化有特殊要求的
端口、设备;初始化应用程序执行环境;改变处理器模式;呼叫主
应用程序,即最后跳到main函数执行应用程序。
带操作系统的Bootloader的启动大多数分为stage1和
所以,在运行的时候,R0
段可以驻留在Flash里
或者SRAM里了,这样速
度会更快些),而RW段
映像文件
}
I
、
l
Z】
stage2两大部分,stage1阶段主要包含依赖于CPU体系结构及
硬件设备的初始化等,通常都用汇编语言来实现。这个阶段的主
要任务有:①基本的硬件设备初始化;②为加载stage2阶段的代
(当然也可以在SDRAM整个可执行 J
是可以被读写的,所以运
行的时候必须被装载到
SDRAM或者SRAM里。
RW
码准备RAM空间;③复制stage2阶段的代码到RAM空间中;④
设置好堆栈;⑤跳转到stage2阶段的C程序人口点。Stage2阶段
通常用C语言来实现,以便实现更复杂的功能,也使程序有更好
的可读性和可移植性。这个阶段的主要任务有:①初始化本阶段
l
RO
图1 可执行程序映像的结构
要使用到的硬件;②检测系统内存映射(memou map);③将内
核(kerne1)映像和根文件系统映像从Flash读到RAM空间;④为
图1中所示的映像文件的结构图指的是映像文件被烧人
(存放)在ROM/Flash中时的状态,这时RW直接跟在RO后面,
内核设置启动参数;⑤调用内核。
可以看出,带操作系统的Bootloader完成的功能复杂,不带
当程序运行时,初始化程序会把RW或zI拷贝到相应的地方。
到底拷贝到什么位置,是通过设置RO BASE和RW BASE,
告诉链接器(1inker)该程序的起始运行地址(RO BASE)和
RW段的地址fRW BASE)。如果一个程序只有RO段,没有
nGCS0,CPU从0x00000000位置的“Steppingstone”中开始执行启
动代码。这4k代码必须把更多的代码从Nand Flash中读到
SDRAM中去,因此要把最核心的启动程序放在Nand Flash
的前4K中。
RW段,那么这个程序可以完全在Flash里运行,不需要用到
SDRAM或者SRAM。如果一个程序既包括RW段又包括RO
段,那么该程序的RW段必须在被访问之前被拷贝到SDRAM 当程序被烧写到Nor Flash中时,则程序可以直接在Nor
或者SRAM里去,以保证程序可以正确运行。
执行前 执行时
…
Q如IEE
RAM
0x0C000 . .
Zl section
RW section
0x0A000
’
ROM
RW section
一一
(! D8㈣一
RO section
R0 section
.一一
Q 一
图2映像文件在执行前和执行时的状态图
图2说明r一个可执行映像文件执行前和执行时的状态。
从图中可以看到,整个程序在执行前是放在ROM/Flash里的,在
执行的时候,RW段被拷『J]到了RAM里的合适位置去。这时RO
和RW的起始地址分别由RO BASE和RW BASE指定,也
就是说,RO BASE和RW BASE的值是在映像文件开始运
行时才起作用,当然,这里也用到了内存地址重映射。如果映像
文件仅仅是存放存ROM/Flash中,映像文件是按图1的方式存
放ROM/Flash中的,Rw直接跟在RO的后面。
3 S3C2410的启动模式
¥3C2410支持两种启动模式:从Nand Flash启动和从外
部nGCS0片选的Nor Flash启动,默认的是从Nand Flash启
动。
¥3C2410到底从哪儿启动是由外部管脚OM1和OM0的电
平组合决定的,OM1 OM0=00,表示从Nand Flash启动,OM1
OMO=Il,表示测试模式,其余的为Nor Flash启动,其中OM1
OM0=O1表示16bit的存储器,OMI OMO=10表示32bit的存储
器。
当程序被烧入到Nand Flash中时,程序不能直接在Nand
Flash中运行,¥3C2410处理器内部集成了8位Nand Flash控
制器,在该Nand Flash控制器内部有一个被称为“StePPing—
stone”的4K的RAM。当OM1、OM0都是低电平——即¥3C2410
从Nand Flash启动时,Nand Flash的前4k代码会被自动地复
制到“Steppingstone”中,“Steppingstone”被映射为地址0,即
Flash中运行,只需要将Nor Flash映射到存储器控制器的第0
块,即nGCSO,再设置相应的寄存器即可。
在这两种启动模式下,各片选的存储空间分配是不同的,
如图3所示。
‘
裟 装
懋 蒜
1如 B
sRoM
S41 1 e 船
}
{ CS3 128 B
12 M8
j— 0M 8
t (n辟Cs 1
隔露蕊蕊蕊 : '2 ^
图3¥3C2410的存储空间分配
4结束语
俗话说,万事开头难,特别是对于有一定难度的嵌入式系统
的学习,入门阶段更是容易迷惑,好多东西不能很好地理解,本
文的目的就是帮助初学者能够较快地突破难点,能够较快地掌
握嵌入式系统的基础知识,入了门以后,对整个嵌入式基础知识
有了较好的理解和掌握,在此基础上再进行更深一步的学习
和开发相对来说就会容易~些。当然,嵌入式系统的学习
还有很多其他需要注意的地方,例如要多动脑、多动手、多
实践、多研究、多分析源代码,很多时候需要通过跟踪调试
才能真正理解系统的执行过程,等等,学习者可以在学习的过程
中不断地总结。
参考文献:
【l】徐英慧,马忠梅等.ARM9嵌入式系统设计一基于¥3C2410
与Linux[M].北京:北京航空航天大学出版社,2007,(9).
[2]杜春雷.ARM体系结构与编程【M】.北京:清华大学出版社,
2003.
【3]李岩,王小玉,孙永春.嵌入式系统教学研究lJJ.南京:电气
电子教学学报,2006,28(3).
教研项目:郑州航空工业管理学院(zhjy~08—01—51)
本文发布于:2024-09-21 14:50:35,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/1726901435435486.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |