WDM驱动程序入门(3)——安装步骤
WDM驅(qū)動(dòng)程序入門(3)——安裝步驟
DDK分為98 DDK和2000 DDK兩種,它們工作起來(lái)是大同小異的,不過(guò)有些驅(qū)動(dòng)程序只能在2000 DDK中使用。由于Win98注定是一種即將被淘汰的操作系統(tǒng)了,所以我也不打算介紹如何在98 DDK中進(jìn)行編譯,以下的所有內(nèi)容都是針對(duì)2000 DDK的。
·準(zhǔn)備工作
1、確定你已經(jīng)安裝了Visual C++
2、安裝2000 DDK
3、安裝2000 DDK成功后,在“開始”->“程序”里應(yīng)該有“Development Kits”->“Windows 2000 DDK”的項(xiàng)目。
(注意一定要先安裝好VC,然后才安裝DDK,這個(gè)順序決不能顛倒!!)
4、保證DDKROOT環(huán)境變量設(shè)置為Windows 2000 DDK的基目錄,如果不是的話,請(qǐng)?jiān)诳刂泼姘濉跋到y(tǒng)”屬性的“高級(jí)”標(biāo)簽環(huán)境變量編輯器中設(shè)置好這個(gè)環(huán)境變量。
·編寫必需的文件
編譯WDM程序的時(shí)候,有兩個(gè)文件是必須要有的,它們是:
1、makefile
(這個(gè)是什么啊?你可能會(huì)問(wèn)。)對(duì)于比較年輕的程序員來(lái)說(shuō),有可能沒有見過(guò)這個(gè)文件吧。其實(shí)在VC這些IDE出現(xiàn)之前,我們都必須使用makefile來(lái)確定項(xiàng)目中哪些文件需要重新編譯,現(xiàn)在的IDE都把這個(gè)工作自動(dòng)做好了。(Well……其實(shí)這樣也好。)
我們要做的工作很簡(jiǎn)單,就是提供這樣一個(gè)文件,它的內(nèi)容是:
#
# 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
?
正如它所述,不要編輯這個(gè)文件。事實(shí)上每個(gè)WDM程序所需要的makefile的內(nèi)容都是一樣的,也就是說(shuō),我們只需要簡(jiǎn)單地copy一個(gè)makefile到新的項(xiàng)目中就可以了。(呵呵,是不是很方便呢?)
2、Sources
TARGETNAME=HelloWDM
TARGETTYPE=DRIVER
DRIVERTYPE=WDM
TARGETPATH=OBJ
INCLUDES=$(BASEDIR)/inc;/
???????? $(BASEDIR)/inc/ddk;/
TARGETLIBS=$(BASEDIR)/lib/*/free/usbd.lib/
SOURCES=HelloWDM.cpp/
?
這個(gè)文件指定了驅(qū)動(dòng)程序目標(biāo)名是HelloWDM.sys,是一個(gè)WDM驅(qū)動(dòng)程序,生成的文件存放在OBJ目錄中。值得注意的是,“=”前后不能有空格,否則編譯的時(shí)候會(huì)出錯(cuò)。
·開始編譯
娃哈哈,前面羅羅嗦嗦講了一大堆,現(xiàn)在終于到重點(diǎn)了。WDM程序的編譯過(guò)程比較特殊,它不是在VC里面按F7來(lái)編譯的(盡管你可以通過(guò)設(shè)置來(lái)達(dá)到這一目的),而是通過(guò)一個(gè)DDK實(shí)用工具build來(lái)完成。下面我們來(lái)講講具體步驟:
1、“Debug”版的生成
首先,我們假設(shè)你的源代碼放在D:/HelloWDM里面。請(qǐng)跟著以下步驟:
“開始”->“程序”->“Development Kits”->“Windows 2000 DDK”->“Checked Build Environment”
屏幕將顯示:(有“回車”的那行是需要讀者你親自打進(jìn)去的)
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??? (回車)
?
如果源代碼沒有錯(cuò)誤的話,生成的HelloWDM.sys將存放在objchk/i386目錄中。
2、“Release”版的生成
請(qǐng)跟著以下步驟:
“開始”->“程序”->“Development Kits”->“Windows 2000 DDK”->“Free Build Environment”
隨后的步驟跟“Debug”版相同,不同的是生成的HelloWDM.sys將存放在objfre/i386目錄中。
·安裝
如果前面的編譯過(guò)程沒有錯(cuò)誤的話,現(xiàn)在我們應(yīng)該已經(jīng)得到了一個(gè)HelloWDM.sys文件,假設(shè)它是放在D:/HelloWDM/objfre/i386中。
我們還要干什么呢?…………對(duì)啦,就是安裝它!不然辛辛苦苦編譯出來(lái)有什么用?
安裝WDM驅(qū)動(dòng)程序可以用兩種方法,一種是利用注冊(cè)表,還有一種是利用INF文件。我們一般是采用INF文件(這是微軟推薦的)。INF文件可以在 WINNT/INF 目錄中找到很多。為了順利安裝,我在這里先給出 HelloWDM 所需要的 HelloWDM.INF 文件:
;; The Win2K DDK documentation contains an excellent INF reference.
;--------- Version Section ---------------------------------------------------
[Version]
Signature="$CHICAGO$"
Provider=LC_Device
DriverVer=8/21/2002,3.0.0.3
; If device fits one of the standard classes, use the name and GUID here,
; otherwise create your own device class and GUID as this example shows.
Class=Unknown
ClassGUID={ff646f80-8def-11d2-9449-00105a075f6b}
;--------- SourceDiskNames and SourceDiskFiles Section -----------------------
; These sections identify source disks and files for installation. They are
; shown here as an example, but commented out.
[SourceDisksNames]
1 = "HelloWDM",Disk1,,
[SourceDisksFiles]
HelloWDM.sys = 1,objfre/i386,
;--------- ClassInstall/ClassInstall32 Section -------------------------------
; Not necessary if using a standard class
; 9X Style
[ClassInstall]
Addreg=Class_AddReg
; NT Style
[ClassInstall32]
Addreg=Class_AddReg
[Class_AddReg]
HKR,,,,%DeviceClassName%
HKR,,Icon,,"-5"
;--------- DestinationDirs Section -------------------------------------------
[DestinationDirs]
YouMark_Files_Driver = 10,System32/Drivers
;--------- Manufacturer and Models Sections ----------------------------------
[Manufacturer]
%MfgName%=Mfg0
[Mfg0]
; PCI hardware Ids use the form
; PCI/VEN_aaaa&DEV_bbbb&SUBSYS_cccccccc&REV_dd
;改成你自己的ID
%DeviceDesc%=YouMark_DDI, PCI/VEN_9999&DEV_9999
;---------- DDInstall Sections -----------------------------------------------
; --------- Windows 9X -----------------
; Experimentation has shown that DDInstall root names greater than 19 characters
; cause problems in Windows 98
[YouMark_DDI]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_9X_AddReg
[YouMark_9X_AddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,HelloWDM.sys
HKR, "Parameters", "BreakOnEntry", 0x00010001, 0
; --------- Windows NT -----------------
[YouMark_DDI.NT]
CopyFiles=YouMark_Files_Driver
AddReg=YouMark_NT_AddReg
[YouMark_DDI.NT.Services]
Addservice = HelloWDM, 0x00000002, YouMark_AddService
[YouMark_AddService]
DisplayName = %SvcDesc%
ServiceType = 1 ; SERVICE_KERNEL_DRIVER
StartType = 3 ; SERVICE_DEMAND_START
ErrorControl = 1 ; SERVICE_ERROR_NORMAL
ServiceBinary = %10%/System32/Drivers/HelloWDM.sys
[YouMark_NT_AddReg]
HKLM, "System/CurrentControlSet/Services/HelloWDM/Parameters",/
"BreakOnEntry", 0x00010001, 0
; --------- Files (common) -------------
[YouMark_Files_Driver]
HelloWDM.sys
;--------- Strings Section ---------------------------------------------------
[Strings]
ProviderName="Flying L Co.,Ltd."
MfgName="LC Soft"
DeviceDesc="Hello World WDM!"
DeviceClassName="LC_Device"
SvcDesc="???"
?
注意它可以同時(shí)在Win98或者Win2000中使用(系統(tǒng)會(huì)通過(guò)這個(gè)INF文件里面的字段名稱,自動(dòng)選擇適合當(dāng)前系統(tǒng)的安裝方法的)。由于INF文件的各個(gè)字段含義比較復(fù)雜,限于篇幅,我在這里就不詳細(xì)講解了,請(qǐng)讀者自行參閱有關(guān)的文章或者書籍。
準(zhǔn)備好這個(gè) HelloWDM.INF 文件后,讓我們打開控制面板,雙擊“添加/刪除硬件”,選擇“添加/排除設(shè)備故障”->“添加新設(shè)備”->“否,我想從列表選擇硬件”->“其它設(shè)備”->“從磁盤安裝”,選擇 HelloWDM.INF 所在的路徑,然后安裝。
當(dāng)安裝完成后,系統(tǒng)就會(huì)添加上你寫好的驅(qū)動(dòng)程序了。(可以在“設(shè)備管理器”中查看到)。然后重啟電腦,這個(gè)驅(qū)動(dòng)程序就投入使用啦。
總結(jié)
以上是生活随笔為你收集整理的WDM驱动程序入门(3)——安装步骤的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 3DSlicer30:VS-Qt5VSa
- 下一篇: 3DSlicer31:结构的实例分析IG