久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

eboot燒寫NK的詳細(xì)流程

 bit54song 2013-08-19

       一般使用EBOOT下載WinCE image都是通過(guò)網(wǎng)絡(luò),,就是指以太網(wǎng),,當(dāng)然也有通過(guò)USB下載的,不過(guò)網(wǎng)絡(luò)下載是最常用的了,。實(shí)際上下載的工作是在BLCOMMON模塊中完成的,,它會(huì)調(diào)用OEMReadData函數(shù)來(lái)下載數(shù)據(jù),OEMReadData由用戶來(lái)實(shí)現(xiàn),,一般如果是網(wǎng)絡(luò)下載,,都會(huì)在OEMReadData中直接調(diào)用EbootEtherReadData函數(shù)來(lái)從網(wǎng)絡(luò)讀取數(shù)據(jù),該函數(shù)由微軟實(shí)現(xiàn),,這個(gè)函數(shù)會(huì)再調(diào)用OEMEthGetFrame函數(shù)從網(wǎng)卡讀取數(shù)據(jù),,這個(gè)函數(shù)是要用戶根據(jù)自己使用的網(wǎng)卡芯片實(shí)現(xiàn)的網(wǎng)卡驅(qū)動(dòng)部分。http://blog.csdn.net/nanjianhui/archive/2008/11/21/3344247.aspx

不知道我上面說(shuō)明白了沒(méi)有,,實(shí)際上在EBOOT中,,BLCOMMON是最上層,為了實(shí)現(xiàn)下載,,我們需要實(shí)現(xiàn)相關(guān)的OEM下載函數(shù),,而這些OEM函數(shù)會(huì)調(diào)用WinCE提供的網(wǎng)絡(luò)函數(shù),這些函數(shù)在”\WINCE600\public\common\oak\drivers\ethdbg\eboot”下面,,這個(gè)目錄下面的代碼會(huì)被編譯成eboot.lib的庫(kù),,用于提供一個(gè)小的TCP/IP協(xié)議棧和TFTP服務(wù)。Eboot.lib會(huì)調(diào)用底層的網(wǎng)卡驅(qū)動(dòng)函數(shù)實(shí)現(xiàn)網(wǎng)卡上的數(shù)據(jù)傳輸,,而底層的網(wǎng)卡驅(qū)動(dòng)函數(shù)實(shí)際上還是一些OEM函數(shù)要用戶來(lái)實(shí)現(xiàn)的,。

先來(lái)介紹一下EBOOT下載的相關(guān)OEM函數(shù):

1. LPBYTE OEMMapMemAddr(DWORD dwImageStart, DWORD dwAddr)

該函數(shù)主要做Flash到RAM的地址影射。WinCE image在下載的時(shí)候是邊下載邊寫入的,,由于寫入Flash速度慢,,可能會(huì)影響到下載,,所以該函數(shù)實(shí)現(xiàn)了一個(gè)RAM的緩沖區(qū),就是將Flash地址映射到RAM中,,這樣下載的數(shù)據(jù)先被放在RAM緩沖區(qū)中,,然后再寫入Flash里面。該函數(shù)會(huì)被OEMWriteFlash調(diào)用,。dwImageStart為被寫入的WinCE image在Flash中的起始地址,,dwAddr為被寫入的Bin文件的起始地址,返回值為映射后的RAM中的地址,。

2. BOOL OEMReadData(DWORD cbData, LPBYTE pbData)

該函數(shù)在下載WinCE image的時(shí)候用于讀取下載數(shù)據(jù),,一般網(wǎng)絡(luò)下載,在該函數(shù)中直接調(diào)用EbootEtherReadData函數(shù)即可,。當(dāng)然,,也可以在該函數(shù)中添加其他的讀寫方式,比如從SD卡中讀取,。cbData為要讀取的字節(jié)數(shù),,pbData是一個(gè)Buffer,返回TRUE為成功,。

3. void OEMShowProgress(DWORD dwPacketNum)

該函數(shù)用于顯示下載進(jìn)度,,主要是給用戶一個(gè)信息??梢栽谠摵瘮?shù)里面打印串口信息或者操作LED來(lái)告訴用戶當(dāng)前下載的狀態(tài),。dwPacketNum為當(dāng)前已經(jīng)下載的packet數(shù)。

下面來(lái)介紹一下網(wǎng)絡(luò)控制函數(shù):

1. BOOL EbootEtherReadData(DWORD cbData, LPBYTE pbData)

從網(wǎng)絡(luò)上讀取數(shù)據(jù),,它會(huì)被OEMReadData調(diào)用,,cbData為要讀取的字節(jié)數(shù),pbData是一個(gè)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)

