在eboot中有很多以oem开头的函数,这些函数都会直接或间接的被blcommon模块调用,来完成相应的功能。这些oem函数就是我们需要根据自己的平台来实现的。可以说,实现了这些oem函数,eboot的功能就完成了。
在eboot中有很多oem函数,有些是必须实现的,有些是不必实现的,而有些是根据你的eboot的功能需求来决定是否要实现的。下面会介绍一下直接由blcommon调用的oem控制函数:
1. void oemdebuginit(void)
这应该是第一个被调用的oem函数,用来初始化串口来打印调试信息。这里要提一下另一个函数叫oeminitdebugserial,是oal中用于初始化串口的函数。所以一般会实现oeminitdebugserial函数,然后在oemdebuginit中调用它就可以了。实际上这只是一个初始化函数,如果想实现串口调试,还需要实现另外几个函数,如下;
oemwritedebugstring
oemwritedebugbyte
oemreaddebugbyte
上述三个函数在我以前的博客“wince bsp中打印信息的实现介绍”中有介绍,这里不再重复了。
2. bool oemplatforminit(void)
这个函数用于初始化硬件平台,就是说出实话硬件板子的相关外设。一般会先初始化rtc,然后初始化nandflash控制器,初始化硬件中断,初始化网卡,如果需要,还可以在这个时候初始化display,然后显示一个logo。下面是微软提供的该函数的模板:
booloemplatforminit(void)
{
bool fret=false;
boot_args *pbootargs;
eth_hardware_settings *pedbgsettings;
edbg_addr *pmyaddr;
//打印版本号和时间日期信息
edbgoutputdebugstring("microsoftwindowsembeddedceethernetbootloader%d.%dforplatformexample(%s%s)nn", eboot_version_major,eboot_version_minor,__date__,__time__);
//初始化driverglobals区域中的boot引导参数信息
pbootargs=(boot_args*)boot_args_physical_memory_start;
memset(pbootargs,0,sizeof(boot_args));
pbootargs->dwsig =bootarg_sig;
pbootargs->dwlen =sizeof(boot_args);
pbootargs->dwedbgdebugzone =edbgdebugzone;
//添加按键输入判断,允许用户进入shell
if(waitforkeypress())
{
//允许用户设置网络相关的信息,比如ip地址等
loadermainmenu();
}
//初始化以太网控制器
pedbgsettings=&pbootargs->edbg;
fret =initethernet(pedbgsettings);
if(!fret)
{
edbgoutputdebugstring("error:ethernetinitializationfailedrn");
spinforever();
}
pmyaddr=&pedbgsettings->adapter.addr;
edbgoutputdebugstring("info:debugethernetmacaddress:%b:%b:%b:%b:%b:%brn",pmyaddr->wmac[0">&0x00ff,pmyaddr->wmac[0">>>8,
pmyaddr->wmac[1">&0x00ff,pmyaddr->wmac[1">>>8,
pmyaddr->wmac[2">&0x00ff,pmyaddr->wmac[2">>>8);
return(true);
}
如果喜欢wince eboot中的oem控制函数请收藏或告诉您的好朋友.
阅读(171) | 评论(0) | 转发(0) |