WinCE Eboot中的网络函数

一般使用EBOOT下载WinCE image都是通过网络,就是指以太网,当然也有通过USB下载的,不过网络下载是最常用的了。实际上下载的工作是在BLCOMMON模块中完成的,它会调用OEMReadData函数来下载数据,OEMReadData由用户来实现,一般如果是网络下载,都会在OEMReadData中直接调用EbootEtherReadData函数来从网络读取数据,该函数由微软实现,这个函数会再调用OEMEthGetFrame函数从网卡读取数据,这个函数是要用户根据自己使用的网卡芯片实现的网卡驱动部分。

不知道我上面说明白了没有,实际上在EBOOT中,BLCOMMON是最上层,为了实现下载,我们需要实现相关的OEM下载函数,而这些OEM函数会调用WinCE提供的网络函数,这些函数在”\WINCE600\public\common\oak\drivers\ethdbg\eboot”下面,这个目录下面的代码会被编译成eboot.lib的库,用于提供一个小的TCP/IP协议栈和TFTP服务。Eboot.lib会调用底层的网卡驱动函数实现网卡上的数据传输,而底层的网卡驱动函数实际上还是一些OEM函数要用户来实现的。

先来介绍一下EBOOT下载的相关OEM函数:

1. LPBYTE OEMMapMemAddr(DWORD dwImageStart, DWORD dwAddr)

该函数主要做Flash到RAM的地址影射。WinCE image在下载的时候是边下载边写入的,由于写入Flash速度慢,可能会影响到下载,所以该函数实现了一个RAM的缓冲区,就是将Flash地址映射到RAM中,这样下载的数据先被放在RAM缓冲区中,然后再写入Flash里面。该函数会被OEMWriteFlash调用。dwImageStart为被写入的WinCE image在Flash中的起始地址,dwAddr为被写入的Bin文件的起始地址,返回值为映射后的RAM中的地址。

2. BOOL OEMReadData(DWORD cbData, LPBYTE pbData)

该函数在下载WinCE image的时候用于读取下载数据,一般网络下载,在该函数中直接调用EbootEtherReadData函数即可。当然,也可以在该函数中添加其他的读写方式,比如从SD卡中读取。cbData为要读取的字节数,pbData是一个Buffer,返回TRUE为成功。

3. void OEMShowProgress(DWORD dwPacketNum)

该函数用于显示下载进度,主要是给用户一个信息。可以在该函数里面打印串口信息或者操作LED来告诉用户当前下载的状态。dwPacketNum为当前已经下载的packet数。

下面来介绍一下网络控制函数:

1. BOOL EbootEtherReadData(DWORD cbData, LPBYTE pbData)

从网络上读取数据,它会被OEMReadData调用,cbData为要读取的字节数,pbData是一个Buffer,返回TRUE为成功。

2. BOOL EbootInitEtherTransport( EDBG_ADDR* pEdbgAddr, LPDWORD pdwSubnetMask, BOOL* pfJumping, DWORD* pdwDHCPLeaseTime, UCHAR VersionMajor, UCHAR VersionMinor, char* szPlatformString, char* szDeviceName, UCHAR CPUId, DWORD dwBootFlags)

该函数用于初始化网络传输,它会被OEMPreDownload函数调用。pEdbgAddr为一个网卡地址结构,其中包括IP地址,MAC地址和端口号。pdwSubnetMask为子网掩码。pfJumping为跳转标记,用于决定是下载还是直接跳转执行。pdwDHCPLeaseTime为DHCP的延续时间。VersionMajor和VersionMinor为版本号。szPlatformString为平台名称。szDeviceName为设备名称,在下载的时候会在Platform Builder中显示。CPUId为处理器的Id。dwBootFlags应设置为0。

3. EDBG_OS_CONFIG_DATA* EbootWaitForHostConnect(EDBG_ADDR* pDevAddr, EDBG_ADDR* pHostAddr)

该函数用于等待PC端的Platform Builder的连接,并接收用于相关服务的IP地址和端口号的信息,也包括KITL标记位,该函数会被OEMLaunch函数调用。pDevAddr为设备端的地址信息,包括IP地址,MAC地址和端口号。pHostAddr为Host端的地址信息,包括IP地址,MAC地址和端口号。返回的是一个EDBG_OS_CONFIG_DATA结构,其中包含各个服务的地址信息配置和用户设置等信息。

时间: 2024-09-15 19:47:41

WinCE Eboot中的网络函数的相关文章

WinCE Eboot中的OEM Flash函数

在EBOOT中提供了操作Flash的功能,可以将下载的WinCE image烧到Flash当中,这需要实现一些Flash相关的OEM函数. 这些OEM函数会在BLCOMMON模块中被调用,也就是在blcommon.c文件的DownloadImage函数中被调用.在DownloadImage函数中,一般image文件的header会被先下载并进行解析.然后调用OEMIsFlashAddr判断image所在的区域,如果是在Flash的地址空间内,那么接下来会下载image文件并调用Flash相关的O

