WinCE6.0的EBOOT概要

     为一个新的硬件设备定制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中,并执行,实现代码如下:

Code
;------------------------------------------------------------------------------
;   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的核心功能就是引导操作系统映像。

时间: 2024-10-26 01:44:18

WinCE6.0的EBOOT概要的相关文章

WinCE6.0 KITL概要

KITL(Kernel Independent Transport Layer)即内核独立传输层,它为我们提供了一种调试WinCE的简便方法.KITL将通信服务协议和用于通信的硬件分离开来.所以我们在创建硬件传输层时就省去很多麻烦,否则我们自己必须实现与设备进行数据交互的协议.KITL工作在硬件传输层之上,因此,它无须关心用于通信的具体硬件,我们可以用USB.Serial或者Ethernet作为KITL的调试通道.具体选择哪一个,由硬件平台和软件资源决定.有些设备没有Ethernet和Seria

S3C2410下WinCE6.0的启动过程详解

通过前两篇文章的介绍,我们已经知道NBOOT用来引导EBOOT,继而EBOOT加载并引导WinCE操作系统(NK).那么,WinCE6.0的启动过程又是怎样的呢?本文基于S3C2410的平台做一个详细的分析.需要说明的是,WinCE6.0的整个启动过程对于同一类型的MCU来说大同小异,如S3C2410和PXA270同属ARM平台的MCU,所以他们的启动过程是类似的,可以说唯一的不同就在OAL处,而WinCE操作系统的启动正是从OAL开始的.      OAL(OEM Adaptation Lay

ASP 3.0新特性概要

 ASP 3.0新特性概要 在ASP3.0中,有一些新的特性或经历较大的变化或改进的特性.1. 无脚本的ASPASP处理不包括任何脚本的.asp页的速度是很快的,假如你正在创建的站点或Web应用程序文件最终可能使用ASP,最好让这些文件使用.asp文件扩展名,而不用考虑它们是包含服务器端脚本还是仅仅包含静态(HTML和文本)内容. 2. 新的流向控制能力到目前为止,假如想把执行转向另外的一个ASP页,不得不使用Response.Redirect语句,这个工作通过向客户端发送一个响应来指示其载入新

图标-WinCE6.0电池电量显示的不正确,求有经验的牛人指教

问题描述 WinCE6.0电池电量显示的不正确,求有经验的牛人指教 我用的WinCE6.0系统,现在电池显示这一块有一些问题,我在"控制面板"里看电池信息,在"电池"这个标签下显示剩余电量100%,在"方案"标签下显示"电池电源".可是为什么我的WinCE桌面右下角的电源信息图标是个"小插头",而不是一个小电池图标呢. 我的电池电量检测芯片是DS2782,电池驱动的PDD层我看了也没多大问题,就是这里有点不

Windows XP下安装WinCE6.0开发环境

Windows下如何编译WinCE6.0及开发应用程序,下面介绍(安装之前必须保证C盘有足够的空间!20g左右!主要是因为在安装程序在安装过程中要解压): 在Visual Studio 2005之前,开发WinCE嵌入式程序需要安装Platform Builder,不过Platform Builder已经作为一个插件集成在Visual Studio 2005里了. 1.下载并安装Visual Studio 2005(Visual Studio 2008只支持开发应用程序,不能用来定制WinCE内

wince6.0模拟器的问题

问题描述 wince6.0模拟器的问题 奇怪模拟器ip地址怎么会是55段的呢,我的电脑是1段的,我试过把模拟器改成1段,但是同步连去就会断开了,如果使用55段的时候,又访问不了我电脑上的数据库,有什么配置让模拟器连接的时候使用的就1段的呢或者说跟电脑ip段相同, 下面是模拟器ip地址 下面是我电脑的ip地址(window2003sp2) 解决方案 这个可以自己设置的,检查下配置文件. 解决方案二: WinCE 的模拟器,功能是有限的. 模拟器运行在 PC 上,可以使用 PC 的网络,但这只是一个

c# wince6.0 可以部署到真机上,但是不能调试,设置的断点处不停。

问题描述 c# wince6.0 可以部署到真机上,但是不能调试,设置的断点处不停. wince5.0 可以部署到真机上,正常运行调试,但是换wince6.0 就不能调试了,其它都很正常,不知道什么原因? 不知道是软件安装问题还是同步软件的问题?

wince6 0-想要在wince6.0下添加一个软关机的功能,就像xp一样

问题描述 想要在wince6.0下添加一个软关机的功能,就像xp一样 请教诸位大神,小弟用vs2005编译一个intel_X86芯片上的wince6.0系统,本身系统只有一个suspend功能,我就想添加一个关机的功能,今天看了一点电源管理方面的知识,想用直接调用setsystempowerstate()函数,但是没啥效果,求各位大神给个思路或步骤啥地,明天争取做出来,跪谢啊...... 解决方案 wince中实现关机功能 http://blog.csdn.net/ymzhou117/artic

wince6.0怎么设置为竖屏内核

问题描述 wince6.0怎么设置为竖屏内核 请问如何修改驱动参数使之变成竖屏.通过修改注册表只能把显示调整成竖屏,即LCD旋转90度,但是触摸点的位置还是原来的.所以真能通过调整驱动来实现,