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