【转载】WinCE Eboot中的BLCOMMON

转载自:http://blog.csdn.net/nanjianhui/archive/2008/10/20/3111422.aspx


在EBOOT中,从Startup.s跳转到C程序入口以后,程序就可以用C语言来编写了,这样感觉就好多了。一般C语言的入口就是一个Main函数,也可能叫其他的名字。在这个Main函数中会掉用BootloaderMain函数,该函数在BLCOMMON模块中被定义的。一般Main函数的写法如下:

void (void)

{

    // Common boot loader (blcommon) main routine.

    BootloaderMain();

    // Should never get here.

    SpinForever();

}

从程序中可以看出,EBoot在进入C程序以后,只调用了BootloaderMain函数,至于SpinForever函数实际上就是一个while的死循环。所以可以看出,Eboot的所有工作都在BootloaderMain中完成,源代码可以在” \WINCE600\PUBLIC\COMMON\OAK\DRIVERS\ETHDBG\BLCOMMON”里找到。具体流程如图:

下面介绍一下具体步骤:

1. BootloaderMain函数首先调用KernelRelocate函数将Bootloader中用到的全局变量拷贝到RAM中。

2. 然后调用OEMDebugInit函数来初始化Debug调试功能,一般都是初始化串口,这样从这里以后就可以使用串口打印调试信息了。

3. 之后调用OEMPlatformInit函数,来对板子进行初始化,很多和平台相关的初始化工作都可以在这个函数中完成。

4. 调用OEMPreDownload函数,从流程上来说应该是为下载内核做一些准备工作,该函数执行后,根据返回值得不同可以选择下载内核,或者跳转执行。实际上,该函数中首先会读取Boot配置信息,然后初始化下载设备,一般是网卡设备。

5. 如果OEMPreDownload函数返回BL_DOWNLOAD时,将会从主机下载WinCE image。

6. 如果OEMPreDownload函数返回BL_JUMP时,直接跳转到WinCE image所在的位置开始执行。

其中涉及的OEM函数都是需要用户自己实现的,然后被BLCOMMON模块来调用。这些函数会在以后介绍。

posted @ 2010-12-22 10:20  风雨雪夜  阅读(169)  评论(0编辑  收藏  举报