




已阅读5页,还剩20页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.1BootLoader概述,简单地说,BootLoader就是在操作系统内核或用户应用程序之前运行的一段小程序。通过这段小程序可以初始化硬件设备,建立内存空间的映射图,将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确环境。通常,BootLoader是依赖于硬件而实现的,因此,为嵌入式系统建立一个通用的BootLoader是很困难的。但是可以归纳出一些通用的概念,以便于了解特定BootLoader的设计与实现。BootLoader的主要任务如图7.1所示。,图7.1BootLoader的主要任务,7.2BootLoader与嵌入式系统的关系,每种不同的处理器体系结构都有不同的BootLoader。有些BootLoader也支持多种体系结构的处理器。除了依赖处理器的体系结构外,BootLoader实际上也依赖于具体的嵌入式板级设备的配置。即使是基于同一种处理器构建的两块不同的嵌入式板级设备,它们的BootLoader也是不同的。BootLoader源程序是很关键的代码,因为它是一些把特定的数字写入指定硬件寄存器的指令序列。系统加电复位后,所有的处理器通常都从某个处理器制造商预先安排的地址上取指令。如基于S3C44B0 x的处理器在复位时通常都从地址0 x00000000取它的第一条指令。而基于处理器构建的嵌入式系统通常都有某种类型的固态存储设备(如ROM、EEPPOM或FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,处理器将首先执行BootLoader程序。装有BootLoader内核的启动参数,内核映像和根文件系统映像的固态存储设备的典型空间分配结构如图7.2所示。,图7.2存储设备典型空间分配结构,7.2.1Bootloader的操作模式大多数Bootloader都包含启动加载模式及下载模式两种不同的操作模式,但这种区别仅对于开发人员才有意义。从最终用户的角度开,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别。1.启动加载模式(BootLoading)启动加载模式也称为自主(Autonomous)模式,即BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。这种模式是BootLoader的正常工作模式。2.下载(DownLoading)模式当采用下载模式时,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,如应用程序、数据文件、内核映像等。从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的固态存储设备中。下载模式要求在BootLoader中完成对串口或以太网口的初始化,定义相关的命令,向其终端提供相应简单的命令接口。BootLoader的这种模式通常在系统更新时使用。,7.2.2BootLoader的总体设计1阶段设计BootLoader的启动可以是分阶段的,因此在设计时也可将BootLoader分为阶段1和阶段2。将BootLoader分为2个阶段的原因如下。(1)基于编程语言的考虑阶段1主要用汇编语言编写,这是因为它主要行进与CPU核心及存储设备密切相关的处理工作,进行一些必要的初始化工作,是依赖于CPU体系结构的代码,为了增加效率以及因为涉及协处理器的设置,只能用汇编语言编写,这部分直接在FLASH中执行;阶段2可以用一般的C语言编写,用于实现一般的流程以及对板级的一些驱动支持,这部分会被复制到RAM中执行。(2)代码具有更好的可读性与移植性若对于相同的CPU以及存储设备,要增加外设支持,阶段1的代码可以维护不变,只对阶段2的代码进行修改;若要支持不同的CPU,则基础代码只需在阶段1中修改。,2.地址规划设计当BootLoader阶段设计好之后,需要考虑的是镜像存储的地址分配:如总镜像保存在什么地方,阶段2对应的镜像会被复制到什么地方,内核镜像原先存放在什么地方,BootLoader会把它又重新加载到什么地方;如何进行准确的地址规划以保证没有相互冲突等。3.模式设计对于普通用户来说只需要BootLoader的启动加载模式,但是对于开发者来说,则需要下载模式,因为他们需要时时刻刻地进行一些镜像的更新。为了在两者之间做到兼顾,这里介绍一个既支持启动加载模式又支持下载模式的具体思路:在BootLoader做完一些硬件初始化的工作之后,而在加载内核镜像之前,先在一定的时间内等待有没有用户有键盘输入。如果没有,则为启动加载模式,直接加载内核镜像进行启动;如果有,则进入命令行格式,这时开发者就可以根据自己的需要以及BootLoader的支持情况,做一些其他的工作。模式的转换设计主要在阶段2中实现。,7.3BootLoader的主要功能及典型结构,7.3.1BootLoader的阶段11.基本的硬件初始化基本的硬件初始化是BootLoader一开始就执行的操作,其目的是为了阶段2的内核的执行准备好一些基本的硬件环境。它执行的步骤如下:(1)屏蔽所有的中断。(2)设置处理器的速度和时钟频率。(3)RAM初始化。(4)初始化LED。(5)关闭处理器内部指令/数据缓存。2.加载阶段2的RAM空间3.复制阶段2到RAM4.设置堆栈指针(sp)5.跳转到阶段2的C程序入口点BootLoader在Flash和RAM中的系统布局如图7.3所示。,图7.3BootLoader在Flash和RAM中的系统布局,7.3.2BootLoader的阶段2阶段2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。1.初始化阶段2要使用的硬件设备:通常包括初始化一个串行口,初始化计时器等。2.检测系统内存映射:所谓内存映射就是指在整个物理地址空间中有哪些地址范围被分配用来寻址系统的RAM单元。在S3C44B0 x处理器中,从0 x0C000000到0 x10000000之间的64MB地址空间被用作系统的RAM地址空间。3.加载内核映像和根文件系统映像:(1)规划内存占用的布局;(2)从Flash上复制。4.调用内核:完成了所有硬件的设置后,就可以跳转到内核,开始运行内核了。,从Flash设备上拷贝映像的工作,程序代码如下:/*拷贝Flash地址0 x10000内核到RAM0 xC300000中*/ldrr0,=0 x10000ldrr1,=0 xC300000addr2,r0,#(1536*1024)copy_kernel:ldmiar0!,r3-r10stmiar1!,r3-r10cmpr0,r2调用内核的程序代码如下:/*跳转到RAM中执行内核*/ldrr0,=0 xC30000;0 xC30000正是前面拷贝kernel函数中的目的地址movpc,r0;修改程序地址寄存器,完成跳转,74S3C44B0 x下uCLinux的BootLoader分析,本节介绍S3C44BOX下的CLinux的BootLoader分析,由于它只是一个比较简单的BootLoader,所以它的阶段1和阶段2是在一起由汇编完成的,程序流程如图7.4所示。,图7.4简单的BootLoader工作流程图,以下是该BootLoader的完整程序。/*File:boot.s*/WTCONEQU0 x01D30000;以下的几个定义都是为了设置相应的控制寄存器,请注意查阅各位所对应的作用,理解所作的设置PCONEEQU0 x01D20028LOCKTIMEEQU0 x01D8000CPLLCONEQU0 x01D80000CLKCONEQU0 x01D80004,GLOBAL_start_start:breset;程序的第一条指令,在烧写时将会被烧写在0 x00000000地址addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000addpc,pc,#0 x0C000000,MEMORY_CONFIG:;定义一组数据用来后面的设置存储器,可看作一个数组DCD0 x11110102DCD0 x600DCD0 x7FFCDCD0 x7FFCDCD0 x18000DCD0 x18000DCD0 x860459DCD0 x10DCD0 x20DCD0 x20,;复位地址reset:;关看门狗ldrr0,=WTCONldrr1,=0 x0strr1,r0;设置端口控制寄存器PortE,打开RXD0盒TxDO(串口输入功能)ldrr1,=PCONEldrr0,=0 x25529strr0,r1;设置时钟控制寄存器ldrr1,=LOCKTIMEldrbr0,=0 xFFFstrbr0,r1,ldrr1,=PLLCONldrr0,=0 x78061strr0,r1ldrr1,=CLKCONldrr0,=0 x7FF8strr0,r1;设置寄存器memsetup:ldrr0,=MEMORY_CONFIG;通过前面已定义好的数组用4条指令就可以完成设置ldmiar0,r1-r13ldrr0,=0 x01C80000stmiar0,r1-r13,;拷贝Flash地址0 x1000内核到RAM0 xC300000中ldrr0,=0 x10000ldrr1,=0 xC300000addr2,r0,#(1536*1024)copy_kernel:ldmiar0!,r3-r10stmiar1!,r3-r10cmpr0,r2blecopy_kernel;跳转到RAM中执行内核ldrr0,=0 xC300000;0 xC300000正式前面拷贝内核函数中的目的地址movpc,r0;修改程序地址寄存器,完成跳转,75其他的初始化方,在实际的应用中,有些设备只需要简单的应用函数便可以满足需要,不需要加载操作系统,有些设备的操作系统比较简单,不需要单独的BootLoader来引导。这时可以通过一个初始化程序来完成对硬件的初始化,最后跳到主程序中去。如果需要,可以在主程序的开始,调用操作系统的初始化程序。不过在这个初始化程序中所要完成的工作和BootLoader的工作基本一致。下面介绍一个S3C44B0 x的初始化程序,它是所建立的工程的一部分。在这个初始化程序完成后调用了main函数,从中可以清楚地看到它调用uC/OS-II的过程。当设置目标文件入口时,它所生成的*.O文件就被选中,当烧写时也同样被烧写到Flash的0 x000000地址处。这样系统上电后也是首先执行这个初始化程序。程序流程如图7.5所示。下面介绍几个程序段。,图7.5其它初始化方式程序流程图,1异常中断向量表及中断处理跳转的宏AREAInit,CODE,READONLYENTRYbResetHandlerbHandlerUndefbHandlerSWI;*bHandlerIRQbHandlerFIQ;*VECTOR_BRANCHldrpc,=HandlerEINT0;mGA硬件中断向量表(H/Winterruptvectortable)ldrpc,=HandlerEINT1;ldrpc,=HandlerEINT2;,下面是具体的中断处理函数跳转的宏,通过上面的$HandlerLabel的宏定义展开后跳转到对应的中断处理函数(对于向量中断):HandlerFIQHANDLERHandleFIQHandlerIRQHANDLERHandleIRQHandlerUndefHANDLERHandleUndefHandlerSWIHANDLERHandleSWIHandlerDabortHANDLERHandleDabortHandlerPabortHANDLERHandlePabortHandlerADCHANDLERHandleADCHandlerRTCHANDLERHandleRTCHandlerUTXD1HANDLERHandleUTXD1HandlerUTXD0HANDLERHandleUTXD0HandlerSIOHANDLERHandleSIO,2堆栈初始化程序InitStackmrsr0,cpsrbicr0,r0,#MODEMASKorrr1,r0,#UNDEFMODE|NOINTmsrcpsr_cxsf,r1;UndefModeldrsp,=UndefStackorrr1,r0,#ABORTMODE|NOINTmsrcpsr_cxsf,r1;AbortModeldrsp,=AbortStack,orrr1,r0,#IRQMODE|NOINTmsrcpsr_cxsf,r1;IRQModeldrsp,=IQRStackorrr1,r0,#FIQMODE|NOINTmsrcpsr_cxsf,r1;FIQMModeldrsp,=FIQStackbicr0,r0,#MODEMASK|NOINTorrr1,r0,#SVCmodemsrcpsr_cxsf,r1;SVCModeldrsp,=SVCStackmovpc,Ir,3存储器配置存储器配置十分重
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 紧固件采购工作总结与计划
- 《秦兵马俑》课件评语
- 抑郁症评估护理查房
- 新修订森林法核心解读与实施要点
- 公司水电火安全培训课件
- 护理不良事件分析与防范培训
- 《甲午战争》课件
- 广东省汕头市金平区2024-2025学年高一下学期第一次月考英语考试题目及答案
- 五个好作风课件
- 跟合作伙伴汇报
- DL∕T 2559-2022 灯泡贯流式水轮机状态检修评估技术导则
- 租赁车位安装充电桩协议
- JT-T 722-2023 公路桥梁钢结构防腐涂装技术条件
- 法院书记员考试试题
- 车库顶板施工电梯基础回顶专项方案附计算书
- 医学装备质量管理分析报告
- 国际机场飞机维修机库施工组织设计
- E190飞机舱门开关
- GB/T 3871.9-2006农业拖拉机试验规程第9部分:牵引功率试验
- GB/T 3836.4-2021爆炸性环境第4部分:由本质安全型“i”保护的设备
- GB 17840-1999防弹玻璃
评论
0/150
提交评论