轉做WinCE驅動(dòng)已經(jīng)有兩個(gè)月了,卻沒(méi)有做過(guò)一個(gè)真正的WinCE平臺下的驅動(dòng),心里都有些急了,很想嘗試下,好盡快融入WinCE驅動(dòng)開(kāi)發(fā)這個(gè)團隊。
頭兒也很理解,給了俺個(gè)簡(jiǎn)單的,可以說(shuō)是非常簡(jiǎn)單的任務(wù),好讓俺找找入門(mén)的感覺(jué),就是做一個(gè)FM的驅動(dòng)。
由于WinCE下的驅動(dòng)大多是基于流接口的,所以偶也采用了流接口,做比較起來(lái)簡(jiǎn)單,呵呵
說(shuō)白了,流接口就是實(shí)現以下幾個(gè)接口:
BOOL WINAPI DllMain(HANDLE hInstDll, DWORD dwReason, LPVOID lpvReserved);
DWORD XXX_Init(LPCTSTR pContext, LPCVOID lpvBusContext);
BOOL XXX_Deinit(DWORD hDeviceContext);
DWORD XXX_Open(DWORD hDeviceContext, DWORD AccessCode, DWORD ShareMode);
BOOL XXX_Close(DWORD hOpenContext);
BOOL XXX_PowerUp(DWORD hDeviceContext); BOOL XXX_PowerDown(DWORD hDeviceContext);
BOOL XXX_PowerDown(DWORD hDeviceContext);
DWORD XXX_Read(DWORD hOpenContext, LPVOID pBuffer, DWORD Count);
DWORD XXX_Write(DWORD hOpenContext, LPCVOID pBuffer, DWORD Count);
DWORD XXX_Seek(DWORD hOpenContext, long Amount, WORD Type);
BOOL XXX_IOControl(DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn,
PBYTE pBufOut, DWORD dwLenOut,
PDWORD pdwActualOut);
XXX是任意的大寫(xiě)字符串(只能是三個(gè)字符,偶剛開(kāi)始用的FM,后面回出問(wèn)題),且保證與注冊表Prefix項后的一樣哦
把以上接口給實(shí)現了,接下來(lái)就是弄注冊表咯
在注冊表中添加如下項目。(一般放在Platform.reg)
[HKEY_LOCAL_MACHINE\Drivers\BuiltIn\DevName]
"Prefix"="XXX"
"Dll"="MyDev.Dll"
"Order"=dword:1
然后在BIB文件中添加項目,將所用到的文件加入BIN文件(一般放在Platform.bib)。
MyDev.dll $(_FLATRELEASEDIR)\MyDev.dll NK SH
注:
DevName為任意與其它項目不重名的字符串.
在platform/你的平臺(如:smdk2410)/drivers 下新建一個(gè)目錄(偶的是FM),然后在drivers目錄中的dirs文件中加入以你剛新建的目錄名。
在剛新建的目錄下,新建你的C源代碼文件,在其中實(shí)現上面所述的函數,及其功能。新建名稱(chēng)分別為sources, makefile, mydev.def的文件。其內容如下:
makefile: 只需要這樣一行
!INCLUDE $(_MAKEENVROOT)\makefile.def
mydriver.def文件定義需要輸出的函數,這些函數能夠被其它代碼用動(dòng)態(tài)加載的方法調用。格式:
LIBRARY MyDev(這個(gè)字符串要和將要生成的動(dòng)態(tài)庫的文件名一樣)
EXPORTS
XXX_Init
XXX_Deinit
XXX_Open
XXX_Close
XXX_PowerOff
XXX_PowerDown
XXX_Read
XXX_Write
XXX_Seek
XXX_IOControl
Sources:這個(gè)文件很重要,內容也多,最基本的一個(gè)文件該有如下內容。
TARGETNAME=MyDev(指定要生成的動(dòng)態(tài)庫的名稱(chēng))
TARGETTYPE=DYNLINK(指定要生成的是一個(gè)動(dòng)態(tài)庫)
(下面兩項指定需要與哪些動(dòng)態(tài)庫鏈接,一般要第一項就足夠了)
TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \
$(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib
DEFFILE=MyDev.def (指定def文件)
DLLENTRY=DllEntry(指定動(dòng)態(tài)庫的入口函數)
SOURCES=(請在這寫(xiě)上你所有源文件的名字,它們將會(huì )被編譯)
一個(gè)流驅動(dòng)就大功告成咯~~~~~~
聯(lián)系客服