WinCE EBOOT中的Optional函数

在WinCE的EBOOT中,有一些函数属于Optional的OEM函数,也就是可选择实现的.这些函数会在BLCOMMON模块中被调用,我们需要在EBOOT中实现它们,然后把实现的函数赋值给BLCOMMON中的相应的函数指针上面就可以了,这样BLCOMMON模块在调用这些Optional函数的时候,会首先检查他们是否为NULL,如果为NULL就不执行,如果不是NULL就运行这些函数. 可以先看一下BLCOMMON模块的代码,在blcommon.c中有如下的定义: PFN_OEMVERIFYMEMO

WinCE Eboot中的OEM控制函数

在EBOOT中有很多以OEM开头的函数,这些函数都会直接或间接的被BLCOMMON模块调用,来完成相应的功能.这些OEM函数就是我们需要根据自己的平台来实现的.可以说,实现了这些OEM函数,EBOOT的功能就完成了. 在EBOOT中有很多OEM函数,有些是必须实现的,有些是不必实现的,而有些是根据你的EBOOT的功能需求来决定是否要实现的.下面会介绍一下直接由BLCOMMON调用的OEM控制函数: 1. void OEMDebugInit(void) 这应该是第一个被调用的OEM函数,用来初始化

WinCE EBOOT中的BootPart分析

应该说BootPart算是微软提供的一个用于分区的模块,可以在EBOOT中使用.不过说实话,我很少使用它,知道有些厂商的BSP里面支持这个功能,而且也算是EBOOT的一部分,所以还是介绍一下.先看一下架构,如图: 在EBOOT中,BLCOMMON处于最上层,这个在以前已经介绍过,BootPart模块会被OEM函数来调用,而BootPart模块要操作存储设备需要Flash Driver的支持.这里要说的是Flash Driver是指WinCE下的Flash驱动,也就是FMD_xxx接口的驱动.所以

WinCE EBOOT中的Boot Args与Driver Globals

在EBOOT中包含的一个重要的缓冲区叫Driver Globals,它用于在设备驱动和WinCE OS之间共享数据.而在EBOOT中会用到的启动参数结构被称为Boot Args,是指用于EBOOT和WinCE OS之间共享一些参数信息.一般来说Boot Args会在EBOOT运行的时候被赋值或者更新,最常用的就是网络设备的相关信息设置,比如IP地址,MAC地址,中断等信息. Driver Globals包含了Boot Args,也就是说Driver Globals是一块内存缓冲区,其中里面也包含

WinCE Eboot中的BLCOMMON

在EBOOT中,从Startup.s跳转到C程序入口以后,程序就可以用C语言来编写了,这样感觉就好多了.一般C语言的入口就是一个Main函数,也可能叫其他的名字.在这个Main函数中会掉用BootloaderMain函数,该函数在BLCOMMON模块中被定义的.一般Main函数的写法如下: void (void) { // Common boot loader (blcommon) main routine. BootloaderMain(); // Should never get here.

wincewinmain-关于WinMain函数在windows及wince系统中定义不同

问题描述 关于WinMain函数在windows及wince系统中定义不同 WinMain函数在windows及wince系统中定义不同,其中windows中LPTSTR lpCmdLine,而wince中LPWSTR lpCmdLine,但我创建了一个win32程序,需要应用到wince系统中,但使用LPWSTR总是报错说WinMain函数不能重定义,但如果我把这个改成LPTSTR,然后xamlruntime.h(wince系统自带的头文件)中很多需要重新修改,非常麻烦,这样做也是不合理的(我

WinCE BSP中的Dirs文件和Sources文件

1.Dirs文件 关于Dirs文件,就是指定要编译的路径,这个地球人都知道.还是简单介绍一下.按照文档上面介绍有三种定义:DIRS,DIRS_CE和OPTIONAL_DIRS. DIRS:就是指定要编译的目录. DIRS_CE:只有目录下的源代码用于WinCE的映像文件时,才编译该目录. OPTIONAL_DIRS:指定可以选择编译的目录.比如:OPTIONAL_DIRS=proj1,如果想编译proj1目录,可以设置BUILD_OPTIONS=proj1,然后运行build命令就可以了. 举个

WinCE EBOOT的入口Startup.s

在Startup.s文件中包含一个startup的入口函数,该函数为EBOOT的最开始的入口.在系统上电或者冷启动的时候,这是第一个被执行的函数.该函数都是由汇编语言编写的,完成基于硬件平台的最初的初始化,也就是CPU的相关初始化,如果有必要,也可以在这里对外围的设备进行初始化.该函数执行到最后,会跳转到C语言的入口,一般是Main函数,或者叫做EBootMain函数. 这里要多说的一件事情就是在BSP当中存在两个Startup.s文件,一个是EBOOT的Startup.s用于EBOOT本身,另