提交者:eastvc 發佈日期:2003-10-19 20:01:54
原文出處:http://www.driverdevelop.com/
經常有人問及如何安裝DDK,如何編譯第一個設備驅動程序以及如何消除掉編譯驅動程序
時出現的大量錯誤信息. 其實, DDK的安裝和驅動程序的編譯是很簡單的. 爲了編譯驅動程
序, 你必須首先打開一個DOS窗口, 並正確設置好所需的全部環境變量. 本文假定你將要
安裝NT DDK 4.0, 並且在安裝NT DDK之前,VC已經被安裝在 C:/vcdev/vc/bin/目錄下(儘量使
用短的VC路徑名稱,不要用長的路徑命名格式).
可按如下方法安裝NT DDK( 其實就是進行一些環境變量的設置), NT DDK的安裝並不需要
SDK--如果你已經安裝好了VC的話.
1. 從微軟或其他站點下載NT
DDK(http://download.microsoft.com/download/winntwks40/Install/1998/NT4/EN-US/nt4ddk.zip),
將其安裝在硬盤上(本文假定DDK安裝目錄爲c:/ddk).
2. 用任何文本編輯器打開c:/ddk/bin/目錄下的setenv.bat文件, 在此文件的第三行(不含空白
行)之後加入如下一行並保存: call C:/vcdev/vc/bin/vcvars32.bat, 具體示例:
@echo off
if "%1"=="" goto usage
rem This will put the SDK headers & libs first in the search path.
call C:/vcdev/vc/bin/vcvars32.bat
if "%BASEDIR%"=="" goto setbasedir
if NOT "%BASEDIR%"=="%1" goto setbasedir
...
3. 完成步驟1和2之後, 你就可以開始編譯第一個設備驅動程序了(本文假定驅動程序選爲
checked類型): 順次進入Programs->Windows NT DDK(Common)->Checked Build
Enviroment, 出現一個 DOS窗口. 使用cd命令進入c:/ddk/src/general/simple/sys目錄, 鍵入
build -c命令即可編譯, 然後編譯器提示已經成功編譯好 ldunld.sys文件並已將此文件拷到
c:/ddk/lib/i386/checked目錄中. 運行build命令只編譯需要重新編譯的文件, 而build -c命令則
強迫編譯器重新編譯所有的文件.
4.使用cd命令進入c:/ddk/src/general/simple/exe目錄, 在DOS提示符下鍵入NMAKE -f
GETHNDL.MAK 即可在當前目錄下生成Win32 控制檯程序gethndl.exe,此程序用於調用並測
試在第3步中所生成的ldunld.sys設備驅動程序.
5. 從OSR下載OSR driver load(V2.2), 地址如下: http://www.osr.com/files/osrloaderv22.zip, 然
後進行解壓縮, 並將osrloader.exe文件拷貝到c:/ddk/bin 目錄中. 運行osrloader, 在 driver
path中敲入C:/DDK/lib/i386/checked/ldunld.sys (或用Browse選取), 點擊Register Service按鈕,
然後點擊Start service按鈕, 如能順利完成這些步驟, 就意味着 ldunld.sys已經被成功註冊及
加載了.
6. 從OSR下載OSR debug monitor, 地址如下: http://www.osr.com/files/dbgmon_v3.zip, 然後進
行解壓縮, 並將dbggui.exe文件拷貝到c:/ddk/bin 目錄中. 運行dbggui, 選中local mode選項.
7. 切換到DOS 窗口, 轉入到 c:/ddk/src/general/simple/exe目錄, 運行gethndl, 顯示:
Wow - it really worked!!!. 祝賀你,你已經成功地編譯並運行第一個設備驅動程序了. 此時在
dbggui中也會出現一些KdPrint()提示信息!
8. 在osrloader中先點擊Stop service, 然後再點擊Unregister service即可卸載ldunld.sys.
一些注意事項;
1. 如編譯DDK中的示範程序時編譯器提示缺少哪個文件, 可用Windows或VC的搜索工具先
找到這個文件, 然後將此文件拷入示範程序所在目錄再行編譯. 也可對示範程序目錄中的
Sources文件進行修改以便使所缺失的路徑被包括進來.
2 . 用build命令時出現的一些錯誤或警告信息, 有時可用build -c命令消除掉.
3. 如遇到last line incomplete錯誤,可下載一個叫lastline.exe的工具來解決
(http://grwy.online.ha.cn/dzhang/lastline.exe).
4. 爲了使build能正確運行, 在需被編譯的源文件目錄下面必須有兩個文件: SOURCES和
DIRS, 注意這兩個文件沒有後綴名.
SOURCES的文件格式:
TARGETNAME=drivername , 本參數用於指定生成的設備驅動程序名稱(不需後綴名),所產
生的文件爲drivername.sys.
TARGETPATH=./lib, 本參數用於指定生成的設備驅動程序所存放的路徑. 一般採用./lib.
TARGETTYPE=DRIVER, build能夠生成許多不同的目標對象,設備驅動程序一般選用
DRIVER.
INCLUDES=path1;path2;..., 本參數是可選的, 用於指定其他的#include文件的搜索路徑.
TARGETLIBS=lib1;lib2;..., 本參數是可選的, 用於指定其他的lib庫文件的搜索路徑.
SOURCES=file1.c file2.c ..., 本參數用於指定需被編譯的全部源文件名稱, 後綴名不能省
略,文件名之間用空格分開.
DIRS文件格式:
DIRS文件用於指定在當前目錄下必須創建的子目錄。DIRS文件的內容由一系列用空格分
開的目錄名組成, /可用於表示對上一行的繼續.
DIRS = /
subdir1 /
subdir2 /
subdir3
當前目錄下如果只有DIRS文件而沒有SOURCES, 則表示沒有任何源文件需要編譯,但需在
當前目錄下創建子目錄, 只有SOURCES文件而沒有DIRS則表示有源文件需要編譯但不需
創建子目錄. 二者都有則表示有源文件需要編譯且需創建子目錄.
5. BUILD在編譯時將會在TARGETPATH和當前目錄下創建子目錄或文件. 對於一般的
Intel平臺, 以c:/ddk/src/general/simple/sys爲例說明, 編譯完後Build在sys目錄下創建子目錄
obj/i386/用於存放ldunld.obj. 在c:/ddk/lib/i386/checked保存編譯好的ldunld.sys文件.
6. 如果你將設備驅動程序的類型從checked轉到free, 則第一次編譯源文件的free類型驅動
程序時你必須使用build 的-c選項來編譯.
7. 可以使用regedit或regedit32來在註冊表中加入驅動程序的表項, ldunld.ini的內容:
/registry/machine/system/currentcontrolset/services/Ldunld
Type = REG_DWORD 0x00000001
Start = REG_DWORD 0x00000003
Group = Extended base
ErrorControl = REG_DWORD 0x00000001
運行regini ldunld.ini即可加入相應的註冊表項.
7. 在ddk的src目錄下有許多示範程序可供參考.
8. 經過一些繁瑣的設置,也可以在VC中直接編譯驅動程序
(http://grwy.online.ha.cn/dzhang/insider17.pdf和
http://www.computerworld.com.cn/99/tips/9904/040601_03.asp).