csdn裡只有提問和回答,個人覺得只有這個還不夠,還需要人來分享知識,所以今天為了推廣自己寫的乙個vc6小外掛程式,順便分享一下用vc6直接編譯驅動程式的心得給需要的人。全文如下:
《vc6編譯驅動的方法(含32和64位)》
*****=
- *****==
vc6只是乙個ide,可以方便的呼叫編譯器,鏈結器,標頭檔案,庫檔案,如果編輯和編譯驅動能整合在一起,這樣可以提高開發效率。
對於普通的win32應用程式,vc6已經預設支援了,而對於驅動程式沒有設定好的工程嚮導。其實驅動程式也就是乙個sys, 是通過c語言寫成,所以編譯它理論上沒有問題,只是在實際操作上有點麻煩。
下面就來說明一下各種平台編譯sys驅動的方法(包括64位平台)
先看32位版本驅動的編譯方法,首先你得準備一些編譯必備工具:
1.要安裝
vc62.安裝ddk(裝哪個呢?這個問題其實很簡單的,只是很多人不明白,裝
ddk當然是越新越好了,越新支援的平台越多,像2000ddk你是絕對編譯不出來64位sys的,因為它沒帶64 位的庫和編譯器,所以我們選擇現在最比較新的,2003ddk(wdk也可以),支援的平台很多,amd64,ia64,2000,xp,2003都支援)。
好了,這下我們的系統已經安裝了最強的開發工具vc6,最新ddk,在vc裡編譯各個平台的驅動都沒有問題了!
開始,假設我們的ddk裝在c:\2003ddk目錄,那麼我會發現裡面有很多驅動的例子(安裝的時候全選),我們選擇c:\2003ddk\src \wdm\usb\bulkusb作為我們的實驗範例。
第一步:
finish.
第二步:
將c:\2003ddk\src\wdm\usb\bulkusb\sys(這裡是驅動**,另乙個exe裡是使用者程式,不管它)裡的所有檔案拷貝到bulkusb工程目錄下。然後把.h,.c,.rc 匯入到vc裡對應的目錄裡面去。
第三步:
然後就是開始設定工程選項,把這些**編譯成sys了。要編譯我們需要ddk,所以先要在vc的tool->options->directories裡設定一些路徑給vc呼叫(設定基本原則:要
保證下面所有設定的路徑排在前面!)。
設定include路徑:
c:\2003ddk\inc
c:\2003ddk\inc\crt
c:\2003ddk\inc\wnet
c:\2003ddk\inc\ddk\wnet
c:\2003ddk\inc\ddk\wdm\wnet
要按這樣的順序新增。注意這裡的wnet目錄了嗎?這就是2003最新標頭檔案,其實選擇wxp或者w2k目錄也是可以的,只是wnet裡的標頭檔案最全,因為系統不斷進步,有些新的api只有新的標頭檔案裡才有定義。當然最好是選擇對應的標頭檔案來編譯對應系統的驅動,但是我試過用wnet編譯的驅動在2000 下也能用,因為我們一般用不到那些新新增的api.。
設定lib路徑:
c:\2003ddk\lib
c:\2003ddk\lib\crt\i386
c:\2003ddk\lib\wnet\i386 //wnet
道理和上面一樣
設定executable file:
c:\2003ddk\bin\x86 //這就是編譯器的路徑,包含cl.exe,link.exe的目錄,由於我們要編譯32位驅動,所以把這個新增進去,放在第一項。
總的來說,只要設定好include,lib
和編譯器,編譯什麼檔案都沒問題的,你也可以自己嘗試安裝最新的2003sdk,編譯win32應用程式成64 位。
第四步:
開始進入工程設定,先設定c/c++,在preprocesser definitions裡輸入如下字串:
release
下輸入:
_x86_=1,i386=1,std_call,win32=100,_win32_winnt=0x0501,winver=0x0501,ndebug
debug 下輸入:
_x86_=1,i386=1,std_call,win32=100,_win32_winnt=0x0501,winver=0x0501,_debug
在code generation裡的calling convention用__stdcall,(這是驅動程式必須的)
debug
版有個特殊編譯選項/gz (注意是大寫的,小寫的不要刪!)刪掉,否則有鏈結錯誤,chkesp鏈結不上什麼的。
第五步:
開始設定link頁,將輸出檔名改為sys副檔名,
在general的object/library modules,填入驅動所呼叫到的幾個
lib:
ntoskrnl.lib hal.lib usbd.lib wmilib.lib。
然後進入output在entry-point symbol:
填driverentry
下面就是往project options手動增加一些鏈結選項,複製如下進去:
/machine:ix86 /driver /subsystem:native /section:init,d /ignore:4198,4010,4037,4039,4065,4070,4078,4087,4089,4221
刪除如下選項:
/subsystem:windows
/machine
代表目標機器型別,/driver代表驅動,/subsystem:native 也是代表驅動。
ok,大功告成,我們可以編譯32位驅動了!
那麼如果我們要編譯64位驅動呢?這裡大家注意一下,64位有兩種,乙個是amd64,乙個是ia64,要選定你的目標平台,目前amd64平台最為流行
.其實編譯成64 位也很簡單,只要把32位的配置稍微改一下就行了,我們以編譯amd64位驅動為例(你會複製vc的工程configurations吧,把32位的relase,debug各複製乙份改名為releaseamd64和debugamd64,然後在複製品的基礎上修改):
1.要修改兩個lib路徑:
c:\2003ddk\lib\crt\i386
改為:c:\2003ddk\lib \crt\amd64
c:\2003ddk\lib\wnet\i386 改為:c:\2003ddk\lib\wnet\amd64
2. 修改編譯器路徑:
c:\2003ddk\bin\x86
改為:c:\2003ddk\bin\win64\x86\amd64
c:\2003ddk\bin\x86 //
這句也要存在
3.修改c/c++裡的preprocesser definitions為:
releaseamd64
下輸入
用VC6 0編譯驅動程式的工程設定方法
用vc6.0編譯驅動程式的工程設定方法 vc6.0編譯驅動程式的工程設定 一 編譯nt式驅動 1 建立乙個win32應用程式工程。2 修改工程屬性。project setting c c 中的project options內容替換成 nologo gz mld w3 wx z7 od d win32...
配置VC 6 0下驅動程式編譯環境的步驟
作業系統 vmware 6.0 windows xp sp1 sp2 ddk版本 windows ddk 3790.1830 編譯環境 microsoft visual c 6.0 with sp6 2 build configurations去掉debug和release,新增mydriver c...
驅動WDK7600在VC6 0下的編譯開發配置環境
1.安裝wdk7600和vc6.0 2.vc6.0設定include lib executable目錄 include包含部分 lib連線庫包含部分 executable包含部分 c c 選項的option填寫 debug nologo gz mt w3 wx z7 od d x86 1 d i38...