基于Intel PXA270的Windows CE5.0下Boot Loader实现
来源:百度文库 编辑:神马文学网 时间:2024/06/03 11:22:36
基于Intel PXA270的Windows CE5.0下Boot Loader实现(图)
发送 打印
");//-->
本月点击排行
»汽车网络
»+125℃汽车铁电存储器FM25CL64-GA
»安全数据双端口多路复用器FSSD06
»监视DC/DC开关稳压器的按钮控制器(图)
»富士通发布下一代车载信息娱乐系统
»联发科技单芯片MT1389S支持WMV-9和HDMI-DVD
»Using the mono class D demoboard
»低功耗MEMS3轴加速计LIS302ALK
»MAX1677 Compact, High-Efficiency, Dual-Output Step-Up and LCD Bias...
»800mA、同步降压-升压型DC/DC转换器
其他相关文章
»高安全等级嵌入式应用的设计考虑(2)
»高安全等级嵌入式应用的设计考虑(1)
»ARM嵌入式汽车节能控制系统(2)
»ARM嵌入式汽车节能控制系统(1)
»Linux环境下局域网通信系统的设计与实现(2)
»Linux环境下局域网通信系统的设计与实现(1)
»基于SEP3203处理器的DTU点对点数据传输(2)
»基于SEP3203处理器的DTU点对点数据传输(1)
»基于嵌入式技术实时图像监控系统的研究(下)
»基于嵌入式技术实时图像监控系统的研究(上)
日期:2007-05-01
作者:刘扬 田增山 凌顺 周永胜
Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统,被广泛应用于平板电脑、数码相机、彩屏手机、PDA等许多产品当中。
Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发是Windows CE开发过程中最基本的一步,而Boot Loader设计在0AL开发中又具有极为关键的作用。因此,本文以Windows CE 5.0在Xscale PXA270处理器上的Ethernet Boot Loader的设计和实现为例,对Boot Loader的实现进行阐述,并分析Boot Loader的架构、启动控制流程和配置安装。
对于Windows CE嵌入式操作系统来说,系统加电后第一条指令就是Boot Loader的代码。Boot Loader通常位于目标设备上的非易失存储设备中(如Flash),并且在系统加电或重置时自动执行。通常可以通过JTAG或串口工具把Boot Loader烧写到目标设备上,Boot Loader的唯一目标就是加载并执行操作系统映像。
在嵌入式应用系统最终产品化后,Boot Loader将不是必须的。因为Windows CE不仅提供了利用Boot Loader加载系统的启动方式,而且提供了通过启动向量ResetVector 加载系统的启动方式。但在系统开发阶段,Boot Loader是必须的,它将使开发更加方便高效。
硬件平台架构
处理器采用英特尔的XScale PXA270系列处理器,可以配合2700G多媒体加速器,提升高分辨率图像处理和3D加速处理能力。硬件开发板的外设包括外部存储器、串口和DM9000AE 100Mb以太网接口芯片。
Boot Loader的体系结构
一个典型的以太网Boot Loader由Blcommon、OEM代码(针对不同硬件平台需要修改代码)Eboot和网络驱动程序等部分组成组成,如图1所示。
图1 Boot Loader框架结构
● Blcommon库
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的较为通用的启动控制流程。
图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中的BootloaderMain()函数。而BootloaderMain()函数是Boot Loader的主控函数,它控制了Boot Loader的完整执行流程。它的主要工作如下。
(1)重定位全局变量函数KernelRelocate(),它将Boot Loader中的全局变量重定位到RAM中。这样做的原因在于Boot Loader是在目标设备的只读媒体上运行的(本实际方案是在NOR Flash上),这样的情况下将使得Boot Loader的代码对全局变量进行读写操作就会失败。所以需要把全局变量所在的数据段移到RAM中,来确保全局变量可写。
(2)初始化调试端口函数OEMDebugInit,主要任务是初始化调试输出用的硬件端口,方便输出调试信息。本方案初始化FFUART(全功能串口)用来输出调试信息,在终端开发机上进行接收。
(3)初始化平台函数OEMPlatformInit(),其作用是初始化目标板上的的设备如实时时钟,显示屏、Flash、网卡等。
(4)预下载函数OEMPreDownloade(),主要任务是完成以太网下载前的一些准备工作,如通过DHCP获得IP地址或者初始化TFTP服务等。
(5)下载映像函数DownloadeImage(),该函数完成从远程开发机上下载操作系统映像。
(6)启动映象函数OEMLaunch。
在实际开发中,本方案利用同属Intel Xscale 270 CPU的MainstoneII开发板进行克隆,这样使得大量的代码可以共享,只需修改少许的OEM代码和实现一些可选的OEM函数即可完成开发,减少未知错误。
Boot Loader通过对以上函数的调用,完成了对操作系统的映像的加载控制,函数的流程及其代码位置如图3所示。
图3 Boot Loader函数调用流程
● Boot Loader的配置
BootLoader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,.bib文件主要完成以下工作。
(1)配置目标设备上的内存分配信息,如目标设备上的物理内存起始地址、长度以及用途等;
(2)包含ROM信息,如起始位置、宽度等,这样就可以正确的生成可以在ROM上运行的映像文件;
(3)需要打包文件列表。
对于Boot Loader文件的下载,可以通过仿真器下载,也可以通过其他调试程序下载,本方案采用的是直接烧写到Flash中,因此要得到纯二进制格式的映像以便烧 写进Flash。Boot Loader是系统启动后第一个运行的程序,因此它必须放在CPU 上电和复位后立即运行的地址处。Xscale在上电和复位后是从物理地址0x00000000(片选0 Boot Flash的起始地址)开始运行的。
结束语
作为Windows CE操作系统的启动部分,Boot Loader负责把Windows CE操作系统加载到内存中,然后开始执行。虽然最终的产品中可能不含Boot Loader,但是在开发和调试的时候Boot Loader是不可或缺的。只有得到一个稳定工作的Boot Loader程序,才能够更进一步开发Windows CE的BSP,直至最后整个系统的成功。
发送 打印
");//-->
本月点击排行
»汽车网络
»+125℃汽车铁电存储器FM25CL64-GA
»安全数据双端口多路复用器FSSD06
»监视DC/DC开关稳压器的按钮控制器(图)
»富士通发布下一代车载信息娱乐系统
»联发科技单芯片MT1389S支持WMV-9和HDMI-DVD
»Using the mono class D demoboard
»低功耗MEMS3轴加速计LIS302ALK
»MAX1677 Compact, High-Efficiency, Dual-Output Step-Up and LCD Bias...
»800mA、同步降压-升压型DC/DC转换器
其他相关文章
»高安全等级嵌入式应用的设计考虑(2)
»高安全等级嵌入式应用的设计考虑(1)
»ARM嵌入式汽车节能控制系统(2)
»ARM嵌入式汽车节能控制系统(1)
»Linux环境下局域网通信系统的设计与实现(2)
»Linux环境下局域网通信系统的设计与实现(1)
»基于SEP3203处理器的DTU点对点数据传输(2)
»基于SEP3203处理器的DTU点对点数据传输(1)
»基于嵌入式技术实时图像监控系统的研究(下)
»基于嵌入式技术实时图像监控系统的研究(上)
日期:2007-05-01
作者:刘扬 田增山 凌顺 周永胜
Windows CE.NET是微软公司向嵌入式领域推出的一款操作系统,被广泛应用于平板电脑、数码相机、彩屏手机、PDA等许多产品当中。
Windows CE的开发过程可以分为:0AL(OEM Abstraction Layer)、驱动、应用程序开发三个步骤。其中,0AL开发是Windows CE开发过程中最基本的一步,而Boot Loader设计在0AL开发中又具有极为关键的作用。因此,本文以Windows CE 5.0在Xscale PXA270处理器上的Ethernet Boot Loader的设计和实现为例,对Boot Loader的实现进行阐述,并分析Boot Loader的架构、启动控制流程和配置安装。
对于Windows CE嵌入式操作系统来说,系统加电后第一条指令就是Boot Loader的代码。Boot Loader通常位于目标设备上的非易失存储设备中(如Flash),并且在系统加电或重置时自动执行。通常可以通过JTAG或串口工具把Boot Loader烧写到目标设备上,Boot Loader的唯一目标就是加载并执行操作系统映像。
在嵌入式应用系统最终产品化后,Boot Loader将不是必须的。因为Windows CE不仅提供了利用Boot Loader加载系统的启动方式,而且提供了通过启动向量ResetVector 加载系统的启动方式。但在系统开发阶段,Boot Loader是必须的,它将使开发更加方便高效。
硬件平台架构
处理器采用英特尔的XScale PXA270系列处理器,可以配合2700G多媒体加速器,提升高分辨率图像处理和3D加速处理能力。硬件开发板的外设包括外部存储器、串口和DM9000AE 100Mb以太网接口芯片。
Boot Loader的体系结构
一个典型的以太网Boot Loader由Blcommon、OEM代码(针对不同硬件平台需要修改代码)Eboot和网络驱动程序等部分组成组成,如图1所示。
图1 Boot Loader框架结构
● Blcommon库
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的较为通用的启动控制流程。
图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中的BootloaderMain()函数。而BootloaderMain()函数是Boot Loader的主控函数,它控制了Boot Loader的完整执行流程。它的主要工作如下。
(1)重定位全局变量函数KernelRelocate(),它将Boot Loader中的全局变量重定位到RAM中。这样做的原因在于Boot Loader是在目标设备的只读媒体上运行的(本实际方案是在NOR Flash上),这样的情况下将使得Boot Loader的代码对全局变量进行读写操作就会失败。所以需要把全局变量所在的数据段移到RAM中,来确保全局变量可写。
(2)初始化调试端口函数OEMDebugInit,主要任务是初始化调试输出用的硬件端口,方便输出调试信息。本方案初始化FFUART(全功能串口)用来输出调试信息,在终端开发机上进行接收。
(3)初始化平台函数OEMPlatformInit(),其作用是初始化目标板上的的设备如实时时钟,显示屏、Flash、网卡等。
(4)预下载函数OEMPreDownloade(),主要任务是完成以太网下载前的一些准备工作,如通过DHCP获得IP地址或者初始化TFTP服务等。
(5)下载映像函数DownloadeImage(),该函数完成从远程开发机上下载操作系统映像。
(6)启动映象函数OEMLaunch。
在实际开发中,本方案利用同属Intel Xscale 270 CPU的MainstoneII开发板进行克隆,这样使得大量的代码可以共享,只需修改少许的OEM代码和实现一些可选的OEM函数即可完成开发,减少未知错误。
Boot Loader通过对以上函数的调用,完成了对操作系统的映像的加载控制,函数的流程及其代码位置如图3所示。
图3 Boot Loader函数调用流程
● Boot Loader的配置
BootLoader程序可以通过PB的集成编译环境编译链接,控制文件为.bib文件,.bib文件主要完成以下工作。
(1)配置目标设备上的内存分配信息,如目标设备上的物理内存起始地址、长度以及用途等;
(2)包含ROM信息,如起始位置、宽度等,这样就可以正确的生成可以在ROM上运行的映像文件;
(3)需要打包文件列表。
对于Boot Loader文件的下载,可以通过仿真器下载,也可以通过其他调试程序下载,本方案采用的是直接烧写到Flash中,因此要得到纯二进制格式的映像以便烧 写进Flash。Boot Loader是系统启动后第一个运行的程序,因此它必须放在CPU 上电和复位后立即运行的地址处。Xscale在上电和复位后是从物理地址0x00000000(片选0 Boot Flash的起始地址)开始运行的。
结束语
作为Windows CE操作系统的启动部分,Boot Loader负责把Windows CE操作系统加载到内存中,然后开始执行。虽然最终的产品中可能不含Boot Loader,但是在开发和调试的时候Boot Loader是不可或缺的。只有得到一个稳定工作的Boot Loader程序,才能够更进一步开发Windows CE的BSP,直至最后整个系统的成功。
基于Intel PXA270的Windows CE5.0下Boot Loader实现
嵌入式系统 Boot Loader
嵌入式系统 Boot Loader 技术
基于intel架构的网络课件开发
基于Linux环境下的Sniffer设计与实现
VxWorks下基于CS4281声卡的VOIP设计与实现
嵌入式系统 Boot Loader 技术内幕
嵌入式系统 Boot Loader 技术内幕
ARM Boot Loader简介(二)
ARM Boot Loader 简介(一)
嵌入式系统中的Boot Loader 技术
Windows 2003下FTP用户隔离的实现_
Windows与VMware下的Linux文件如何实现共享
Intel ‘Robson‘ Makes Your Notebook Boot Faster
基于ARM核的Intel XScale嵌入式系统
嵌入式系统 Boot Loader 技术内幕 and Linux Process
基于 Dojo toolkit 实现 web2.0 的 MVC 模式
独步西风windows和intel交流的平台
基于Linux的视频点播系统的实现
基于S3C2410的GPS通讯的实现
基于可编程处理器的H.264实现
基于.Net的AOP实现技术
基于堆栈的计算器实现算法
vmware6.5实现基于win2003的群集