嵌入式系统BootLoader的设.ppt
《嵌入式系统BootLoader的设.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统BootLoader的设.ppt(129页珍藏版)》请在三一办公上搜索。
1、嵌入式系统BootLoader的设计与实现,基于S3C44B0X的C/OS-移植,操作系统移植概述,所谓操作系统的移植,是指一个操作系统能够在某个微处理器平台上运行。操作系统C/OS-II是一个基于优先级的抢占式实时多任务内核。C/OS-II的大部分代码是用ANSI C语言编写的,也包含一小部分汇编语言代码,使之可以提供给不同架构的微处理器使用。至今,从8位到64位,C/OS-II已经在多种不同架构的微处理器上移植成功。,C/OS-II移植纲要,Phase 1,Phase 2,Phase 3,1.C/OS-II移植的条件,2.编译器的选择,3.工作状态的选择,4.工作模式的选择,5.BootL
2、oader,6.系统初始化流程,7.最小启动代码编写,8.C/OS-II相关文件修改,9.确保交叉编译环境正常工作,10.验证OSTaskStkInit()和OSStartHighRdy(),11.验证OSCtxSw(),12.验证OSTickISR()和OSIntCtxSw(),移植前的规划,操作系统移植,测试验证,Phase 1 移植前的规划,C/OS-II移植的条件,1,2,3,4,编译器的选择,工作状态的选择,工作模式的选择,COS-II移植的条件,处理器的C编译器能产生可重入代码;在程序中可以打开/关闭中断;处理器支持中断,并且能产生定时中断(通常为10-100Hz);处理器能支持一
3、定数量的数据存储硬件堆栈;处理器有将堆栈指针以及其它CPU寄存器的内容读出、并存储到堆栈或内存中去的指令。针对上述移植条件,基于ARM7TDMI Core的S3C44B0X处理器满足其中的硬件要求。,Phase 1 移植前的规划,C/OS-II移植的条件,1,2,3,4,编译器的选择,工作状态的选择,工作模式的选择,移植对编译器的要求及选择,除了对硬件有要求外,还需要一个支持C语言和ARM汇编语言的综合编译开发环境(IDE)。综合编译开发环境至少需要包括C编译器、ARM汇编器和链接器。C编译器用来对C语言程序进行编译生成汇编代码。由于移植时需要对CPU的寄存器进行操作,所以需要汇编器能够支持汇
4、编语言程序。链接器根据定位信息将不同的模块(编译或汇编过的文件)链接成一个单一的、绝对定位的可执行的映像文件。针对ARM处理器核的C语言编译器有很多,目前在国内比较流行的有SDT、ADS、IAR、KEIL和GCC等;其中SDT和ADS均为ARM公司自己开发,ADS为SDT的升级版,以后ARM公司不再支持SDT。本移植采用ADS1.2集成开发环境进行程序的编译和调试。,Phase 1 移植前的规划,C/OS-II移植的条件,1,2,3,4,编译器的选择,工作状态的选择,工作模式的选择,工作状态的选择,自从ARM7TDMI Core以后,体系结构中具有T变种的ARM处理器核可以工作在以下两种状态,
5、并支持两个指令集:ARM状态 ARM状态下执行字对准的32位ARM指令;Thumb状态 Thumb状态下执行半字对准的16位Thumb指令;COS-II的任务可以在任何一种工作状态下运行,并可以进行状态切换。为了移植代码的编写简单,本移植只在ARM状态下实现。,Phase 1 移植前的规划,C/OS-II移植的条件,1,2,3,4,编译器的选择,工作状态的选择,工作模式的选择,ARM处理器工作模式(1),除用户模式外,其它模式均为特权模式。ARM内部寄存器和一些片内外设在硬件设计上只允许(或者可选为只允许)特权模式下访问。此外,特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式
6、。,ARM处理器工作模式(2),这五种模式称为异常模式。它们除了可以通过程序切换进入外,也可以由特定的异常进入。当特定的异常出现时,处理器进入相应的模式。每种异常模式都有一些独立的寄存器,以避免异常退出时用户模式的状态不可靠。本移植中COS-II的任务正常运行在管理(SVC)模式。,Phase 2 操作系统移植,BootLoader,1,2,3,4,系统初始化流程,最小启动代码编写,C/OS-II相关文件修改,BootLoader的基本概念,要想让COS-II在S3C44B0X处理器上正常运行,我们需要对系统的硬件环境进行初始化。对于PC机,其开机后操作系统启动前的硬件初始化操作是由BIOS(
7、Basic Input/Output System)完成的,但对于嵌入式系统来说,出于通用性、价格方面的考虑,通常并没有像BIOS那样的固件程序,因此启动时用于完成初始化操作的引导加载程序必须自行编写完成,这段程序一般被称为Bootloader程序。BootLoader是系统加电(或复位)后运行的第一段软件代码。通过这段代码,我们可以初始化系统硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便最终调用操作系统内核。简单地说,BootLoader就是在操作系统内核运行之前运行的一段初始化程序。,BootLoader的特点,BootLoader除了依赖CPU的体系结构外
8、,还依赖于具体的嵌入式板级设备的配置,比如板卡的硬件地址分配,RAM芯片的类型,其它外设的类型等。对于两块不同的嵌入式开发板,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。因此,为嵌入式系统建立一个通用的BootLoader是很困难的。尽管如此,我们仍然可以对BootLoader(尤其是基于同种Core的微处理器)归纳出一些通用的概念和设计思路,用来指导用户特定的BootLoader设计与实现。,BootLoader的启动过程,为了增加BootLoader的通用性和可移植性
9、,本文把启动过程分为phasel和phase2两个阶段。phase1阶段执行的是用汇编语言来实现的依赖CPU体系结构的代码,这样可以提高系统的启动速度;phase2阶段完成的是OS内核启动前的准备工作,多采用处理能力强、可移植性好的C语言来实现。phase1阶段执行的代码,我们称之为最小启动代码。所谓最小启动代码是指为了完成系统(OS或用户应用程序)启动所必须的最少硬件的初始化程序。,BootLoader的安装媒介,系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。基于ARM7TDMI Core的嵌入式系统中,系统在上电或复位时是从0 x00000000地址开始取第一条
10、指令执行,而在这个地址处安排的通常就是系统的BootLoader程序。嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EPROM或FLASH等)被安排这个起始地址上用来存放BootLoader程序。,BootLoader的下载方式,通过编程器将可执行目标文件烧写到BootROM中;通常通过串行口、网口或JTAG等接口下载。,串口,网口,JTAG,目标机,MPU,RAM,BOOT ROM,下载工具,宿主机,Phase 2 操作系统移植,BootLoader,1,2,3,4,系统初始化流程,最小启动代码编写,C/OS-II相关文件修改,嵌入式系统的初始化流程,1,2,3,4,5,6,7,硬
11、件初始化,RTOS初始化,软件初始化,设置中断向量表,最小硬件初始化,RTOS初始化,启动RTOS,最小启动代码,phase1,phase2,用户程序,RTOS运行环境初始化,硬件抽象层初始化,用户程序初始化,嵌入式系统的初始化流程(1),1,2,3,硬件初始化阶段,最小硬件初始化,最小启动代码,中断向量表放在上电后映射在从0 x00000000开始的8*4个字节的连续存储空间中,其作用是指定了各种异常中断处理程序的入口地址。,phase1,设置中断向量表,RTOS运行环境初始化,嵌入式系统的初始化流程(2),硬件初始化阶段,禁用看门狗定时器;屏蔽所有中断;设定CPU的时钟频率;初始化存储器;
12、分配各种模式下的栈空间。,最小硬件初始化,1,2,3,最小硬件初始化,最小启动代码,设置中断向量表,RTOS运行环境初始化,phase1,嵌入式系统的初始化流程(3),硬件初始化阶段,为RTOS运行准备合适的RAM空间;呼叫RTOS主(Main)程序。,RTOS运行环境初始化,1,2,3,最小硬件初始化,最小启动代码,设置中断向量表,RTOS运行环境初始化,phase1,嵌入式系统的初始化流程(4),RTOS初始化阶段,4,5,6,硬件抽象层初始化,RTOS初始化,启动RTOS,硬件抽象层初始化,系统cache、总线设置;中断及中断向量处理子程序初始化;I/O端口配置;初始化定时器,为时钟中断
13、做好准备;对RTOS所需的其它设备初始化。,phase2,嵌入式系统的初始化流程(5),RTOS初始化阶段,4,5,6,硬件抽象层初始化,RTOS初始化,启动RTOS,RTOS初始化,RTOS内核启动参数初始化;RTOS扩展部件初始化。,phase2,嵌入式系统的初始化流程(6),RTOS初始化阶段,4,5,6,硬件抽象层初始化,RTOS初始化,启动RTOS,启动RTOS,运行优先级最高的就绪任务;启动RTOS时钟中断。,phase2,嵌入式系统的初始化流程(7),用户程序初始化阶段,用户程序初始化,用户程序正常运行所进行的初始化。,7,用户程序,用户程序初始化,Phase 2 操作系统移植,
14、BootLoader,1,2,3,4,系统初始化流程,最小启动代码编写,C/OS-II相关文件修改,设置中断向量表,因为中断向量表中每种异常只分配4个字节,所以不能放下整个异常中断处理程序,只能放一条跳转指令,用以跳转到相应的异常中断处理程序。,禁用看门狗定时器和屏蔽所有外部中断,示意代码分析,WTCON EQU 0 x01d30000;看门狗定时器控制寄存器INTMSK EQU 0 x01e0000c;中断屏蔽寄存器 ResetHandler LDR r0,=WTCON LDR r1,=0 x00000000;Watch Dog Disable STR r1,r0 LDR r0,=INTMS
15、K LDR r1,=0 x07ffffff;All Interrupt Disable STR r1,r0,说明:默认初始状态允许看门狗定时器工作(p496),所以要关闭。如果要屏蔽所有中断,可用MRS指令设置CPSR的I/F位(p431,p440)。,S3C44B0X时钟发生器组成(1),S3C44B0X的时钟发生器可产生CPU和外设所需要的时钟信号。时钟发生器可在S/W的控制下向外设提供时钟信号,也可断开时钟与每个外设的连接来降低功耗。首先要求要确定主时钟MCLK,然后以主时钟作为一种基准,通过分频控制定时器,串口等外设的时钟频率。S3C44B0X时钟发生器组成:主时钟源有两个:一个是XT
16、AL0和EXTAL0连接的外部晶振,另一个是EXTCLK连接的外部时钟;PLL的功能是以低频振荡器的输出作为输入,产生S3C44B0X需要的高频信号;还有一个时钟控制逻辑部件来可产生稳定的时钟频率。S3C44B0X时钟源的选择由处理器的两个引脚OM3:2控制。OM3:2=00时钟源为晶振,OM3:2=01时钟源为外部时钟。本移植采用晶振作为时钟源。晶振为6MHz,即fin=6MHz。,S3C44B0X时钟发生器组成(2),时钟发生器框图,说明:时钟发生器(p446),PLL锁相环原理框图,PLL锁相环框图,说明:PLL锁相环原理(p446-p447),设置PLL分频器,输出时钟频率fpllo和
17、输入的时钟频率fin的关系如下:fpllo=(m*fin)/(p*2s)其中,m=MDIV(分频器M的分频值)+8,p=PDIV(分频器P的分频值)+2,s=SDIV(分频器S的分频值)PLL值的选择向导:fpllo必须大于20Mhz,小于66MHz;fpllo*2s必须小于170MHz;,时钟控制逻辑部件,当PLL被配置为一个新的频率值时,时钟控制逻辑部件在PLL输出稳定之前禁止fout,直到PLL锁定系统时钟后取消禁止。PLL锁时实际上是PLL输出稳定所需要的时间,这个时间应长于208us。锁定时间值计算公式如下:tlock=(1/fin)*n 其中n=LTIMECNT值。,设定CPU及各
18、功能模块时钟频率,示意代码分析,PLLCON EQU 0 x01d80000;PLL控制寄存器 CLKCON EQU 0 x01d80004;时钟控制寄存器 LOCKTIME EQU 0 x01d8000c;锁时计数寄存器M_DIV EQU 0 x48 P_DIV EQU 0 x02S_DIV EQU 0 x01LDR r0,=LOCKTIMELDR r1,=0 x00000fff;tlock=(1/fin)*LTIMECNTSTR r1,r0 LDR r0,=PLLCON;fin=6MHz,fout=60MHLDR r1,=(M_DIV12)+(P_DIV4)+S_DIV)STR r1,r0
19、LDR r0,=CLKCONLDR r1,=0 x00007ff8;All Unit Block CLK EnableSTR r1,r0,存储器初始化概述,存储器系统的初始化是指对Flash、RAM存储器的地址范围,数据总线宽度及DRAM的刷新等进行软件设置。设置对象是存储器控制寄存器。芯片不同设置不同,具体需要参考芯片手册。S3C44B0X的存储器控制寄存器是以0 x01C80000为起始地址的13个连续的32位寄存器。可以一次将预先配置好的初始化数据存入与存储器控制器相关的13个寄存器。,S3C44B0X处理器不支持存储器地址重映射(Memory Remap)。,S3C44B0X复位后的存
20、储器地址分配,典型系统中存储器的分配情况,;BWSCON EQU 0 x01000002;|-Bank0=16bit Nor-Flash(AM29LV160DB)(2M);|-Bank1 NotInit;|-Bank2 NotInit;|-Bank3 NotInit;|-Bank4 NotInit;|-Bank5 NotInit;|-Bank6=16bit SDRAM(HY57V641620ET)(8M);|-Bank7 NotInit,S3C44B0X存储控制器功能描述,大/小端模式选择 S3C44B0X 具有一个输入引脚ENDIAN,处理器通过它的输入逻辑电平来确定数据类型是小端还是大端:
21、0:小端 1:大端 逻辑电平在复位期间由该管脚的上拉或下拉电阻确定。,S3C44B0X存储控制器功能描述,Bank0 总线宽度 BOOT ROM 在地址上位于ARM 处理器的Bank0 区,它可能具有多种数据总线宽度,因为Bank0是系统自举ROM存储体,所以必须在访问ROM之前定义Bank0的总线宽度,如下表所示:,其他存储体的总线宽度只能在系统复位后由程序进行设定,由地址为0 x01c8000的特殊寄存器BWSCON的相应位决定。,S3C44BOX存储系统的特点,-存储器引脚连接,6.2.3 S3C44B0X存储控制器功能描述,ONE BYTE BOOT ROM DESIGN,6.2.3
22、S3C44B0X存储控制器功能描述,例:,HALF-WORD BOOT ROM DESIGN WITH BYTE EEPROM/FLASH,6.2.3 S3C44B0X存储控制器功能描述,存储器初始化(2),示意代码分析,LDR r0,=SMRDATALDMIA r0,r1-r13LDR r0,=0 x01c80000;BWSCON AddressSTMIA r0,r1-r13SMRDATA DATA DCD cBWSCON DCD cBANKCON0;GCS0 DCD cBANKCON1;GCS1 DCD cBANKCON2;GCS2 DCD cBANKCON3;GCS3 DCD cBANK
23、CON4;GCS4 DCD cBANKCON5;GCS5 DCD cBANKCON6;GCS6 DCD cBANKCON7;GCS7 DCD cREFRESH;REFRESH DCD cBANKSIZE;BANKSIZE DCD cMRSRB6;MRSR6 DCD cMRSRB7;MRSR7,分配各种工作模式下的栈空间,如前面所述,基于ARM7TDMI Core的微处理器有用户、系统、FIQ、IRQ、管理、中止和未定义共7种模式,程序根据不同需求可能需要切换到不同的工作模式下运行。因为每种模式下都有各自的堆栈指针(SP),所以需要为每种模式分配栈空间。,ARM状态各模式下的寄存器,不同异常中断
24、发生进入不同工作模式,当系统上电或复位后从地址0 x00000000开始取第一条复位异常指令B ResetHandler执行,并自动切换到管理模式。,各种模式下的栈空间分配代码分析,示意代码分析,LDR sp,=SVCStack BL InitStacks InitStacks MRS r0,cpsr BIC r0,r0,#MODEMASK ORR r1,r0,#UNDEFMODE|NOINT;Undef Mode MSR cpsr_cxsf,r1 LDR sp,=UndefStack;Abort Mode;IRQ Mode;FIQ Mode;SVC Mode;USR Mode is not
25、initialized.,映像文件的组成,ARM链接器把编译(或汇编)生成的目标文件和所需要的库文件链接在一起生成可执行的ELF(Executable Linkable Format)格式的映像文件。ARM编译器编译生成的文件称为目标文件。编译器只对单个文件工作,每次只能编译一个源文件,输出一个目标文件。但链接器每次可以链接多个目标文件,把这些文件链接成一个可执行的映像文件。文件是编译器操作的基本单位,而段则是链接器操作的基本单位。链接器不关心有多少个输入文件,只关心有多少个和何种属性的输入段。链接器的输入段来源主要有两种:一种是来自源文件中的段,另一种是来自系统库文件中的段。这些输入段有3种
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 BootLoader

链接地址:https://www.31ppt.com/p-6414968.html