我在前面也講過了一些關於編譯環境及工具的。在這裡結合本例子我再說一下:
DDK分為98 DDK和2000 DDK兩種,它們工作起來是大同小異的,不過有些驅動程式只能在2000 DDK中使用。由於Win98註定是一種即將被淘汰的作業系統了,所以我學習的時候也沒有過多的關注,我用的是2000的DDK,所以以下的所有內容都是針對2000 DDK的。
·準備工作
1、確定你已經安裝了Visual C++
2、安裝2000 DDK
3、安裝2000 DDK成功後,在“開始”->“程式”裡應該有“Development Kits”->“Windows 2000 DDK”的項目。
(注意一定要先安裝好VC,然後才安裝DDK,這個順序決不能顛倒!!)
4、保證DDKROOT環境變數設定為Windows 2000 DDK的基目錄,如果不是的話,請在控制台“系統”屬性的“進階”標籤環境變數編輯器中設定好這個環境變數。
·編寫必需的檔案
編譯WDM程式的時候,有兩個檔案是必須要有的,它們是:
1、makefile
(這個是什麼啊?你可能會問。)對於比較年輕的程式員來說,有可能沒有見過這個檔案吧。其實在VC這些IDE出現之前,我們都必須使用makefile來確定項目中哪些檔案需要重新編譯,現在的IDE都把這個工作自動做好了
我們要做的工作很簡單,就是提供這樣一個檔案,它的內容是:
# # DO NOT EDIT THIS FILE!!! Edit ./sources. If you want to add a new source # file to this component. This file merely indirects to the real make file # that is shared by all the driver components of the Windows NT DDK #!INCLUDE $(NTMAKEENV)/makefile.def |
正如它所述,不要編輯這個檔案。事實上每個WDM程式所需要的makefile的內容都是一樣的,也就是說,我們只需要簡單地copy一個makefile到新的項目中就可以了
2、Sources
TARGETNAME=HelloWDM //編譯出來的驅動程式的名稱 TARGETTYPE=DRIVER //編譯的類型是驅動程式編譯 DRIVERTYPE=WDM //驅動程式的類型是WDM驅動程式 TARGETPATH=OBJ //產生的檔案存放在OBJ目錄中INCLUDES=$(BASEDIR)/inc;/ //這是需要引入的標頭檔 $(BASEDIR)/inc/ddk;/ TARGETLIBS=$(BASEDIR)/lib/*/free/usbd.lib/ //這是需要引入的庫檔案 SOURCES=HelloWDM.cpp/ //這是源碼檔案 |
這個檔案指定了驅動程式目標名是HelloWDM.sys,是一個WDM驅動程式,產生的檔案存放在OBJ目錄中。值得注意的是,“=”前後不能有空格,否則編譯的時候會出錯。
·開始編譯
娃哈哈,前面羅羅嗦嗦講了一大堆,現在終於到重點了。WDM程式的編譯過程比較特殊,它不是在VC裡面按F7來編譯的(儘管你可以通過設定來達到這一目的),而是通過一個DDK工具 + 生產力build來完成。下面我們來講講具體步驟:
1、“Debug”版的產生
首先,我們假設你的原始碼放在D:/HelloWDM裡面。請跟著以下步驟:
“開始”->“程式”->“Development Kits”->“Windows 2000 DDK”->“Checked Build Environment”
螢幕將顯示:(有“斷行符號”的那行是需要讀者你親自打進去的)
| New or updated MSVC detected. Updating DDK environment…. Setting environment for using Microsoft Visual C++ tools. Starting dirs creation…Completed. D:/NTDDK>cd/HelloWDM (斷行符號) D:/HelloWDM>build (斷行符號) |
如果原始碼沒有錯誤的話,產生的HelloWDM.sys將存放在objchk/i386目錄中。
2、“Release”版的產生
請跟著以下步驟:
“開始”->“程式”->“Development Kits”->“Windows 2000 DDK”->“Free Build Environment”
隨後的步驟跟“Debug”版相同,不同的是產生的HelloWDM.sys將存放在objfre/i386目錄中。