我使用的是WinXP SP1+DS3.2+XP DDK+VC6.0英文版,以下為DS3.2版本的安裝過程:
個(gè)星期前郭老師給我布置了一項(xiàng)任務(wù):開發(fā)我們自己設(shè)計(jì)的一塊板子的PCI設(shè)備驅(qū)動(dòng),并給我指出了方向,具體說就是“三步走”戰(zhàn)略: (1)入門。熟悉基于DriverStudio開發(fā)環(huán)境的設(shè)備驅(qū)動(dòng)開發(fā),同時(shí)側(cè)面了解PCI設(shè)備驅(qū)動(dòng)程序的相關(guān)知識(shí)。 (2)進(jìn)階。運(yùn)用純DDK進(jìn)行驅(qū)動(dòng)開發(fā),著重于學(xué)習(xí)別人的實(shí)例,并能熟練進(jìn)行調(diào)試和修改。 (3)實(shí)戰(zhàn)。深入研究PCI總線標(biāo)準(zhǔn),結(jié)合具體的電路板特性開發(fā)出一套自己的設(shè)備驅(qū)動(dòng)。 現(xiàn)在正在入門階段的初級(jí),總結(jié)一下近一周以來的WINDOWS驅(qū)動(dòng)程序開發(fā)學(xué)習(xí)過程中的經(jīng)驗(yàn):
我目前使用的開發(fā)環(huán)境是:WINDDK\2600 + Visual Studio 6.0 + Compuware\DriverStudio 3.2
(前兩者安裝順序不限,DriverStudio要最后安裝)。
參考的主要入門書是:《Windows 2000/XP WDM 設(shè)備驅(qū)動(dòng)程序開發(fā)(第二版)》武安河 編著
-----------------------------------------
學(xué)習(xí)中遇到的問題和解決方法:
(1)拿到附書代碼,運(yùn)行出了第一個(gè)驅(qū)動(dòng)程序CharSample,步驟如下:先雙擊代碼光盤提供的注冊(cè)表導(dǎo)入文件
Windows2K-XP.reg,然后運(yùn)行DriverStudio自帶的EzDriverInstaller工具,打開sys目錄下的驅(qū)動(dòng)安裝配置文件
CharSample.inf,然后Add New Device,提示需要.sys驅(qū)動(dòng)系統(tǒng)文件,找到sys\objchk\i386目錄下的
CharSample.sys文件,確定后將提示The Driver Loaded Successfully?。ㄈ绻麍?bào)錯(cuò),而且設(shè)備前帶!號(hào),一般是因?yàn)橥泴?dǎo)入注冊(cè)表了)
如此安裝好驅(qū)動(dòng)以后,就可以運(yùn)行exe\objchk\i386目錄下的應(yīng)用程序Test_CharSample.exe進(jìn)行測(cè)試了!
(2)運(yùn)行成功后,重新編譯時(shí)卻總出現(xiàn)錯(cuò)誤,編譯不過去!
錯(cuò)誤是:
fatal error LNK1181: cannot open input file "......\DriverStudio\DriverWorks\lib\I386\checked\vdw_wdm.lib" 通過網(wǎng)上學(xué)習(xí)和交流找到答案:原來是因?yàn)榕渲瞄_發(fā)環(huán)境時(shí),漏掉了如下一個(gè)步驟:
編譯......\Compuware\DriverStudio\DriverWorks\source目錄下的工程得到vdw_wdm.lib文件!
編譯時(shí),注意用VC打開工程文件后,有兩個(gè)工程,要先將VdwLibs工程設(shè)為當(dāng)前Active Project,然后在工具欄上單擊右鍵選擇“組建”,在彈出的編譯工具欄中配置一下編譯平臺(tái)的設(shè)置:選擇Win32 WDM Checked平臺(tái)(因?yàn)槲覀冇玫腦P),然后編譯就應(yīng)該可以了,但是還有可能出現(xiàn)編譯錯(cuò)誤:
fatal error C1083: Cannot open include file: 'warning.h': No such file or directory
為啥呢?因?yàn)闆]有選擇DDK環(huán)境,此時(shí)應(yīng)該在DriverStudio菜單-》DDK Build Setting...中選擇我們先前安裝的DDK的目錄,我安裝的目錄是C:\WINDDK\2600,這樣就可以編譯通過了!
編譯完后會(huì)在"......\DriverStudio\DriverWorks\lib\I386\checked\"目錄下生成vdw_wdm.lib文件,做完這些后在去編譯自己編寫的驅(qū)動(dòng)程序工程就不會(huì)有上面所列的錯(cuò)誤了!
當(dāng)然,也有可能會(huì)出現(xiàn)這樣的編譯錯(cuò)誤:fatal error C1051: program database file, '......\compuware\driverstudio\driverworks\source\obj\i386\wdmchecked\vdw_wdm.pdb', has an obsolete format, delete it and recompile
不過編譯器提示的應(yīng)該夠清楚了,只要把連接目錄下的文件刪除再編譯一次就可以了!
(3)用向?qū)陆ㄒ粋€(gè)驅(qū)動(dòng)工程,進(jìn)行編譯會(huì)產(chǎn)生如下錯(cuò)誤:
Linking with DDK linker...
LINK : fatal error LNK1181: cannot open input file 'ntstrsafe.lib'
Error executing link.exe.
因?yàn)檫@個(gè)文件在xpddk里面是沒有的,在2003 ddk里面有,拷貝一個(gè)過來就可以了,或者在工程-》設(shè)置-》連接選框中把ntstrsafe.lib這個(gè)連接項(xiàng)去掉(它與source文件有對(duì)應(yīng)關(guān)系,在source文件中把這個(gè)庫的鏈接去掉也可以)
在工程中的sources文件里邊,找到下面一行:
TARGETLIBS=$(DDK_LIB_PATH)\ntstrsafe.lib $(DDK_LIB_PATH)\csq.lib
直接刪除即可。有時(shí)候還會(huì)提示沒有ntstrsafe.h,#include<ntstrsafe.h>出錯(cuò),把它注釋掉即可。
(4)在重新編譯武安河這本書中DMASample這個(gè)示例程序時(shí),出現(xiàn)了一個(gè)錯(cuò)誤:
fatal error C1189: #error : Compiler version not supported by Windows DDK
這個(gè)錯(cuò)誤是在前面幾個(gè)例子中不曾遇到的,原因在于wdm.h文件中有一個(gè)條件編譯語句
#if _MSC_VER < 1300
#error Compiler version not supported by Windows DDK
#endif
而VC6對(duì)應(yīng)的_MSC_VER(與版本有關(guān))為1200,因此提示如上錯(cuò)誤
解決此問題是通過運(yùn)用DDK sources to vcproj Converter工具把驅(qū)動(dòng)工程的sources文件轉(zhuǎn)換成對(duì)VC6相適應(yīng)而解決的。
(5)關(guān)于調(diào)試。調(diào)試方法很多,一般都用DbgPrint。
check和free的區(qū)別。簡單地說,check相當(dāng)于debug,free相當(dāng)于release,前者是調(diào)試版本,后者是發(fā)布版本。你可以使用以下語句實(shí)現(xiàn)僅在check版本中輸出調(diào)試語句:
#if dug
#define dprintf DbgPrint
#else
#define dprintf(x)
#endif
然后使用dprintf代替DbgPrint。
調(diào)試工具。ds自帶的softice,DriverMonitor,等。此外,Dbgview和DriverMonitor類似,可以從網(wǎng)上下載到的。Dbgview和DriverMonitor可以看到DbgPrint的字符串。
轉(zhuǎn)換為vc工程。開始--程序--Compuware DriverStudio--develop--DDK sources to vcproj Converter,即可轉(zhuǎn)換。
編譯應(yīng)用程序時(shí)盡量用DDK編譯,不要用VC自帶的Build,否則生成的應(yīng)用程序會(huì)提示錯(cuò)誤!
|
|