NT DDK的安裝以及設備驅動程序的編譯

作者:程序員客棧

提交者: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).
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章