乙個星期前郭老師給我布置了一項任務:開發我們自己設計的一塊板子的pci裝置驅動,並給我指出了方向,具體說就是「三步走」戰略:
(1)入門。熟悉基於driverstudio開發環境的裝置驅動開發,同時側面了解pci裝置驅動程式的相關知識。
(2)高階。運用純ddk進行驅動開發,著重於學習別人的例項,並能熟練進行除錯和修改。
(3)實戰。深入研究pci匯流排標準,結合具體的電路板特性開發出一套自己的裝置驅動。
現在正在入門階段的初級,總結一下近一周以來的windows驅動程式開發學習過程中的經驗:
我目前使用的開發環境是:winddk/2600 + visual studio 6.0 + compuware/driverstudio 3.2
(前兩者安裝順序不限,driverstudio要最後安裝)。
-----------------------------------------
學習中遇到的問題和解決方法:
(1)拿到附書**,執行出了第乙個驅動程式charsample,步驟如下:先雙擊**光碟提供的登錄檔匯入檔案
windows2k-xp.reg,然後執行driverstudio自帶的ezdriverinstaller工具,開啟sys目錄下的驅動安裝配置檔案
charsample.inf,然後add new device,提示需要.sys驅動系統檔案,找到sys/objchk/i386目錄下的
charsample.sys檔案,確定後將提示the driver loaded successfully!(如果報錯,而且裝置前帶!號,一般是因為忘記匯入登錄檔了)
如此安裝好驅動以後,就可以執行exe/objchk/i386目錄下的應用程式test_charsample.exe進行測試了!
(2)執行成功後,重新編譯時卻總出現錯誤,編譯不過去!
錯誤是:
fatal error lnk1181: cannot open input file "....../driverstudio/driverworks/lib/i386/checked/vdw_wdm.lib" 通過網上學習和交流找到答案:原來是因為配置開發環境時,漏掉了如下乙個步驟:
編譯....../compuware/driverstudio/driverworks/source目錄下的工程得到vdw_wdm.lib檔案!
編譯時,注意用vc開啟工程檔案後,有兩個工程,要先將vdwlibs工程設為當前active project,然後在工具欄上單擊右鍵選擇「組建」,在彈出的編譯工具欄中配置一下編譯平台的設定:選擇win32 wdm checked平台(因為我們用的xp),然後編譯就應該可以了,但是還有可能出現編譯錯誤:
fatal error c1083: cannot open include file: 'warning.h': no such file or directory
為啥呢?因為沒有選擇ddk環境,此時應該在driverstudio選單-》ddk build setting...中選擇我們先前安裝的ddk的目錄,我安裝的目錄是c:/winddk/2600,這樣就可以編譯通過了!
編譯完後會在"....../driverstudio/driverworks/lib/i386/checked/"目錄下生成vdw_wdm.lib檔案,做完這些後在去編譯自己編寫的驅動程式工程就不會有上面所列的錯誤了!
當然,也有可能會出現這樣的編譯錯誤:fatal error c1051: program database file, '....../compuware/driverstudio/driverworks/source/obj/i386/wdmchecked/vdw_wdm.pdb', has an obsolete format, delete it and recompile
不過編譯器提示的應該夠清楚了,只要把連線目錄下的檔案刪除再編譯一次就可以了!
(3)用嚮導新建乙個驅動工程,進行編譯會產生如下錯誤:
linking
with ddk linker...
link
: fatal error lnk1181: cannot open input file 'ntstrsafe.lib'
error
executing link.exe.
因為這個檔案在xpddk裡面是沒有的,在2003 ddk裡面有,拷貝乙個過來就可以了,或者在工程-》設定-》連線選框中把ntstrsafe.lib這個連線項去掉(它與source檔案有對應關係,在source檔案中把這個庫的鏈結去掉也可以)
在工程中的sources檔案裡邊,找到下面一行:
targetlibs=$(ddk_lib_path)/ntstrsafe.lib $(ddk_lib_path)/csq.lib
直接刪除即可。有時候還會提示沒有ntstrsafe.h,#include出錯,把它注釋掉即可。
(4)在重新編譯武安河這本書中dmasample這個示例程式時,出現了乙個錯誤:
fatal error c1189: #error : compiler version not supported by windows ddk
這個錯誤是在前面幾個例子中不曾遇到的,原因在於wdm.h檔案中有乙個條件編譯語句
#if _msc_ver < 1300
#error compiler version not supported by windows ddk
#endif
而vc6對應的_msc_ver(與版本有關)為1200,因此提示如上錯誤
解決此問題是通過運用ddk sources to vcproj converter工具把驅動工程的sources檔案轉換成對vc6相適應而解決的。
(5)關於除錯。除錯方法很多,一般都用dbgprint。
check和free的區別。簡單地說,check相當於debug,free相當於release,前者是除錯版本,後者是發布版本。你可以使用以下語句實現僅在check版本中輸出除錯語句:
#if dug
#define dprintf dbgprint
#else
#define dprintf(x)
#endif
然後使用dprintf代替dbgprint。
轉換為vc工程。開始--程式--compuware driverstudio--develop--ddk sources to vcproj converter,即可轉換。
編譯應用程式時盡量用ddk編譯,不要用vc自帶的build,否則生成的應用程式會提示錯誤!
驅動程式開發環境配置下面(2)
ddk學習中遇到的問題和解決方法 2008 01 08 18 11 學習中遇到的問題和解決方法 1 拿到附書 執行出了第乙個驅動程式charsample,步驟如下 先雙擊 光碟提供的登錄檔匯入檔案 windows2k xp.reg,然後執行driverstudio自帶的ezdriverinstall...
Android驅動程式開發和除錯環境配置
本文用 android深度探索 卷1 hal與驅動開發 的隨書源 為例詳細說明如何配置android驅動開發和測試環境,並且如何使用源 中的build.sh指令碼檔案在各種平台 ubuntu linux android模擬器和s3c6410開發板 上編譯 安裝和測試linux驅動。建議讀者使用ubu...
Linux驅動程式之入門篇
無論是vc還是vb,還是c 還是jsp php等等語言,在學習他們之前總是先來乙個hello world的例子,這個好像成了我們程式入門的必經之路。所以在驅動程式的學習上,也離不開這個步驟。但是驅動程式的開發是執行在核心空間的,而應用程式是執行在使用者空間的,所以驅動程式的開發盒除錯和應用程式的開發...