ARM嵌入式系统中Bootloader分析与设计方案_第1页
ARM嵌入式系统中Bootloader分析与设计方案_第2页
ARM嵌入式系统中Bootloader分析与设计方案_第3页
ARM嵌入式系统中Bootloader分析与设计方案_第4页
ARM嵌入式系统中Bootloader分析与设计方案_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、作者:PanHongliang封面仅供个人学习ARM7嵌入式系统中Bootloader分析与设计摘要:本文介绍了嵌入式系统Bootloader的基本概念及作用,阐述了在 ARM7嵌入式系统中实现Boot loader的基本流程,重点分析了 Boot loader 中关于外部中断(IRQ)处理的详细过程。改善了 Bootloader中命令控制台 操作使用不方便的缺陷,增加了对方向键控制能力的支持。关键词:嵌入式系统;引导程序;uClinux; S3C4510B1引言作为一种16/32位的高性能、低成本、低功耗的嵌入式RISC (Reduced Instruction Set Computer)微

2、处理器,ARM (Advanced RISC Machines ) 微处理器U前已经成为应用最为广泛的嵌入式微处理器1。在嵌入式系统 开发中Bootloader常常是嵌入式系统开发中可能遇到的第一个技术难点。 应用程序运行环境能否正确构建,内核能否启动成功,都取决于Bootloader 能否正确的工作。一个功能完善的嵌入式系统Bootloader还要求能够提供 系统更新的能力,以及为了实现这一操作所需要的一个简单的命令控制台。 本文在基于ARM7-uClinux嵌入式系统的硬件平台和软件平台基础上,描述 了系统引导程序Bootloader的设计原理,阐述了设计时应考虑的因素和需 解决的技术难点

3、并给出了一套可行的引导程序流程。2. 系统组成典型的ARM嵌入式系统硬件平台一般包括一个以ARM为内核的处理器、存储 器和必要的外部接口与设备。在本系统中采用内嵌ARM7TDMI的Samsung公 司S3C4510B处理器,存储器使用2MB的Flash和16MB的SDRAM,外部接口 除了可用于下载和通信的串口,还配备了一个以太网接口以支持S3C4510B 的网络功能。软件平台曲系统引导程序、嵌入式操作系统内核和文件系统组成,系统引导 程序通常即指我们这里的Bootloader,其代码量虽少但是作用非常大,相 当于普通PC机中的BIOSo通过Bootloader,我们可以初始化硬件设备、建 立

4、内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便 为最终调用操作系统内核准备好正确的环境。3. Boot loader设计分析3. 1 Bootloader 的操作模式(Operation Mode)大多数Boot loader都包含两种不同的操作模式2:(1) .启动加载(Boot loading)模式:也称为自主模式。即Boot loader 从LI标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。(2) .下载(Downloading)模式:在这种模式下,目标机上的Bootloader 将通过串口或网络连接等通信手段从主机(Host)下载内

5、核映像和根文件系 统映像等,然后保存到L1标机上的FLASH类固态存储设备中。Bootloader 的这种模式通常在系统初次安装和更新时被使用,工作于这种模式下的 Boot loader通常都会向它的终端用户提供一个简单的命令行接口。在我们的Bootloader设讣中我们同时支持这两种工作模式,采用的方法是: 一开始启动时处于正常的启动加载模式,但并不立即启动进入uClinux内 核,而是提示延时5秒,等待终端用户如果按下某一特定按键,则切换到下 载模式,否则继续启动uCLinux内核。3.2 Boot loader的启动及初始化基于ARM的芯片多数为复杂的片上系统(SoC),这类复杂系统里的

6、多数硬 件模块都是可配置的3。因此大多数Boot loader都分为stagel和 stage2两大部分。依赖于CPU体系结构的代码,通常都放在stagel中, 而且在这一部分,我们直接对处理器内核和硬件控制器进行编程,因此常常 都用汇编语言来实现。而stage2则通常用C语言来实现,这样可以实现更 复杂的功能,而且代码会具有更好的可读性和可移植性。3. 2. 1 Bootlodder 的 stagel这部分代码必须首先完成一些基本的硬件初始化,为stage2的执行以及随 后的kernel的执行准备好一些基本的*更件环境2。Bootloader的stagel 一般通用的内容包括:*定义程序入口

