WinCE6.0的EBOOT概要

转自:http://www.cnblogs.com/we-hjb/archive/2008/10/07/1305926.html

为一个新的硬件设备定制 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的平台就是如此。

至此,我们已经了解了 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 的核心功能就是引导操作系统映像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值