1. 程式人生 > >VS2005+WINDDK+Driver Studio 3.2編譯出第一個測試驅動程式 zz

VS2005+WINDDK+Driver Studio 3.2編譯出第一個測試驅動程式 zz

搭建好windows裝置驅動程式的開發環境,終於能在VS2005中編譯出第一個測試驅動程式了,現在把安裝和編譯的過程中遇到的一些細節問題總結一下。

1.     WINDD下載的是2600版本,不知道跟xp sp1 DDKxp sp2 DDK有什麼區別,找後面兩個版本的DDK下載地址找了好久都沒找到,驅運之家有下載,但是要高階會員才能下,要Money。電驢裡搜到一個xp sp1DDK的下載連結,但是下不了,在此把我找到的2600版本的下載地址貼出來

2.     注意安裝DDK時,建議將例子等全部安裝,否則Driver Studio編譯時會提示缺少標頭檔案

3.     VS2005環境下,安裝

Driver Studio時會有對話方塊彈出,單擊Ignore按鈕,解決辦法會在後面詳細說明;

安裝DriverStudio3.2 過程中出現DSDDKEnv8.dll failed to register錯誤的解決方法原因:與VS2005整合時會發生此錯誤。解決方法,下載補丁:


>Extract it into a temp directory. 
>Copy the file DSDDKEnv8.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin directory. 
>Select "yes" if prompted to copy over an existing one. 
>Copy the file DSDDKEnv8UI.dll into the <INSTALL_DIR>/DriverStudio/Common/Bin/1033 directory. Select "yes" if prompted to copy over an existing one. 
>Then unregister the older version 
Go to start->run and type "regsvr32 -u " <INSTALL_DIR> /DriverStudio/Common/ Bin/ dsddkenv8.dll"

注意〈INSTALL_DIR〉不能含有空格,否則命令無法執行,筆者曾將DriverStudio安裝在C:/Program Files下,總是執行不了,為此鬱悶了好久,後經別人提點才解決此問題,但不知其原因,請問有人知道嗎?

>Then register the new copy 
Go to start->run and type "regsvr32 <INSTALL_DIR>/ DriverStudio/ Common/ Bin/ dsddkenv8.dll" 
>DriverStudio menu should now be part of the VisualStudio 2005 menu

如果在vs2005+補丁後生成的解決方案檔案.sln無法雙擊開啟工程時可以使用文字編輯器開啟.sln檔案在第二行加入“# Visual Studio 2005”儲存即可,例如: 
Microsoft Visual Studio Solution File, Format Version 9.00 
# Visual Studio 2005 
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "aa", "driver/aa.vcproj", "{6A0A9D07-FD4C-4D7C-805D-48D25FB4BE6C}" EndProject

根治方法:開啟/DriverStudio/DriverWizard/Templates目錄的WdmDriver.sln.net檔案找到“Microsoft Visual Studio Solution File, Format Version 9.00”這一行,在其後下一行加入“# Visual Studio 2005”儲存即可,以後用DriverWizard生成的工程就可以正常雙擊打開了。

4.     編譯中可能遇到的問題(VS2005環境下) 
error C4430: missing type specifier - int assumed. Note: C++ does not support default-int 
這個錯誤,解決方法如下:開啟project->BaseClasses properties->configuration->C/C++ ->Command Line,增加/wd4430選項。

   error LNK2019: unresolved external symbol

error LNK2001: unresolved external symbol

解決:在連結選項中加入 /verbose:lib,就可以看到連結生成執行檔案時連結程式所要連結的庫的路徑。發現所有連結庫的路徑為DDK所在路徑。原來先前用VS寫驅動時,在VC++ Directories-->Library Files中加入了驅動庫的路徑。只要把DDK的路徑去掉,讓聯結器自動尋找預設庫進行連結就沒有該問題了。

5.     DriverWizard 新建的工程要在VS2005中編譯必須先設定DDK路徑,在VS2005選單欄Toos=>DriverStudio=>DriverStudio=>DDK Build Settings中設定DDK Root Directory

6.     然後還要編譯DriverStudio安裝目錄DriverStudio/DriverWorks/source/VdwLibs2005.sln,以得到vdw_wdm.lib這個庫檔案。編譯時,注意用VC開啟VdwLibs2005.sln工程檔案後,有兩個工程,要先將VdwLibs工程設為當前Active Project,然後右擊選擇“Property” ,在VdwLibs Property Pages中Configuration要改成“win32 Active(WDM Checked)”

7.       編譯驅動時,不要使用VC的"編譯",那會產生很多莫名其妙的錯誤,而應該選擇"DriverStudio"-->“Build with BUILD.exe”。
1>NMAKE :  U1073: don't know how to make 'D:/WINDDK/2600/lib/wxp/i386/ntstrsafe.lib'這個錯誤。
再上網查查。
原來driverstudio產生的驅動工程都會要連線ntstrsafe.lib這個庫,但實際上這個庫並不存在,在Project的Property pages裡的Link=>Input=>Additional Dependencies項中去掉這個庫就可以了,還有說DDK2003版本就不存在這個問題,還沒試過。
於是去掉之。可是問題依然存在。
狂暈!
最後終於在網上看到一個解決辦法
就是將工程中的sources檔案裡邊的:
TARGETLIBS=$(DDK_LIB_PATH)/ntstrsafe.lib $(DDK_LIB_PATH)/csq.lib
直接刪除。就行了。

   編譯後終於成了