WinCE EBOOT中的Optional函数和BootPart分析
来源:互联网 发布:linux 查看hba信息 编辑:程序博客网 时间:2024/05/08 03:09
可以先看一下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中体现。
==============================================================================
BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用。在EBOOT中,BLCOMMON处于最上层,BootPart模块会被OEM函数来调用,而BootPart模块要操作存储设备需要Flash Driver的支持。
这里要说的是Flash Driver是指WinCE下的Flash驱动,也就是FMD_xxx接口的驱动。Bootpart模块主要提供对Flash设备的分区功能。
(1)BOOL BP_Init (LPBYTE pMemory, DWORD dwSize, LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)
该函数可以说是BootPart模块的初始化函数,看看代码就知道他会调用FMD_Init来初始化Flash设备并初始化一块内存。pMemory指向一块内存来存放MBR信息,dwSize为内存的大小,lpActiveReg,pRegIn和pRegOut会被FMD_Init用到,一般可以设置为NULL。
(2)BOOL BP_LowLevelFormat(DWORD dwStartBlock, DWORD dwNumBlocks, DWORD dwFlags)
该函数用于低级格式化,它会格式化Flash设备中的Block,重新创建MBR并将MBR存到第一个Blockd的第一个扇区中。dwStartBlock为起始Block,dwNumBlocks为多少个Block,dwFlags为格式化标记位,表示采用何种格式化方式。
(3)PPARTENTRY BP_GetPartitionInfo (HANDLE hPartition)
该函数用于获得某个分区的信息。hPartition为某一个分区的句柄,返回相应的分区信息。
(4)HANDLE BP_OpenPartition(DWORD dwStartSector, DWORD dwNumSectors, DWORD dwPartType, BOOL fActive, DWORD dwCreationFlags)
该函数用于打开或者创建一个分区,可以通过该函数在Flash设备上面创建分区。dwStartSector为起始逻辑扇区,dwNumSectors为该分区中包含多少个扇区,dwPartType表示分区的类型,fActive为是否是激活分区,dwCreationFlags表示是创建分区还是打开分区,执行成功后返回该分区的句柄。
(5)BOOL BP_WriteData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)
该函数负责向某一个分区写入数据,一般EBOOT可以通过这个函数将WinCE image写入分区中。hPartition为被创建的分区的句柄,pbBuffer为要写入数据的Buffer,dwLength为要写入数据的长度。
(6)BOOL BP_ReadData(HANDLE hPartition, LPBYTE pbBuffer, DWORD dwLength)
该函数负责从一个分区中读出数据,EBOOT可以通过这个函数将WinCE image读到RAM中。hPartition为被创建的分区的句柄,pbBuffer为要读出数据的Buffer,dwLength为要读出数据的长度。
(7)BOOL BP_SetDataPointer (HANDLE hPartition, DWORD dwAddress)
该函数用于设置某一个分区的数据指针,实际上数据指针是指在该分区中下一次被读或写的位置。一般会配合BP_ReadData(..)和BP_WriteData(..)两个函数来用。hPartition为被创建分区的句柄,dwAddress为数据指针的新位置。
参考原文:http://space.itpub.net/16912323/viewspace-504250
参考原文:http://space.itpub.net/16912323/viewspace-504249
- WinCE EBOOT中的Optional函数和BootPart分析
- WinCE EBOOT中的BootPart分析
- WinCE EBOOT中的BootPart分析
- WinCE EBOOT中的BootPart分析
- WinCE EBOOT中的BootPart分析
- WinCE EBOOT中的BootPart分析
- 浅谈WinCE EBOOT中的BootPart分析
- WinCE EBOOT中的Optional函数
- WinCE EBOOT中的Optional函数
- WinCE EBOOT中的Optional函数
- WinCE EBOOT中的Optional函数
- WinCE EBOOT中的BootPart分析 基于WinCE6.0
- WinCE EBOOT中的BootPart分析 基于WinCE6.0
- WinCE EBOOT中的BootPart分析 基于WinCE6.0
- WinCE操作系统 EBOOT中的BootPart…
- WinCE Eboot中的网络函数
- WinCE Eboot中的网络函数
- WinCE Eboot中的网络函数
- Linux 终端访问 FTP 及 上传下载 文件
- 转换输入字符串中的任何转换(转义)字符
- 总线的异步通讯方式
- c# 操作postgis
- 信心和意志力很重要,但是精力更重要!
- WinCE EBOOT中的Optional函数和BootPart分析
- 关于Android的KSoap2的使用
- 数据库事务隔离级别与锁
- FAT16文件系统格式说明
- 小议测试驱动开发
- Luncher
- C# static const和readonly区别
- linux下使用objdump -p 查看库文件版本等信息
- IIS 6.0下安装OpenLayers代理Proxy.py步骤