7、点*设置异常向量表*初始化存储系统(包括地址重映射)*初始化有特殊要求的端口,设备*初始化用户程序的执行环境*初始化堆栈指针寄存器,必要时改变处理器的模式*设置FIQ/IRQ中断处理程序入口*进入C程序在整个Bootloader的初始化过程中我们都不必响应中断,因此首先禁止系 统的中断,然后程序设置CPU的速度和时钟频率,设置CPU内部指令/数据 cache, DRAM初始化,DRAM初始化完成后即可拷贝ROM中的代码到DRAM中, 然后内存重映射,程序开始进入DRAM中执行,然后再初始化一些用户有特 殊要求的端口、设备,比如LED或串口等,可以通过点亮LED,或者向串口 打印一些调试信息,以

8、此表明系统的状态是0K还是Erroro然后准备进入C 语言代码:拷贝Bootloader的RW/R0段到相应的运行位置,初始化ZI段, 初始化系统堆栈,设置FIQ/IRQ中断处理程序入口,设置完成就可以进入到 C代码了。3. 2. 2 Boot loader 的 stage2为了让程序跳入C语言的“main”函数,我们釆用直接将pc指针指向 “main”函数的方法,实现代码如下:THUMBCODE。二IF ,如果是汇编Thumb代码,则釆用bx指令跳转bx lrIo | = ELSEmov pc, lro汇编ARM代码,则直接跳转到main函数。二 ENDIF进入main函数后即可以开始本阶段

9、stage2的初始化任务,这包括:(1)初始化至少一个串口,以便和终端用户进行交互;(2)初始化讣时器,延时并提示启动模式的选择,如果进入启动加载模式, 则系统控制权交ill uClinux操作系统,Bootloader功成身退,否则程序继 续向下执行。(3)初始化网络,包括网络基本信息配置等;(5)如果系统配有LCD等外设,可以在此初始化;(6)初始化Flash:检测是否支持该Flash芯片(可通过比较Flash ID的 方式实现);(7)初始化中断,包括屏蔽中断,清除中断悬挂标志,初始化中断向量表, 注册需要的中断处理函数等。(8)初始化命令控制台,等待用户键入命令。在初始化这些设备之前,

10、也可以改变LED灯的状态,以表明我们已经进入 main函数执行。设备初始化完成后,可以通过串口输出一些打印信息,如 程序名字字符串、版本号等。本系统中釆用的系统启动引导方案流程图如图 1所示。4. 难点分析4. 1异常及中断处理在ARM支持的7种模式中,共有5种异常模式,而其中乂尤以外部中断模式 (IRQ)应用较为广泛,其异常处理过程也较为复杂。本文下面将以IRQ异 常处理为例,讲述一个通用的中断使用及处理过程。一个ARM通用的中断处 理过程大致可以分为以下3步:(1)异常响应:获取异常处理程序入口地址,并进入异常处理程序;(2)现场保护及恢复:即进入中断服务程序(ISR)前后中断现场的保护

11、和恢复;(3)中断服务:计算中断源索引号,清中断,然后进入中断服务。本例中IRQ异常处理相关代码如下:ResetEntrybSYS_RST_HANDLER。复位异常bIRQ_SVC_HANDLER。外部中断请求MACRO o通过一个宏定义,统一处理各异常处理程序与异常向量地址的映 射关系$HandlerLabel HANDLER $ExceptHandler$HandlerLabelsub sp, sp, #4o 预留一个字的空间用来保存PC的跳转地址stmfdsp!, rO。保存下面中断处理中使用到的rO寄存器ldr 入rOldrrO, rO处理函数入口读入rOstrrO, sp, #4数入

12、口存入堆栈中刚才预留的空间ldmfd sp!, rO, pc) 常处理函数MENDIRQ_SVC_HANDLER HANDLER。将异常O将异常处理函O恢复现场,同时跳入异IrqSvcVector 。调用宏定义SYS_RST_HANDLERo复位异常时程序跳转地址o系统初始化代码rO, =$ExceptHandler 将保存有异常处理函数入口的地址读ldr rO, =IrqSvcVectorldr rl,二IRQ_SERVICEstr rl, rOIrqSvcVectoro将IRQ异常处理程序入口存入变量IRQ_SERVICESTMFD sp!, r0-rl2, lrBL ISR.IrqHan

13、dlero跳入C语言中定义的中断服务程序(ISR)异常返回同时复制相应SPSR到CPSR,/C语言中定义的中断服务程序LDMFD sp!, r0-rl2, lr)SUBS pc, lr, #4 实现处理器模式自动切换void ISR_IrqHandler(void)unsigned int IntOffSetoIntOffSet = (unsigned int) ini (INTOFFSET) /取出中断源索引号Clear_PendingBit 仃ntOffSet2)。/清中断(*InterruptHandlersInt0ffSet2) () o/ 进入对应的中断服务子函数从上面的代码我们可以

14、总结得出,接收到IRQ中断请求后程序的执行流程 是:(1) 执行完当前指令,程序自动跳到0x18地址;(2) 从 0x18 程序跳转到 IRQ_SVC_HANDLER:(3) 从IRQ_SVC_HANDLER再到SDRAH高端异常矢量表;(4) 从SDRAM拓端异常矢量表跳转到IRQ_SERVICE异常处理程序;(5) III IRQ.SERVICE最后进入中断服务程序,完成中断处理任务后返回。4.2命令控制台当Bootloader工作在下载模式时,通常会通过串口向终端用户提供一个简 单的命令控制台,为了使用的方便,我们这里对其功能进行了扩充,添加了 命令键入时对键盘“上、下、左、右、Home

15、. End儿个方向键的支持。通过吊口收发或显示字符时,我们使用的通常是字符的ASCII码。对于非控 制字符,也即键入命令时我们可能使用到的命令字符,在控制台中我们使用 了 ASCII码值从0x200x7e之间的字符。对于控制字符,在常用字符ASCII 码对照表中我们可以找到Enter键、Backspace(退格)键以及ESC键的ASCII 码,但是却没有上下左右方向键以及Home. End键对应的ASCII码,通过对 键盘输入字符的吊口收发测试发现,如果在测试时按下了方向键则吊口在每 次按键后会连续发送出3字节数据,前两字节所有方向键的数据相同,分别 是Oxlb, 0x5b,第3字节对应不同的

16、按键,上下右左方向键分别对应的值 为:0x41、0x42、0x43、0x44, Home 和 End 键对应的值为 0x48 和 0x4b 故 要检测键盘是否键入了方向键,需要向串口连续读取三字节的数据,同理, 要控制光标向左、向右移动或Home、End也需要连续一次向串口发送3字节 数据。命令控制台从串口接收到字符后,程序处理的流程图如图2所示。5 结束语Bootloader与具体的硬件环境和操作系统是紧密联系在一起,针对某个CPU 芯片编写Bootloader代码,首先要了解该CPU的内核结构、指令系统,其 次是具体芯片的结构和各种片上资源,以及所采用的操作系统。本文给出的Bootload

17、er代码已经在基于Samsung公司的S3C4510B芯片开发的系统板上 运行并测试通过。该Bootloader能够正常引导及更新uClinux内核,系统 运行稳定,完全实现了设计目的,达到了嵌入式系统的设计要求。参考文献:1 .李驹光等.ARM应用系统开发详解一一基于S3C4510B的系统设计.清 华大学出版社.2003 .2 .詹荣开.嵌入式系统Bootloader技术内幕.http:/linux. chinaunix. net/doc/embedded/2005-01T3/762. shtml3 .蔡治等.基于ARM核的嵌入式应用系统中的启动代码的编程.电子科 技,N06, 2005版权

18、申明本文部分内容,包括文字、图片、以及设计等在网上搜集整理。 版权为潘宏亮个人所有This article includes some parts,including text, pictures, and design. Copyright is Pan Hongliang,s personal ownership用户可将本文的内容或服务用于个人学习、研究或欣赏,以及其 他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律 的规定,不得侵犯本网站及相关权利人的合法权利。除此以外,将本 文任何内容或服务用于其他用途时,须征得本人及相关权利人的书面 许可,并支付报酬。Users may use the contents or services of this article for personal study, research or appreciation, and other non-commercial or non-profit purposes, but at the same time, they shall abide by the provisions of copyright law and other relevant laws, and shall not infringe

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论