(一)Boot Loader的概念
Boot Loader是用来管理目标设备启动过程的目标特定的程序,其功能有如下:
1.初始化目标设备硬件(建立系统的内存空间映射图,将系统的软硬件带到一个已知的状态);
2.允许将WinCE操作系统运行时映像从开发工作站下载到WinCE目标设备的RAM或者再将它写入到Flash;
3.跳转到操作系统的起始点去启动操作系统。
(二)Boot Loader两种不同的操作模式
1.启动加载模式
属于正常工作模式,Boot Loader从存储介质将操作系统加载到RAM中,并从RAM中启动运行操作系统。
2.下载模式
Boot Loader从工作站下载操作系统运行时映像文件到目标设备的RAM,然后再将它写到目标设备的Flash等存储介质中。
(三)Boot Loader的控制流程
1.Boot Loader组成
Boot Loader由OEM启动代码(OEM startup code)和主代码(main code)两部分组成。OEM启动代码是最先执行的部分,它的功能是初始化内存寄存器、设置CPU频率、初始化高速缓存等。之后它跳转到主代码中执行。
一般OEM启动代码都是用汇编编写。主代码一般用C语言编写,它负责其它所有任务,在执行的同时还能够将执行的相关信息显示在屏幕上。一般添加公司LOGO或者其它启动LOGO都在此修改。
主代码主要由几个部分组成:镜像下载代码,通过并口或者网卡来实现从远程计算机下载nk.bin;串口调试代码,包含对串口的读写函数,用户调用这些函数就可以通过串口在远程计算机和本地计算机之间通信;写flash代码,包含写镜像到flash的函数;硬件监控代码。
2.一般的执行流程
一般Boot Loader的执行流程如下图所示:
3.Boot Loader函数总结描述
如下表所示都是需要开发者编写的Boot Loader函数:
函数 |
描述 |
OEMDebugInit |
初始化调试端口(通常为调试串口) |
OEMPlatformInit |
完成平台特定初始化,包括实时时钟、Flash存储器、网络适配器等 |
OEMPreDownLoad |
为平台创建一个平台名,获得动态IP地址或分配一个静态IP地址,初始化TFTP传输 |
DownloadImage |
下载操作系统映像到目标设备的RAM或Flash存储器 |
OEMLauch |
加载操作系统运行时映像 |
OEMReadData |
用于在下载过程中从传输端口读取数据,如果是以太网下载,它会接着调用EbootEtherReadData函数,后者再调用OEMEthGetFrame函数 |
OEMShowProgress |
利用LED或其他方式,为用户可视地显示下载进度 |
OEMMapMemAddr |
用于将Flash存储器地址映射为一个在RAM中的位置,用于在RAM中临时存储要写入到Flash存储器中的操作系统运行时映像 |
OEMIsFlashAddr |
用于决定将正在下载的.bin文件存储到Flash存储器还是RAM |
OEMWriteFlash |
将临时缓存在RAM里的操作系统映像写入到Flash存储器的最终位置,并验证写操作确实成功完成 |
OEMStartEraseFlash |
用于初始化Flash存储器的擦除过程,使Boot Loader知道存储操作系统映像需要多大的Flash存储器空间 |
OEMFinishEraseFlash |
在操作系统运行时映像下载完毕后,结束Flash存储器的擦除过程,保证Flash存储器被完全擦除,并准备开始将映像文件写到Flash存储器 |
OEMContinueEraseFlash |
在.bin文件的每个记录下载过程中,周期性地被调用,以便继续Flash存储器的擦除操作,直到Flash存储器被完全擦除 |
(四)Boot Loader的开发
详见《Windows CE实用开发技术》电子工业出版社 Page173