在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中完成,源代码可以在” wince600publiccommonoakdriversethdbgblcommon”里找到。具体流程如图:
下面介绍一下具体步骤:
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模块来调用。这些函数会在以后介绍。
如果喜欢wince eboot中的blcommon - wince请收藏或告诉您的好朋友.
阅读(192) | 评论(0) | 转发(0) |