BootLoader的设计与实现.ppt
《BootLoader的设计与实现.ppt》由会员分享,可在线阅读,更多相关《BootLoader的设计与实现.ppt(51页珍藏版)》请在三一办公上搜索。
1、BootLoader的设计与实现,国家ASIC系统工程技术研究中心 SOC系统部,Windows CE操作系统,重定位问题?,定义1.当编译器或汇编器编译一个单独的模块时,它不知道这个模块会被加载到内存的何处,这时编译器输出代码时就遵循一个惯例,编译每个模块都是从地址0开始。当这个模块真正装入内存时,他一般不可能从0开始,这时就要一个地址转换的过程,称之为重定位,重地位 分类,1)静态重定位 在程序被加载到内存之前已经知道了它将要加载到内存的开始地址,这样就可以事先进行地址转换,把相对地址转换成绝对地址。2)动态重地位 作业装入内存后所有的地址仍然是相对地址,将相对地址转换成绝对地址的过程被推
2、迟到程序指令要真正执行时进行。动态重定位要硬件重定位寄存器支持,1 BootLoader概述1.1 BootLoader的概念1.2 BootLoader的操作模式1.3 嵌入式系统的引导模式1.4 BootLoader的功能特性2 BootLoader的体系结构2.1 BooterLoader 的架构2.2 BooterLoader 的支持库,内容安排,3 BootLoader的代码的组件和执行流程3.1 BooterLoader代码组件3.2 BooterLoader代码的执行流程4 BootLoader开发前的硬件考虑4.1 考虑的原因4.2 考虑的因素4.3 基于s3c2440的开发板
3、5 BootLoader的设计与实现5.1 构建创建环境,内容安排,5.2 startup函数的设计与实现5.3 主函数main的设计与实现5.4 控制流函数的设计与实现5.5 调试函数的设计与实现5.6 以太网控制器相关的函数5.7 写FLASH函数的设计与实现5.8 镜像下载函数的设计与实现5.9 时间相关函数的设计与实现5.10 配置文件,内容安排,1 BootLoader概述,1.1 BootLoader的概念 BootLoader的描述操作系统内核运行前运行地一段小程序。初始化硬件、建立内存空间映射图,为OS的运行准备好正确的环境。带有BootLoader的固态存储介质典型空间分配如
4、图1所示 BootLoader的功能 引导系统 加载操作系统,图1,1.2 BootLoader的操作模式 启动加载模式 又叫自主模式,BootLoader将预先存储在永久固态介质上 的OS镜像加载到RAM中运行。下载模式 目标机通过串口、网口或者USB从主机端下载镜像到目标机端点RAM中,然后再被 BootLoader 写到目标机上的FLASH 类固态存储设备中,1.3 嵌入式系统的引导模式 BootLoader引导模式 优点:可以轻松实现内核升级 非BootLoader引导模式?操作系统事先写入到CPU开始执行的地址位置,或者在CPU开始执行的地址位置写入一个RESETVECTOR变量,由
5、它来定义一个跳转地址,指向操作系统的起始位置,1.4 BootLoader的功能特性并非所有平台都支持下面列出的功能特性,但大部分特性对所有平台来说都是有用的 BootLoader典型特性 BootLoader应驻留在FLASH等永久存储介质里 BootLoader应提供消息反馈机 尽量使用微软提供的支持库开发BootLoader BootLoader要能加载BootLoader镜像和OS镜像,对OS镜像要既能从RAM加载,也能从FLASH加载 提供数据正确性保障 要和OAL共享相同的硬件初始化代码,BootLoader的附加功能特性 在BootLoader的输出信息中,应包含版本、开发者和构
6、建日期等信息 设计一个序列化的功能选项菜单,为用户开发提供便利 支持自更新 与PB协调工作,实现复位下载,复位跳转和自更新 提供一种监视和反馈机制,监控下载过程 在其中尽肯能的包含以太网调试驱动,2 BootLoader的体系结构,2.1 BooterLoader 的架构BooterLoader的结构如图2所是:,图2,五个组成部分BLCommon库,OEM代码,Eboot库,EDBG驱动,以及存储管理 OEM代码必须由用户自己编写 EDBG驱动,以及存储管理可能需要修改,视具体情况 BLCommon库和Eboot库完全不用改 OEM代码用户根据自己的平台特点编写或修改的代码 存放路径为:%_
7、WINCEROOT%PlatformSrcEboot,2.1 BooterLoader 支持库微软提供的众多静态库中,BootLoader中常用的有以下所述的四种 BLCommon库 存放路径:%_WINCEROOT%PublicCommonOakDriversEthdbgBlcommon 功能:把bootloader搬运到RAM里以获得更快的访问速度,即重定位BooterLoader在RAM中的位置,解码.bin文件的内容、验证校验及加载跟踪过程,调用OEM代码处理硬件初始化等 Blcommond代码的入口点:BootloaderMain,Eboot库 存放路径:%_WINCEROOT%Pu
8、blicCommonOakDriversEthdbgEboot 功能:为BooterLoader提供DHCP、TFTP和UDP服务DHCP是动态主机分配协议TFTP是简单文件传输协议UDP是用户数据协议 EDBG驱动是一组以太网卡的驱动程序代码 存放路径:%_WINCEROOT%PublicCommonOakDriversEthdbg 功能:提供常用以太网卡驱动,为BootLoader和OS的通信提供通用接口 WINCE5.0下已有的驱动:NE2000、CS8900、RTL8139、SMC9000、DEC21140等,存储管理 BootPart部分存放路径:%_WINCEROOT%Public
9、CommonOakDriversEthdbgBootPart 功能:辅助BootLoader进行分区管理,存储设备读/写等操作和管理 Flash FMD部分是用户自己编写的,存放在:%_WINCEROOT%PlatformSrcEboot,3 BootLoader的代码的组件和执行流程,2.1 BootLoader代码组件由两部分组成 OEM启动代码汇编编写,最先执行,完成对CPU时钟频率,内部寄存器,高速缓存及其他一些硬件相关功能的初始化。OEM主代码 C语言编写,BootLoader的主要代码区,通常包含镜像下载,串口调试,写Flash(可选),硬件监视器(可选)等几部分的代码,BootL
10、oader代码的控制流程如图3所示:,图3,2.1 BootLoader代码的执行流程根据BootLoader的任务来划分,可将其代码的执行分为两个阶段:Stage1 完成对CPU的初始化,地址的映射,然后跳到main函数 Stage2 数据的重定位,平台的初始化(主要是各种外围模块),镜像的加载整个BootLoader代码的执行过程,用交互图表示如下,,BootLoader代码的执行过程的交互图 图4,系统初始化函数,4 BootLoader开发前的硬件考虑,4.1 考虑的原因 硬件密切相关 不同操作系统BootLoader的功能相同,但实现方式不同 每种不同的 CPU 体系结构都有不同的
11、Boot Loader。有些 Boot Loader 也支持多种体系结构的 CPU,比如 U-Boot 就同时支持 ARM 体系结构和MIPS 体系结构。除了依赖于 CPU 的体系结构外,Boot Loader 实际上也依赖于具体的嵌入式板级设备的配置。这也就是说,对于两块不同的嵌入式板而言,即使它们是基于同一种 CPU 而构建的,要想让运行在一块板子上的 Boot Loader 程序也能运行在另一块板子上,通常也都需要修改 Boot Loader 的源程序。,5 BootLoader的设计与实现,以下设计过程中的代码均是以s3c2440BSP为例5.1 构建创建环境 为要新建的BootLoa
12、der创建一个新的目录,路径为:%_WINCEROOT%PlatformMyPlatformSrcBootLoaderEbootMyPlatform是要创建BootLoader的平台名 创建命令行环境为BootLoader提供所需要的静态库 创建SOURCES文件和makefile文件 SOURCES文件为编译器提供编译信息 makefile文件用于驱动编译过程,5.2 startup函数的设计与实现 BootLoader的入口代码 最早编写的BootLoader函数,汇编编写,存放路径如下:%_WINCEROOT%PlatformMyPlatformSrcBootLoaderEbootMyP
13、latform是要创建BootLoader的平台名,文件扩展名为.s s3c2440的startup函数在这函数中主要完成的工作是对CPU的初始化,地址映射。2440BSP中的startup.s函数的流程图如图5所示:,图5,5.3 主函数main的设计与实现由Startup函数调用,C语言代码的入口点,在该函数中调用Blcommon库中的BootLoaderMain函数。2440BSP中主函数为main main函数的代码void main(void)/Clear LEDs./OEMWriteDebugLED(0,0 x3);/Common boot loader(blcommon)main
14、 routine./BootloaderMain();/Should never get here./SpinForever();,BootLoaderMain函数的代码 BootLoader 的主控函数,完成的下工作通过图6所示的流程可以看出。OEMWriteDebugLED函数的代码开发者根据自己的平台特点编写该代码,不是必须的。2440BSP包下的示例代码如下:void OEMWriteDebugLED(UINT16 Index,DWORD Pattern)volatile S3C2440A_IOPORT_REG*s2440IOP=(S3C2440A_IOPORT_REG*)OALPAt
15、oVA(S3C2440A_BASE_REG_PA_IOPORT,FALSE);/The S24x0X01 Eval platform supports/4 LEDs./s2440IOP-GPFDAT=(s2440IOP-GPFDAT,图6,5.4 控制流函数的设计与实现BootLoader的控制流函数有以下几个:OEMDebugInit()OEMPlatformInit()OEMPreDownload()OEMLaunch()这几个函数是BootLoader主控函数BootLoaderMain的重要组成部分,它们共同完成了内核代码的引导和加载,OEMDebugInit()函数该函数的主要作用:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- BootLoader 设计 实现
链接地址:https://www.31ppt.com/p-5416719.html