一般使用eboot下载wince image都是通过网络,就是指以太网,当然也有通过usb下载的,不过网络下载是最常用的了。实际上下载的工作是在blcommon模块中完成的,它会调用oemreaddata函数来下载数据,oemreaddata由用户来实现,一般如果是网络下载,都会在oemreaddata中直接调用ebootetherreaddata函数来从网络读取数据,该函数由微软实现,这个函数会再调用oemethgetframe函数从网卡读取数据,这个函数是要用户根据自己使用的网卡芯片实现的网卡驱动部分。
不知道我上面说明白了没有,实际上在eboot中,blcommon是最上层,为了实现下载,我们需要实现相关的oem下载函数,而这些oem函数会调用wince提供的网络函数,这些函数在”wince600publiccommonoakdriversethdbgeboot”下面,这个目录下面的代码会被编译成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为成功。
![]()
如果喜欢wince eboot中的网络函数请收藏或告诉您的好朋友.
阅读(177) | 评论(0) | 转发(0) |