快捷搜索:

WinCE EBOOT中的Optional函数

在WinCE的EBOOT中,有一些函数属于Optional的OEM函数,也便是可选择实现的。这些函数会在BLCOMMON模块中被调用,我们必要在EBOOT中实现它们,然后把实现的函数赋值给BLCOMMON中的响应的函数指针上面就可以了,这样BLCOMMON模块在调用这些Optional函数的时刻,会首先反省他们是否为NULL,假如为NULL就不履行,假如不是NULL就运行这些函数。

可以先看一下BLCOMMON模块的代码,在blcommon.c中有如下的定义:

PFN_OEMVERIFYMEMORY   g_pOEMVerifyMemory;

PFN_OEMREPORTERROR    g_pOEMReportError;

PFN_OEMCHECKSIGNATURE  g_pOEMCheckSignature;

PFN_OEMMULTIBINNOTIFY  g_pOEMMultiBINNotify;

这4个Optional函数指针在EBOOT中一样平常会对应下面的函数:

BOOL OEMVerifyMemory(DWORD dwStartAddr, DWORD dwLength)

BOOL OEMReportError(DWORD dwReason, DWORD dwReserved)

BOOL OEMCheckSignature(DWORD dwImageStart, DWORD dwROMOffset, DWORD dwLaunchAddr, BOOL bDownloaded)

void OEMMultiBINNotify(const PMultiBINInfo pInfo)

下面先容一些这些OEM函数:

1. BOOL OEMVerifyMemory(DWORD dwStartAddr, DWORD dwLength)

该函数主要用于对要被下载WinCE image的存储设备进行验证,它在BLCOMMON模块中的DownloadImage函数中被调用,用于下载前验证存储设备。dwStartAddr为被下载的image在存储器中的肇端地址,dwLength为image的长度,成功返回TRUE。

2. BOOL OEMReportError(DWORD dwReason, DWORD dwReserved)

该函数用于申报差错,用户可以经由过程串口打印的要领来实现。在BLCOMMON模块中,它会被HALT函数调用,而HALT函数会在BLCOMMON模块中的BootloaderMain函数掉足时被调用来申报差错。dwReason为差错缘故原由,dwReserved为预留,今朝没有被应用。

3. BOOL OEMCheckSignature(DWORD dwImageStart, DWORD dwROMOffset, DWORD dwLaunchAddr, BOOL bDownloaded)

该函数用于验证WinCE image中的签名并反省其有效性。它会被BLCOMMON模块中的DownloadImage中被调用,主要验证下载后的WinCE image。dwImageStart为被下载image的存储肇端地址,dwROMOffset为config.bib文件中定义的ROMOFFSET的值,dwLaunchAddr为被加载的地址,bDownloaded为TURE表示是被下载的image文件。其其实BLCOMMON模块中已经供给了一个通用的签名反省函数CheckSignature(..)在signimage.c文件中,可以在该函数中调用这个函数来验证image的签名。

4. void OEMMultiBINNotify(const PMultiBINInfo pInfo)

该函数用于奉告用户鄙人载多个bin文件的时刻,每个文件的区域信息。它会被BLCOMMON模块的DownloadImage函数调用。Platform Builder本身是支持一次下载多个Bin文件的,以是EBOOT下载的时刻,可以经由过程该函数要下载的Bin文件数以及每个Bin文件的肇端地址和长度,这些信息在pInfo中表现。

上面的这些OEM函数是用户根据自己的必要来实现的,假如想让他们被BLCOMMON模块调用,还必要将他们赋值给响应的函数指针,如下:

g_pOEMVerifyMemory = OEMVerifyMemory(..)

g_pOEMReportError = OEMReportError(..)

g_pOEMCheckSignature = OEMCheckSignature(..)

g_pOEMMultiBINNotify = OEMMultiBINNotify(..)

上面的赋值操作最好在OEMDebugInit函数中完成。

着末还要提一个EBOOT中的函数,该函数应该不算是Optional的OEM函数,然则也是可以根据EBOOT的必要来选择实现的:

DWORD OEMEthGetSecs (void):

该函数实际上是一个Timer函数,用于返回当前的秒数。它在EBOOT中主要用于Polling模式下的超时判断,一样平常会在OEMPlatformInit函数中被调用。在OEMPlatformInit中,常会等待用户从串口输入信息来抉择是否直接加载运行WinCE照样进入Bootloader菜单进行设置。这个等待用户输入会有必然的光阴限定,便是经由过程在while轮回中调用该函数直到超韶光阴到今后自动跳出。

您可能还会对下面的文章感兴趣: