当前位置:首页 > 读后感 > 【基于Intel PXA270的Windows CE5.0下Boot Loader实现】 Windows CE 5.0
 

【基于Intel PXA270的Windows CE5.0下Boot Loader实现】 Windows CE 5.0

发布时间:2018-12-30 05:10:00 影响了:

  基于:Intel PXA 270嵌A式处理器的硬件平台,通过对Boot Loader的实现,分析了Boot Loader的架构、启动控制流程以及配置安装。   Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统,被广泛应用于平板电脑、数码相机、彩屏手机、PDA等许多产品当中。
  Windows CE的开发过程可以分为:OAL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,OAL开发是Windows CE开发过程中最基本的一步,而Boot Loader设计在OAL开发中又具有极为关键的作用。因此,本文以Windows CE 5.0在XscalePXA270处理器上的Ethernet Boot Loader的设计和实现为例,对BootLoader的实现进行阐述,并分析Boot Loader的架构、启动控制流程和配置安装。
  对于Windows CE嵌入式操作系统来说,系统加电后第一条指令就是Boot Loader的代码。Boot Loader通常位于目标设备上的非易失存储设备中(如Flash),并且在系统加电或重置时自动执行。通常可以通过JTAG或串口工具把Boot Loader烧写到目标设备上,Boot Loader的唯一目标就是加载并执行操作系统映像。
  在嵌入式应用系统最终产品化后,Boot Loader将不是必须的。因为Windows CE不仅提供了利用Boot Loader加载系统的启动方式,而且提供了通过启动向量Reset Vector加载系统的启动方式。但在系统开发阶段,Boot Loader是必须的,它将使开发更加方便高效。
  
  硬件平台架构
  
  处理器采用英特尔的XScalePXA270系列处理器,可以配合2700G多媒体加速器,提升高分辨率图像处理和3D加速处理能力。硬件开发板的外设包括外部存储器、串口和DM9000AE100Mb以太网接口芯片。
  
  Boot Loader的体系结构
  
  一个典型的以太网Boot Loader由Blcommon、OEM代码(针对不同硬件平台需要修改代码)Eboot和网络驱动程序等部分组成组成,如图1所示。
  
  Bleommon库
  BLCOMMON库提供了丰富Boot Loader基本功能,包括复制Boot Loader到RAM以便高速运行,解析.bin文件,控制系统加载过程等等。代码库一般放置在%_WINCEROOT%\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON。其主要文件为blcommon.c。
  
  OEM代码
  OEM代码是与设备初始化及硬件扩展有关的代码,位置在%_WINCEROOT%\PLATFORM\\SRC\BOOTLOADER\EBOOT。
  
  EBoot库
  Eboot库提供了DHCP、TFTP和UDP服务。BooLoader与Platform Builder建立TFTP连接,并下载系统镜像。其中TFTP用于从开发工作站的Platform Builder下载Windows CE操作系统镜像(这是本文所使用的加载调试方式)。Eboot库代码位于%_WINCEROOT% \PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\EBOOT。
  
  网络驱动库
  EDBG驱动程序库集成了一些常见以太网驱动,为Bootloader和操作系统访问提供了通用接口。Boot Loader利用这些接口下载Windows CE运行时映象,操作系统利用这些接口实现与Platform Builder的KITL连接。
  
  Boot Loader启动控制流程
  
  由于硬件的差异,Boot Loader的功能可能不同,图2所示的是Boot Loader的较为通用的启动控制流程。
  
  启动雨数StartUp
  StartUp函数是Boot Loader的入口函数,在CPU启动后它将立即运行。该函数使用汇编语言编写,完成初始化CPU、内存(包括建立存储器访问和初始化缓存)等核心硬件,其主要完成的功能包括:使CPU进入正确的运行模式,以便CPU能够访问所有的硬件资源;禁用所有的CPU中断;关闭MMU和TLB;禁用Cache和write Buffer;初始化内存控制器;初始化其他硬件设备,如时钟等;将Boot Loader本身复制到内存中;跳转到C代码中。
  实现这些功能的代码一般放置在StartUp.s文件中。由于此处是用汇编语言编写的,有较强的硬件相关性,所以一股参考板的CPU与开发平台的CPU考虑采用相同的架构,这样做可以不需要对寄存器的定义和初始化流程的等进行修改。
  
  主控部分Main函数
  StartUp函数初始化CPU等核心硬件并跳转到Main函数后,系统转入了C语言代码执行环境。Main函数的主要任务时调用BLCommon中的Bootloader Main( )函数。而Bootloader Main( )函数是Boot Loader的主控函数,它控制了Boot Loader的完整执行流程。它的主要工作如下。
  (1)重定位全局变量函数KernelRelocate( ),它将Boot Loader中的全局变量重定位到RAM中。这样做的原因在于Boot Loader是在目标设备的只读媒体上运行的(本实际方案是在NOR Flash上),这样的情况下将使得Boot Loader的代码对全局变量进行读写操作就会失败。所以需要把全局变量所在的数据段移到RAM中,来确保全局变量可写。
  (2)初始化调试端口函数OEMDebugInit,主要任务是初始化调试输出用的硬件端口,方便输出调试信息。本方案初始化FFUART(全功能串口)用来输出调试信息,在终端开发机上进行接收。
  (3)初始化平台函数OEMPlatformInit( ),其作用是初始化目标板上的的设备如实时时钟,显示屏、Flash、网卡等。
  (4)预下载函数OEMPre Downloade( ),主要任务是完成以太网下载前的一些准备工作,如通过DHCP获得IP地址或者初始化TFTP服务等。
  (5)下载映像函数DownloadeImage( ),该函数完成从远程开发机上下载操作系统映像。
  (6)启动映象函数OEMLaunch。
  在实际开发中,本方案利用同属Intel Xscale 270 CPU的MainstoneII 开发板进行克隆,这样使得大量的代码可以共享,只需修改少许的OEM代码和实现一些可选的OEM函数即可完成开发,减少未知错误。
  Boot Loader通过对以上函数的调用,完成了对操作系统的映像的加载控制,函数的流程及其代码位置如图3所示。
  
  Boot Loader的配置
  Boot Loader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,.bib文件主要完成以下工作。
  (1)配置目标设备上的内存分配信息,如目标设备上的物理内存起始地址、长度以及用途等;
  (2)包含ROM信息,如起始位置、宽度等,这样就可以正确的生成可以在ROM上运行的映像文件;
  (3)需要打包文件列表。
  对于Boot Loader文件的下载,可以通过仿真器下载,也可以通过其他调试程序下载,本方案采用的是直接烧写到Flash中,因此要得到纯二进制格式的映像以便烧写进Flash。Boot Loader是系统启动后第一个运行的程序,因此它必须放在CPU上电和复位后立即运行的地址处。Xscale在上电和复位后是从物理地址0x00000000(片选O BootFlash的起始地址)开始运行的。
  
  结束语
  
  作为Windows CE操作系统的启动部分,Boot Loader负责把WindowsCE操作系统加载到内存中,然后开始执行。虽然最终的产品中可能不含Boot Loader,但是在开发和调试的时候Boot Loader是不可或缺的。只有得到一个稳定工作的Boot Loader程序,才能够更进一步开发Windows CE的BSP,直至最后整个系统的成功。
  
  参考文献
  [1]Microsoft Windows CE 5.0 Board Support Package,Boot Loader,and Kernel Startup Sequence.Mark Plagge.May 2004.https:// msdn.省略/library/default.asp.
  [2]Intel PXA 27X Processor Family Developer"S Manual[M].Intel,2004-04.
  [3]何宗键.Windows CE嵌入式系统.Windows CE嵌入式系统[M].北京航空航天大学出 版社,2006.
  [4]邹健强,陈耀武,汪乐宇.基于Xscale处 理器的Windows CE 5.0 Boot Loader设 计[J].计算机应用.现代机械,2006年第 4期.

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3