原创 WinCE Eboot中的BLCOMMON

2010-4-11 13:17 2324 6 6 分类: MCU/ 嵌入式

在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”里找到。具体流程如图:


8908f9c8-3575-448d-ab52-dbff402d73b2.jpg


 


下面介绍一下具体步骤:


 


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模块来调用。这些函数会在以后介绍。



本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/nanjianhui/archive/2008/10/20/3111422.aspx


 


 

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
6
关闭 站长推荐上一条 /3 下一条