該函數(shù)用于初始化網(wǎng)絡(luò)傳輸,它會(huì)被OEMPreDownload函數(shù)調(diào)用,。pEdbgAddr為一個(gè)網(wǎng)卡地址結(jié)構(gòu),,其中包括IP地址,MAC地址和端口號(hào),。pdwSubnetMask為子網(wǎng)掩碼,。pfJumping為跳轉(zhuǎn)標(biāo)記,用于決定是下載還是直接跳轉(zhuǎn)執(zhí)行,。pdwDHCPLeaseTime為DHCP的延續(xù)時(shí)間,。VersionMajor和VersionMinor為版本號(hào)。szPlatformString為平臺(tái)名稱,。szDeviceName為設(shè)備名稱,,在下載的時(shí)候會(huì)在Platform Builder中顯示。CPUId為處理器的Id,。dwBootFlags應(yīng)設(shè)置為0,。

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

該函數(shù)用于等待PC端的Platform Builder的連接,并接收用于相關(guān)服務(wù)的IP地址和端口號(hào)的信息,,也包括KITL標(biāo)記位,,該函數(shù)會(huì)被OEMLaunch函數(shù)調(diào)用。pDevAddr為設(shè)備端的地址信息,,包括IP地址,,MAC地址和端口號(hào)。pHostAddr為Host端的地址信息,,包括IP地址,,MAC地址和端口號(hào)。返回的是一個(gè)EDBG_OS_CONFIG_DATA結(jié)構(gòu),,其中包含各個(gè)服務(wù)的地址信息配置和用戶設(shè)置等信息,。

下面介紹一下實(shí)現(xiàn)網(wǎng)卡驅(qū)動(dòng)的OEM函數(shù):

1. BOOL OEMEthSendFrame(BYTE* pData, DWORD dwLength)

該函數(shù)用于發(fā)送一幀數(shù)據(jù),它會(huì)被eboot.lib調(diào)用來(lái)發(fā)送數(shù)據(jù)到網(wǎng)卡上,。pData為數(shù)據(jù)buffer,,dwLength為長(zhǎng)度。返回TRUE為成功,。

2. BOOL OEMEthGetFrame(BYTE* pData, UINT16* pwLength)

該函數(shù)用于接收一幀數(shù)據(jù),,它會(huì)被eboot.lib調(diào)用來(lái)接收網(wǎng)卡上的數(shù)據(jù)。pData為數(shù)據(jù)buffer,,dwLength為長(zhǎng)度,。返回TRUE為成功。

WinCE為網(wǎng)卡驅(qū)動(dòng)提供了一個(gè)模板,,一般開(kāi)發(fā)EBOOT中的網(wǎng)卡驅(qū)動(dòng)都會(huì)按照該模板來(lái)封裝相關(guān)的函數(shù),,具體網(wǎng)卡驅(qū)動(dòng)函數(shù)模板定義如下:

PFN_EDBG_INIT               pfnEDbgInit;             //初始化網(wǎng)卡
PFN_EDBG_ENABLE_INTS        pfnEDbgEnableInts;       //打開(kāi)網(wǎng)卡中斷
PFN_EDBG_DISABLE_INTS       pfnEDbgDisableInts;      //禁用網(wǎng)卡中斷
PFN_EDBG_GET_PENDING_INTS   pfnEDbgGetPendingInts;   //讀網(wǎng)卡中斷標(biāo)記
PFN_EDBG_GET_FRAME          pfnEDbgGetFrame;         //接收一幀數(shù)據(jù)
PFN_EDBG_SEND_FRAME         pfnEDbgSendFrame;        //發(fā)送一幀數(shù)據(jù)
PFN_EDBG_READ_EEPROM        pfnEDbgReadEEPROM;       //讀網(wǎng)卡外接的eeprom
PFN_EDBG_WRITE_EEPROM       pfnEDbgWriteEEPROM;      //寫網(wǎng)卡外接的eeprom

上述定義可以在halether.h文件中找到,就是一些函數(shù)指針,,當(dāng)然還有一些沒(méi)有列出,,那些用于支持KITL,這里不做介紹,。一般在EBOOT中網(wǎng)卡驅(qū)動(dòng)在ether.c文件中實(shí)現(xiàn),,根據(jù)需要實(shí)現(xiàn)上述模板中的相關(guān)的實(shí)體函數(shù)。實(shí)際上OEMEthSendFrame和OEMEthGetFrame可以直接調(diào)用pfnEdbgSendFrame和pfnEdbgGetFrame兩個(gè)函數(shù)指針指向的函數(shù),,目前在大多數(shù)BSP中也是這樣實(shí)現(xiàn)的,。pfnEdbgInit所指向的函數(shù)用于初始化網(wǎng)卡一般會(huì)在OEMPlatformInit中被調(diào)用。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多