-1-嵌入式系统BootLoader的设计与实现S3C44B0X的BootLoader-2-课件总目录2.移植前规划3.Bootloader1.绪论-3-章节目录1.绪论1.1BootLoader简介内容提要返回1下一页上一页-4-1.绪论内容提要本章首先介绍了Bootloader的定义、特点、安装媒介、下载方式、和启动过程等方面的内容。返回1下一页上一页-5-1.1BootLoader简介(1)BIOS定义:BIOS(BasicInput/OutputSystem)是一组固化到计算机内主板上一个ROM芯片上的程序,它保存着计算机最重要的基本输入输出的程序、系统设置信息、开机后自检程序和系统自启动程序;主要功能:是为计算机提供最底层的、最直接的硬件设置和控制。返回1下一页上一页-6-1.1BootLoader简介(2)嵌入式系统引导加载程序对于PC机来说,其开机后操作系统启动前的硬件初始化操作是由BIOS完成的;对于嵌入式系统来说,出于通用性、价格等方面的考虑,通常并没有像BIOS那样的固件程序;启动时用于完成初始化操作的引导加载程序必须自行编写,这段程序一般被称为Bootloader程序。BootLoaderBootLoader程序是系统加电(或复位)后运行的第一段软件代码。主要作用:通过这段代码,可以初始化系统硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便最终调用操作系统内核。返回1下一页上一页-7-1.1BootLoader简介(3)BootLoader特点BootLoader除了依赖CPU的体系结构外,还依赖于具体的嵌入式板级设备的配置;对于两块不同的嵌入式开发板,即使它们是基于同一种CPU而构建的,如果他们的硬件资源和配置不一致,要想让运行在一块板子上的BootLoader程序也能运行在另一块板子上,也还是需要作一些必要的修改。通用BootLoader综上所述,为嵌入式系统建立一个通用的BootLoader是很困难的;尽管如此,我们仍然可以对BootLoader(尤其是基于同种Core的微处理器)归纳出一些通用的概念和设计思路,用来指导用户特定BootLoader的设计与实现。返回1下一页上一页-8-1.1BootLoader简介(4)BootLoader安装媒介系统加电或复位后,所有的CPU通常都从CPU制造商预先安排的地址上取指令。举例说明基于ARM7TDMICore的嵌入式系统中,系统在上电或复位时是从0x00000000地址开始取第一条指令执行,而在这个地址安排的通常就是系统的BootLoader程序。嵌入式系统通常都有某种类型的固态存储设备(比如ROM、EPROM或FLASH等)被安排这个起始地址上用来存放BootLoader程序。返回1下一页上一页-9-1.1BootLoader简介(5)BootLoader下载方式目标机串口网口JTAGMPURAMBOOTROM下载工具宿主机通过编程器将可执行目标文件烧写到BootROM中。通常通过串行口、网口或JTAG等接口下载。返回1下一页上一页-10-1.1BootLoader简介(6)BootLoader启动过程为了增加BootLoader的通用性和可移植性,本文把启动过程分为stagel和stage2两个阶段。stage1阶段:执行的是用汇编语言来实现的依赖CPU体系结构的代码,这样可以提高系统的启动速度。stage2阶段:完成的是OS内核启动前的准备工作,多采用处理能力强、可移植性好的C语言来实现。最小启动代码stage1阶段执行的代码,我们称之为最小启动代码。所谓最小启动代码是指为了完成系统(OS或用户应用程序)启动所必须的最少硬件的初始化程序。返回1下一页上一页-11-1.3µC/OS-II移植流程Phase1Phase21.移植的硬件条件2.编译器的选择3.工作状态的选择4.工作模式的选择5.BootLoader框架6.初始化流程7.编写最小启动代码移植前规划阶段操作系统移植阶段-12-章节目录2.移植前规划2.1移植的硬件条件2.2编译器的选择2.3工作状态的选择2.4工作模式的选择内容提要返回2下一页上一页-13-2.2编译器的选择(2)常用的ARM编译器目前,比较流行的编译器有SDT、ADS、IAR、KEIL和GCC等,其中SDT和ADS均为ARM公司开发,ADS为SDT的升级版。本移植采用的编译器ADS1.2(ARMDeveloperSuite)集成开发环境。返回2下一页上一页-14-2.3工作状态的选择ARM处理器工作状态自从ARM7TDMICore以后,体系结构中具有T变种的ARM处理器核可以工作在以下两种状态。ARM状态ARM状态下执行字对准的32位ARM指令;Thumb状态Thumb状态下执行半字对准的16位Thumb指令。两种工作状态可以进行相互切换。本移植采用的工作状态本移植只实现COS-II在ARM状态下工作。返回2下一页上一页-15-2.4工作模式的选择(1)ARM处理器工作模式与用户模式类似,但具有可以直接切换到其它模式等特权支持操作系统的特权任务系统(sys)未定义指令异常时进入此模式支持硬件协处理器的软件仿真未定义(und)在ARM7TDMI没有大用处用于支持虚拟内存和存储器保护中止(abt)复位和软件中断时进入此模式操作系统保护代码管理(svc)IRQ异常响应时进入此模式用于通用中断处理中断(irq)FIQ异常响应时进入此模式支持高速数据传输及通道处理快中断(fiq)不能直接切换到其它模式正常程序工作模式用户(usr)备注说明处理器模式返回2下一页上一页-16-2.4工作模式的选择(2)特权模式与用户模式类似,但具有可以直接切换到其它模式等特权支持操作系统的特权任务系统(sys)未定义指令异常时进入此模式支持硬件协处理器的软件仿真未定义(und)在ARM7TDMI没有大用处用于支持虚拟内存和存储器保护中止(abt)复位和软件中断时进入此模式操作系统保护代码管理(svc)IRQ异常响应时进入此模式用于通用中断处理中断(irq)FIQ异常响应时进入此模式支持高速数据传输及通道处理快中断(fiq)不能直接切换到其它模式正常程序工作模式用户(usr)备注说明处理器模式说明1.除用户模式外,其它模式称为特权模式;2.ARM内部寄存器和一些片内外设在硬件设计上只允许(或可选为只允许)特权模式下访问;3.特权模式可以自由的切换处理器模式,而用户模式不能直接切换到别的模式。返回2下一页上一页-17-2.4工作模式的选择(3)异常模式与用户模式类似,但具有可以直接切换到其它模式等特权支持操作系统的特权任务系统(sys)未定义指令异常时进入此模式支持硬件协处理器的软件仿真未定义(und)在ARM7TDMI没有大用处用于支持虚拟内存和存储器保护中止(abt)复位和软件中断时进入此模式操作系统保护代码管理(svc)IRQ异常响应时进入此模式用于通用中断处理中断(irq)FIQ异常响应时进入此模式支持高速数据传输及通道处理快中断(fiq)不能直接切换到其它模式正常程序工作模式用户(usr)备注说明处理器模式说明1.这五种模式称为异常模式;2.可以通过程序切换进入外,也可由特定的异常进入;3.当特定的异常出现时,处理器进入相应的模式;4.每种异常模式都有一些独立的寄存器;5.系统上电或复位后自动进入管理(SVC)模式,本移植COS-II的任务正常是运行在管理模式。-18-章节目录3.操作系统移植3.1BootLoader总体流程图3.2BootLoader初始化步骤3.3编写最小启动代码内容提要返回3下一页上一页-19-3.操作系统移植内容提要本章首先介绍了BootLoader所必需实现的功能;然后采用流程图方式介绍了BootLoader编写的步骤;接着用图示的方法介绍了最小启动代码的编写。返回3下一页上一页-20-3.1BootLoader总体流程图3.1.1总体流程图硬件初始化stage1123设置中断向量表最小硬件初始化最小启动代码RTOS运行环境初始化RTOS初始化stage2456RTOS初始化启动RTOS硬件抽象层初始化软件初始化用户程序7用户程序初始化返回3下一页上一页-21-3.2BootLoader初始化步骤(1)3.2.1硬件初始化阶段123最小硬件初始化最小启动代码stage1设置中断向量表RTOS运行环境初始化中断向量表放在上电后映射在从0x00000000开始的8*4个字节的连续存储空间中;其作用是指定了各种异常中断处理程序的入口地址。①设置中断向量表返回3下一页上一页-22-3.2BootLoader初始化步骤(2)3.2.1硬件初始化阶段23最小硬件初始化最小启动代码设置中断向量表RTOS运行环境初始化stage11禁用看门狗定时器;屏蔽所有中断;设定CPU的时钟频率;初始化存储器;分配各种模式下的栈空间。②最小硬件初始化返回3下一页上一页-23-3.2BootLoader初始化步骤(3)3.2.1硬件初始化阶段123最小硬件初始化最小启动代码设置中断向量表RTOS运行环境初始化stage1为RTOS运行准备合适的RAM;呼叫RTOS主(Main)程序。③RTOS运行环境初始化返回3下一页上一页-24-3.2BootLoader初始化步骤(4)3.2.2RTOS初始化阶段456硬件抽象层初始化RTOS初始化启动RTOSstage2系统cache、总线设置;中断及中断处理程序初始化;I/O端口配置;初始化定时器;对RTOS所需的其它设备初始化。④硬件抽象层初始化返回3下一页上一页-25-3.2BootLoader初始化步骤(5)456硬件抽象层初始化RTOS初始化启动RTOSstage2RTOS内核启动参数初始化;RTOS扩展部件初始化。⑤RTOS初始化3.2.2RTOS初始化阶段返回3下一页上一页-26-3.2BootLoader初始化步骤(6)3.2.2RTOS初始化阶段456硬件抽象层初始化RTOS初始化启动RTOSstage2运行优先级最高的就绪任务;启动RTOS时钟中断。⑥启动RTOS返回3下一页上一页-27-3.2BootLoader初始化步骤(7)3.2.3用户程序初始化阶段7用户程序用户程序初始化用户程序正常运行所进行的初始化。⑦用户程序初始化返回3下一页上一页-28-3.3编写最小启动代码3.3.1设置中断向量表向量地址异常中断类型转移指令0x0000001CFIQLDRPC,=FIQHandler0x00000018IRQLDRPC,=IRQHandler0x00000014ReservedNOP0x00000010DataAbortLDRPC,=DabortHandler0x0000000CPrefechAbortLDRPC,=PabortHandler0x00000008SWILDRPC,=SWIHandler0x00000004UndefinedInstructionLDRPC,=UndefHandler0x00000000ResetBResetHandler知识点讲解中断向量表结构特点中断向量表中每种异常只分配4个字节,所以不能放下整个异常中断处理程序,只能放一条跳转指令,用以跳转到相应的异常中断处理程序。设置中断向量表示意代码分析返回3下一页上一页-29-3.3编写最小启动代码知识点讲解禁用看门狗定时器和屏蔽所有中断为了避免初始化过程被打断,需要禁用看门狗定时器和屏蔽所有中断。禁用看门狗定时器和屏蔽所有中断示意代码分析3.3.2最小硬件初始化WTCONEQU0x01d30000;看门狗定时器控制寄存器LDRr0,=WTCONLDRr1,=0x00000000;禁用看门狗定时器STRr1,[r0]……INTMSKEQU0x01e0000c;中断屏蔽寄存器LDRr0,=INTMSKLDRr1