Windows CE操作系统BSP开发笔记
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
【原创】Windows CE操作系统BSP开发
——————BootLoader开发OAL开发
2011-11-29
0 概述
BSP:介于主板硬件和操作系统之间的一层软件系统
把操作系统与硬件交互的接口抽象抽取出来,再作为单独的一层函数,操作系统需要访问底层硬件的时候(例如初始化硬件、关中断等),不再直接访问硬件,而是调用抽象出来的这一层函数完成操作。
有了BSP层的抽象之后,操作系统内核的代码就可以做到只与CPU体系结构相关,而与具体的硬件无关了。对于不同的CPU体系结构,操作系统仍然需要提供编译好的二进制代码或在该CPU下可编译的源代码。因此,在内核中如果要使用汇编语句,对不同的CPU都要编写一份,所以操作系统代码大多数都是用C/C++实现的。
BSP与特定的嵌入式操作系统相关。BSP对应的是某块具体的开发板/产品板,而不是某款CPU,也不是某类CPU 体系架构。因此,BSP 与开发板一一对应。
概念:芯片支持包,CSP
OAL 层:负责Windows CE 内核与硬件通讯。当引导程序引导操作系统结束后,由OAL层负责硬件平台初始化、中断服务例程、实时钟、计时器、内核调试、开关中断和内核性能监测等工作。OAL的代码在物理上是内核的一部分,最终经过编译链接,OAL会成为内核的一部分。
引导程序(Boot Loader):在硬件开发板上执行的一段代码,它的主要功能是初始化硬件、加载操作系统映像到内存,然后跳转到操作系统代码去执行。
配置文件:一些包含配置信息的文本文件。这些配置信息通常与操作系统映像或源代码有关。例如告诉编译系统如何编译某些源代码,或告诉编译系统如何配置最终的操作系统映像文件。.BIB、.DB、.REG 和.DAT四类平台初始化文件:用来告诉MakeImage工具如何生成操作系统
映像;Sources和DIRS文件:告诉构建系统如何构建代码;CEC文件:这样BSP可以与Platform Builder集成。
设备驱动程序:
Q:当最终的产品中不包含boot loader时,操作系统是如何启动的?
A:开机就执行OAL代码,然后启动操作系统。
发布BSP的目的是把BSP打包成安装文件,以方便第三方软件开发商使用。一般而言,可以把BSP打包成.MSI安装文件。
1 BootLoader开发
Boot Loader通常位于目标设备上的非易失存储设备中(例如Flash、ROM),并且在系统加电或重置的时候自动执行。
可以通过JTAG或串口烧写工具把Boot Loader烧写到目标设备上。绝大多数Boot Loader都会从开发机下载映像到目标机然后执行。与使用JTAG烧写映像到目标机相比,这样做在开发过程中可以方便的更新目标机上的映像,缩短“修改/构建/下载/调试”的开发周期,以节省开发时间。而之所以选用以太网,主要考虑是它的速度比较快。
图Boot Loader的执行顺序
总体而言,Windows CE的Boot Loader有三大功能:
◆初始化目标硬件设备:包括初始化内存、中断控制器、时钟和MMU等
◆控制启动过程:提供一个简单的菜单与用户交互
◆下载并执行操作系统
Boot Loader组成
BLCommon库:实现通用的Boot Loader框架,其功能包括:把Boot Loader搬到RAM里以获得更快的访问速度、解析以及解包.BIN文件的格式、检验校验和以及跟踪加载进度。BLCommon库还会调用OEM代码来处理硬件初始化等操作。在Boot Loader的代码中,开发者可以直接链接blcommon.lib 来使用BLCommon库中的功能。
OEM代码:以OEM开头的一些函数,需要开发人员实现。
EBoot库:实现DHCP、TFTP和UDP网络服务。在Boot Loader的代码中,开发者可以直接链接eboot.lib来使用EBoot库中的功能。Windows CE使用TFTP协议进行下载,EBoot库的目的是简化和封装复杂的网络操作。
Boot Loader中有两类设备经常被用到:以太网卡——下载操作系统映像;Flash——用来存储Boot Loader和下载的操作系统映像。因此Boot Loader针对这两类硬件设备也抽象出了统一的接口,也可以被称作驱动程序,分别是EthDbg 驱动和FMD 驱动。
注:TFTP是一个简单的文件传输协议,EBoot使用它来下载操作系统映像;TFTP是基于UDP协议的。DHCP 是从服务器动态获得IP地址的协议;如果网段内有DHCP 服务器,EBoot可以用DHCP 动态获得IP地址。Boot Loader的工作流程和原理
Boot Loader的实现
必须和可选实现的OEM函数
必须实现的与串口调试相关的函数
配置和编译Boot Loader
1,编译源代码
Boot Loader的源代码由C语言代码和汇编语言代码组成。编译这些代码都可以在Windows CE的构建系统下完成。因此对于要构建的代码,首先需要编写SOURCES和DIRS文件。2,配置Boot Loader
配置文件须包含目标设备上的内存分配信息,其次要包含ROM的一些信息如起始位置、宽度等,最后还要包含需要打包的文件列表。Boot.lib文件用来配置Boot Loader。
3,打包
打包Boot Loader的工具与打包OS的工具是一样的,都是RomImage.exe。此工具只接受一个BIB文件为参数。SOURCES文件的最后一行定义了BootImage附加操作,构建系统在所有编译链接完成后自动调用此操作。BootImage操作定义在EBoot目录的Makefile.inc文件中:使用RomImage.exe工具打包EBoot代码,将生成的文件(可能的格式有NB0、BIN和SRE)复制到Release目录。
4,最终,根据不同目标设备的烧写方式不同,选择一个适用于自己目标设备的映像,烧写进内置的Flash中,就可以在目标设备上运行Boot Loader了。