




已阅读5页,还剩40页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1 BootLoader的设计与实现 WindowsCE操作系统 LOGO 2 1BootLoader概述1 1BootLoader的概念1 2BootLoader的操作模式1 3嵌入式系统的引导模式1 4BootLoader的功能特性1 5几种特殊的BootLoader2BootLoader的体系结构2 1BooterLoader的架构2 2BooterLoader的支持库 内容安排 LOGO 3 3BootLoader的代码的组件和执行流程3 1BooterLoader代码组件3 2BooterLoader代码的执行流程4BootLoader开发前的硬件考虑4 1考虑的原因4 2考虑的因素4 3基于s3c2440的sinosys的M3开发板5BootLoader的设计与实现5 1构建创建环境 内容安排 LOGO 4 5 2startup函数的设计与实现5 3主函数main的设计与实现5 4控制流函数的设计与实现5 5调试函数的设计与实现5 6以太网控制器相关的函数5 7写FLASH函数的设计与实现5 8镜像下载函数的设计与实现5 9时间相关函数的设计与实现5 10配置文件 内容安排 LOGO 5 1BootLoader概述 1 1BootLoader的概念 BootLoader的描述操作系统内核运行前运行地一段小程序 初始化硬件 建立内存空间映射图 为OS的运行准备好正确的环境 带有BootLoader的固态存储介质典型空间分配如图1所示 BootLoader的功能 引导系统 加载操作系统 图1 LOGO 6 1 1BootLoader的操作模式 启动加载模式又叫自主模式 BootLoader将预先存储在永久固态介质上的OS镜像加载到RAM中运行 下载模式目标机通过串口 网口或者USB从主机端下载镜像到目标机端点RAM中 然后再被BootLoader写到目标机上的FLASH类固态存储设备中 LOGO 7 1 3嵌入式系统的引导模式 BootLoader引导模式 非BootLoader引导模式 使用RESETVECTOR引导 不使用RESETVECTOR引导 LOGO 8 1 4BootLoader的功能特性并非所有平台都支持下面列出的功能特性 但大部分特性对所有平台来说都是有用的 BootLoader典型功能特性 BootLoader应驻留在FLASH等永久存储介质里 BootLoader应提供消息反馈机 BootLoader要能加载BootLoader镜像和OS镜像 对OS镜像要既能从RAM加载 也能从FLASH加载 提供数据正确性保障 LOGO 9 BootLoader的推荐做法 尽量使用微软提供的支持库开发BootLoader 和OAL共享相同的硬件初始化代码 BootLoader的附加功能特性 在BootLoader的输出信息中 应包含版本 开发者和构建日期等信息 设计一个序列化的功能选项菜单 为用户开发提供便利 支持自更新 与PB协调工作 实现复位下载 复位跳转和自更新 提供一种监视和反馈机制 监控下载过程 在其中尽肯能的包含以太网调试驱动 LOGO 10 1 5几种特殊的BootLoader X86BIOSBootLoader x86SerialBootLoader x86ROMBootLoader LOGO 11 2BootLoader的体系结构 2 1BooterLoader的架构BooterLoader的结构如图2所是 图2 LOGO 12 五个组成部分BLCommon库 OEM代码 Eboot库 EDBG驱动 以及存储管理 OEM代码必须由用户自己编写 EDBG驱动 以及存储管理可能需要修改 视具体情况 BLCommon库和Eboot库完全不用改 OEM代码用户根据自己的平台特点编写或修改的代码 存放路径为 WINCEROOT Platform Src Eboot LOGO 13 2 1BooterLoader支持库微软提供的众多静态库中 BootLoader中常用的有以下所述的四种 BLCommon库 存放路径 WINCEROOT Public Common Oak Drivers Ethdbg Blcommon 功能 重定位BooterLoader在RAM中的位置 解码 bin文件的内容 验证校验及加载跟踪过程等 Blcommond代码的入口点 BootloaderMain LOGO 14 Eboot库 存放路径 WINCEROOT Public Common Oak Drivers Ethdbg Eboot 功能 为BooterLoader提供DHCP TFTP和UDP服务 EDBG驱动是一组以太网卡的驱动程序代码 存放路径 WINCEROOT Public Common Oak Drivers Ethdbg 功能 提供常用以太网卡驱动 为BootLoader和OS的通信提供通用接口 WINCE5 0下已有的驱动 NE2000 CS8900 RTL8139 SMC9000 DEC21140等 LOGO 15 存储管理 BootPart部分存放路径 WINCEROOT Public Common Oak Drivers Ethdbg BootPart 功能 辅助BootLoader进行分区管理 存储设备读 写等操作和管理 FlashFMD部分是用户自己编写的 存放在 WINCEROOT Platform Src Eboot这部分是被BLCommon库回调的代码 LOGO 16 3BootLoader的代码的组件和执行流程 2 1BootLoader代码组件由两部分组成 OEM启动代码汇编编写 最先执行 完成对CPU时钟频率 内部寄存器 高速缓存及其他一些硬件相关功能的初始化 OEM主代码C语言编写 BootLoader的主要代码区 通常包含镜像下载 串口调试 写Flash 可选 硬件监视器 可选 等几部分的代码 LOGO 17 BootLoader代码的控制流程如图3所示 图3 LOGO 18 2 1BootLoader代码的执行流程根据BootLoader的任务来划分 可将其代码的执行分为两个阶段 Stage1完成对CPU的初始化 地址的映射 然后跳到main函数 Stage2数据的重定位 平台的初始化 主要是各种外围模块 镜像的加载整个BootLoader代码的执行过程 用交互图表示如下 LOGO 19 BootLoader代码的执行过程的交互图图4 LOGO 20 4BootLoader开发前的硬件考虑 4 1考虑的原因 硬件密切相关 不同操作系统BootLoader的功能相同 但实现方式不同 LOGO 21 4 1考虑的因素 支持对BootLoader的更新 支持对BootLoader操作方式的切换 提供足够的RAM或是FLASH存储空间供调试 在开发启动代码的早期阶段 提供调试指示4 3s3c2440的sinosys的M3开发板 2MB的NORFLASH 64MB的NANDFLASH 支持以太网卡 支持串口 支持LED指示 LOGO 22 5BootLoader的设计与实现 以下设计过程中的代码均是以s3c2440BSP为例 平台是双实科技的sinosys m3试验箱5 1构建创建环境 为要新建的BootLoader创建一个新的目录 路径为 WINCEROOT Platform MyPlatform Src BootLoader EbootMyPlatform是要创建BootLoader的平台名 创建命令行环境为BootLoader提供所需要的静态库 这部分不是必须的 也可以通过SOURCES文件来提供静态库 创建SOURCES文件和makefile文件SOURCES文件为编译器提供编译信息makefile文件用于驱动编译过程 LOGO 23 5 2startup函数的设计与实现 BootLoader的入口代码最早编写的BootLoader函数 汇编编写 存放路径如下 WINCEROOT Platform MyPlatform Src BootLoader EbootMyPlatform是要创建BootLoader的平台名 文件扩展名为 s startup函数的作用主要完成对CPU的初始化 地址映射以及BootLoader代码的搬运 LOGO 24 5 3主函数main的设计与实现由Startup函数调用 C语言代码的入口点 在该函数中调用Blcommon库中的BootLoaderMain函数 BootLoaderMain函数的代码BootLoader的主控函数 完成的下工作通过图6所示的流程可以看出 也可以在其中添加其他代码如 开发者根据自己的平台特点编写程序运行状态指示性的代码 用来标识程序当前已经运行到此 LOGO 25 图6 LOGO 26 5 4控制流函数的设计与实现BootLoader的控制流函数有以下几个 OEMDebugInit OEMPlatformInit OEMPreDownload OEMLaunch 这几个函数是BootLoader主控函数BootLoaderMain的重要组成部分 它们共同完成了内核代码的引导和加载 LOGO 27 OEMDebugInit 函数该函数的主要作用 初始化调试端口 通常识异步串行通信口 UART 实例代码 BOOLOEMDebugInit void Setupfunctioncallbacksusedbyblcommon g pOEMVerifyMemory OEMVerifyMemory VerifyRAM g pOEMMultiBINNotify OEMMultiBINNotify Callserialinitializationroutine sharedwiththeOAL OEMInitDebugSerial return TRUE LOGO 28 OEMPlatformInit 函数该函数和硬件高度相关 主要作用 初始化RTC RealTimeClock 或任何被OEMEthGetSecs函数使用的和时间保存相关的设备 初始化显示屏 此为可选项 如开机显示LOGO 初始化Flash或Flash控制器 如果网络设备挂载在PCI总线上 初始化主PCI桥 对总线进行枚举来确定网络控制器以便进行镜像下载 配置PCI的硬件需求来使能网络控制器 如果网络设备挂载在PCMCIA总线上 则初始化PCMCIA桥或是控制器 初始化网络控制器 以便进行镜像下载 LOGO 29 OEMPreDownload 函数该函数的主要作用 为PB下载镜像产生一个唯一的目标硬件平台名 该平台名一般是与网络接口卡的MAC地址相关联的静态文本字符串 从DHCP DynamicHostConfigurationProtocol 服务获得一个动态IP地址 或是直接分配一个静态IP地址 初始化TFTP传输协议或是PB下载协议 LOGO 30 OEMLaunch 函数该函数的主要任务 OEMLaunch可以用在Eboot lib中定义的EbootWaitForHostConnect函数 等待PB发送关于启动什么服务和从哪个端口启动服务 检查EbootWaitForHostConnect的返回值 然后将端口信息和IP保存到DriverGlobals参数里 后面OAL将会用到这些 跳转到dwLaunchAddr参数指定的第一条指定点地址 该指令就是BootLoader镜像的Startup函数 LOGO 31 5 5调试函数的设计与实现BootLoader和OAL共享 包含以下几个函数 OEMInitDebugSerial OEMReadDebugByte OEMWriteDebugByte OEMWriteDebugString 实现这些函数的文件路径 MyPlatfor Src Kernel Oal debug c LOGO 32 OEMInitDebugSerial 函数初始化调试端口 一般是异步串口 UART OEMReadDebugByte 函数从调试端口读取一个字节 OEMWriteDebugByte 函数向调试端口输出一个字节 LOGO 33 OEMWriteDebugString 函数向调试端口输出一个字符串2440BSP包中的实例代码如下 VOIDOEMWriteDebugString LPWSTRstring 向串口输出字符串信息 while string L 0 OEMWriteDebugByte UINT8 string 这段代码有以下几个地方值得注意 LOGO 34 OEMWriteDebugString函数接收的实参都是UNICODE字符串 不是普通的C字符串 当调用该函数时 需要使用一个名为TEXT的宏将C字符串转换为UNICODE字符串 TEXT的宏原型如下 defineTEXT quote L quote函数应用示例 OEMWriteDebugString TEXT Thisisadebugmessage LOGO 35 5 6以太网网控制器相关的函数主要有以下几个函数 OEMEthGetFrame OEMEthSendFrame EbootInitEtherTransport EbootGetDHCPAddr EbootEtherReadData EbootWaitForHostConnect LOGO 36 OEMEthSendFrame 函数 写数据到网卡调用库函数pfnEDbgSendFrame OEMEthGetFrame 函数 从网卡读取数据调用库函数pfnEDbgGetFramepfnEDbgGetFrame和pfnEDbgSendFrame都是在OEMPlatformInit函数中调用的InitEthDevice函数中被初始化为指向某种特定网口控制芯片的读写函数的函数指针 LOGO 37 EbootInitEtherTransport 函数初始化以太网镜像下载 EbootGetDHCPAddr 函数通过DHCP获取IP地址 EbootEtherReadData 函数从传输端口读取指定数目的数据到调用者指定的缓冲区中 该函数最终调用的还是函数OEMEthGetFrame EbootWaitForHostConnect 函数与工作站上的PB通信 获取EDBG OS CONFIG DATA结构体内容 EDBG OS CONFIG DATA的具体内容如下 LOGO 38 typedefstruct EDBG OS CONFIG DATA UCHARFlags Flagsthatwillbeusedtodeterminewhat featuresare enabledoverethernet savedindriverglobals bybootloader defineEDBG FL DBGMSG0 x01 Debugmessages defineEDBG FL PPSH0 x02 Textshell defineEDBG FL KDBG0 x04 Kerneldebugger defineEDBG FL CLEANBOOT0 x08 ForceacleanbootUCHARKitlTransport TellsKITLwhichtransporttostart Thefollowingspecifyaddressinginfo onlyvalidifthecorresponding flagissetintheFlagsfield DWORDDbgMsgIPAddr USHORTDbgMsgPort DWORDPpshIPAddr USHORTPpshPort DWORDKdbgIPAddr USHORTKdbgPort EDBG OS CONFIG DATA PEDBG OS CONFIG DATA LOGO 39 5 7写FLASH代码的设计与实现BootLoader中操作FLASH存储器的函数 包含以下几个函数 OEMContinueEraseFlash OEMFinishEraseFlash OEMIsFlashAddr OEMStartErase
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 测绘保密考试题库及答案
- 北京市门头沟区2023-2024学年八年级上学期期中考试道德与法制考题及答案
- 北京市朝阳区2023-2024学年七年级上学期期末质量监测数学试卷及答案
- 心理反转测试题目及答案
- 校务办面试题目及答案
- 观后感复兴之路观后感二450字(10篇)
- 业务代理授权合同
- 诗歌与散文鉴赏能力培养方案
- 人教版七年级下册二单元作文母亲河抒怀11篇
- 时尚的鸭子哦课件
- 2025中国电信安全公司春季校园招聘笔试参考题库附带答案详解(10套)
- 通信技术未来发展趋势
- 整形美容外科进修汇报
- 立达RSBD并条机培训资料讲课文档
- 2025年幼儿园膳食工作计划
- 2025车位包销合同
- 心绞痛健康宣教课件
- 奥尔夫音乐教师培训课件
- 胃肠减压技术及并发症
- 2025年山东省中考道德与法治试卷真题及答案详解(精校打印版)
- 幼儿园防蚊虫健康活动
评论
0/150
提交评论