为一个新的硬件设备定制WinCE6、0操作系统的主要步骤如下:
1、针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM
Adaptation Layer缩写为OAL)和一些必要的驱动。
2、利用创建的BSP,定制一个系统设计(OS Design)。即通过VS2005创建一个Platform
Builder的工程。该工程可编译产生最终的运行时映像文件(Rum-time Image)。
3、针对板上的外围设备创建相关驱动,并添加到BSP中。
4、通过创建子工程和Catalog Items的方式,修改OS Design。
5、编译OS Design,下载编译得到的运行时映像文件到目标设备。此时,可通过远程调试工具进行调试。
6、在完成所有的调试工作之后,导出该运行时映像对应的SDK(Software Development Kit),应用程序的开发人员可基于此SDK编写该设备的应用程序。
可以看出,在整个WinCE操作系统的移植过程中,BSP的移植是最基础也是最关键的一步。而创建BSP的过程主要包括以下几个内容:
1、创建BOOTLOADER。BOOTLOADER在开发的过程中用于下载操作系统映像文件。
2、创建OAL。OAL最终被链接到内核映像文件,它主要完成硬件的初始化和管理。
3、创建设备驱动。设备驱动是板上外围设备的软件支持。
4、修改运行时映像的配置文件。配置文件主要包括BIB、REG等文件。
BOOTLOADER的主要作用是将操作系统运行时映像加载到内存,并跳转到OS的启动程序处。它的这一作用跟前一篇介绍的NBOOT的作用完全一致。BOOTLOADER获取运行时映像(一般对应的文件名为NK)一般有两种方法。它可以通过有线连接的方式象网络(Ethernet)、USB或串口从外部下载NK。它也可以从本地的存储器(Flash、Hard
Disk)中加载NK。通常,BOOTLOADER通过Ethernet下载操作系统映像故将其称为EBOOT。在开发的过程中使用EBOOT,可以提高开发效率。通过使用EBOOT,你可以很快速的下载NK到目标设备中。而利用Flash编程工具或者是通过JTAG下载则很慢。在一些产品最终发布时,EBOOT是可以去掉的,但也有一些则必须包括BOOTLOADER,像X86的平台就是如此。
基于不同的硬件设计,Bootloader会有不同的引导方式:
NORFlash Boot:
一般ARM处理器的片选0都会接有NORFlash,这样在ARM上电以后,会从0地址开始执行程序,也就是从NORFlash的0地址开始执行。所以把EBOOT烧到NORFlash的0地址开始的地方,这样在上电以后,EBOOT开始执行,可以在NORFlash里面执行,也可以自拷贝到SDRAM中执行。最后加载WinCE
image并运行。
NANDFlash Boot with EBOOT:
由于NORFlash容量小,价格贵,现在很多ARM处理器支持NandFlash引导。不同厂家的处理器对Nandflash的引导略有区别,具体要看datasheet。但是本质就是先从Nandflash中读出一个小的Loader来运行,这个Loader再从Nandflash中加载EBOOT到SDRAM中运行,最后EBOOT加载WinCE
image,就是NK.bin。
NANDFlash Boot without EBOOT:
如果在NandFlash引导的时候不需要EBOOT,也可以不用EBOOT。这样就是系统启动后从Nandflash中加载一个小的Loader,小的Loader对硬件系统作基本的初始化,然后直接加载WinCE
image,一般应该是NK.nb0,然后运行。
至此,我们已经了解了EBOOT的主要功能,为了实现这些功能,EBOOT必须完成以下工作:
1、初始化MCU。包括初始化MCU的相关寄存器、中断、看门狗、系统时钟、内存和MMU。前面几项跟NBOOT基本一致,但这里增加了对MMU的初始化。
2、在完成所有的初始化工作之后,调用BootloaderMain()。这个函数的定义在WinCE6、0中对应的文件是C:"WINCE600"PLATFORM"COMMON"SRC"COMMON"BOOT"BLCOMMON"blcommon、c
3、 BootloaderMain()主要依次调用以下几个函数,OEMDebugInit()、OEMPlatformInit()、OEMPreDownload()、OEMLaunch(),而这些函数必须由EBOOT的代码来实现。
4、最终跳转到OAL、exe的StartUp处,进而启动WinCE操作系统。
整个流程如下图所示:
EBOOT的代码可参考C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT目录。这里针对S3C2410的EBOOT做几点说明。前一篇介绍NBOOT加载EBOOT的方法时提到,NBOOT必须将EBOOT放在内存中指定的位置,这个位置是由EBOOT的来决定的。具体的,在EBOOT中的体现是boot、bib里的内存配置,如下图所示。
NBOOT加载EBOOT到内存的地址必须与此地址对应。由于在NBOOT中没有使用MMU,所以NBOOT使用的实际地址应该为0x30021000,否则系统将不能正常启动。第二点,如果没有采用NBOOT加载EBOOT的方法,而是将EBOOT直接存储在NOR Flash中,此时必须在EBOOT的代码中实现自加载的过程,即将NOR Flash中的EBOOT全部加载到RAM中,并执行,实现代码如下:
;------------------------------------------------------------------------------
; Copy boot loader to memory
ands r9, pc, #0xFF000000 ; see if we are in flash or in ram
bne %f20 ; go ahead if we are already in ram
; This is the loop that perform copying、
ldr r0, = 0x21000 ; offset into the RAM
add r0, r0, #PHYBASE ; add physical base
mov r1, r0 ; (r1) copy destination
ldr r2, =0x0 ; (r2) flash started at physical address 0
ldr r3, =0x10000 ; counter (0x40000/4)
10 ldr r4, [r2], #4
str r4, [r1], #4
subs r3, r3, #1
bne %b10
; Restart from the RAM position after copying、
mov pc, r0
nop
nop
nop
; Shouldn't get here、
b、
EBOOT在实现必备功能的前提下,我们还可以扩展其功能,譬如说初始化LCD,并显示特定的启动画面,显示加载映像的进度等。
本文粗略的介绍了WinCE6、0下EBOOT的内容,但没有涉及具体的代码实现,相关代码可以参考目录C:"WINCE600"PLATFORM"DEVICEEMULATOR"SRC"BOOTLOADER"EBOOT。总的来说,EBOOT的核心功能就是引导操作系统映像。
分享到:
相关推荐
为一个新的硬件设备定制WinCE6.0操作系统,一般需要完成以下几个主要步骤: 1. 针对特定的硬件设备创建板级支持包(Board Support Package缩写为BSP),BSP必须包括BOOTLOADER、OEM适配层(OEM Adaptation Layer缩写为...
引用《OK6410开发板WINCE6.0用户手册2.00(图文版)》中的步骤,OK6410开发板WINCE6.0操作系统开发环境配置,重点是拷贝完整自己的编译文件STEPLDR.nb0、STEPLDR.bin、EBOOT.nb0、EBOOT.bin、NK.bin,使用正确的方法...
Windows CE6.0的EBOOT概要
最新的wince6.0BSP包 支持nandflash64M到1G 带有STEPLDR和EBOOT. EBOOT支持USB下载
在wince终端开发时,教你如何在eboot中实现开机logo。当开机logo较小是可以将图片以数组的形式打包到eboot.bin中,而当开机logo较大时,用刚才的方法则会导致eboot.bin太大而无法生成。于是有了第二中方法,具体实现...
自己移植的友善2440板子,wince6.0的BSP,还剩个别驱动未完善,NBOOT+EBOOT启动模式,NEC3.5屏,可进系统,有TOUCH。欢迎试用并完善,谢谢。
基于Wince6.0的Eboot 有SD卡更新,USB下载等功能。
WINCE 的eboot代码分析,看完了对wince的启动过程会有个较清晰地认识。
用于WinCE的eboot的源代码,希望对准备开发wince系统的朋友有用
基于2410 wince 平台 eboot 源码
ARM9 S3C2410 wince5.0 eboot source code
解决WINCE6.0 远程工具不能使用ActiveSync连接 S3C6410 CE6.0移植 mfc多媒体测试程序 三星官方S3C6410 bsp资料 移植后源码 移植文档 其他 wince DriectX BusTransBusAddrToVirtual使用 CE4.2与CE5.0使用...
6410 EBOOT,在WINCE 6.0 中的SLC NAND FLASH EBOOT 代码
自己移植的sc2410 wince5.0\6.0+binfs BSP,EBOOT用5。0下的EBOOT,已测试通过 写在NAND 上的第2块上,NBOOT写在NAND 的第0块上,由NBOOT启动EBOOT,EBOOT启动XIP。注:本资源小弟不提拱技术支持,希体谅!
x86 WinCE6.00引导程序,Loadcepc和NK.BIN。是WinCE系统定制初学者一个很好的例子。不足之处多多指教,交流。
该资源在友坚的三星S3C2416,WinCE 6.0平台下实现了在Eboot通过USB Rndis网络设备下载NK.bin文件。如需具体操作过程请联系EMail:sc8312@qq.com
EBOOT.bin WinCE烧录ROM镜像的启动文件
简要介绍ARM及其boot过程,然后结合代码详细介绍了WinCE的Eboot 及 OAL
EBoot是WinCE一种默认的Bootloader,用来引导WinCE,升级WinCE,及各种调试工具。在EBoot中打开一些全局变量从而控制WinCE中的功能,比如USB的模式等(就是与WinCE约定了一个内存区域存放这种标志),还有在 EBOOT中...
EBoot是WinCE一种默认的Bootloader,用来引导WinCE,升级WinCE,及各种调试工具。在EBoot中打开一些全局变量从而控制WinCE中的功能,比如USB的模式等(就是与WinCE约定了一个内存区域存放这种标志),还有在 EBOOT中...