2010年4月10日 星期六

驅動程式的環境設定

俗語說的好「工欲善其事,並先利其器。」因此,在我們在開發驅動程式之前,要先把開發工具準備好。然而開發驅動程式需要的工具有那些呢?

  •  Microsoft Windows Driver Kit

  •  Text Edit or Microsoft Visual C++

為何大部分介紹開發驅動程式的書都將 VC++列為工具之一呢?其實如果只是單純開發驅動程式是不需要,但是安裝、反安裝、啟動、停止驅動程式就需要用到 VC++的函式庫,因此大部分介紹驅動程式的都將 VC++列為開發程動程式的工具之一。
開發 Windows XP SP2 的驅動程式建使用 Windows Driver Kit 來組譯驅動程式碼才能正常的載入及啟動使用者的驅動程式。倘未使用 VC++ 2005 開發在Windows Vista 應用程式的話,只需在資源檔加入下列程式碼,即可讓執行的應用程式由使用者權限提升到 Administrator 的權限。














  • 準備好開發驅動工具之後,接下來就是如何安裝軟體及環境設定,別擔心,只需要順著以下的步驟,便能輕鬆完成開發驅動程式的工具及環境設定。

    1.1 WDK 的安裝過程
    安裝組譯驅動程式的 Microsoft Windows Driver Kit ,執行 setup.exe 即可。
    安裝完 Microsoft Windows Driver Kit 在 Windows Program Menu 中即可看到已經設定的驅動程式的組譯環境設定,只使用 text Edit 編輯驅動程式再利用組譯程式供的組譯環境即可產生開發中版本或者正式版的驅動程式。























    假 如 是 開 發 DEBUG version , 執 行 -> Windows Driver Kits -> WDK7 600.16385.0 -> Build Environments -> Window 7 -> x86 Checked Build Environment

















    執行組譯程式 Build –cZ 或者 bcz
















    1.2 VC++ 環境設定

    當然,如果使用 VC++來編輯驅動程式和使用 BATCH File 來組譯驅動程式的話,需要做一些環境上的設定,只需要隨著以下的步驟及可完成。
    1. 設定 DDK BOOT 目錄 –
    選擇『我的電腦』按右鍵選擇『內容』即可看到【系統內容】的視窗,選擇『進階』的選單,可以看到三個子選單、【環境變數】及【錯誤報告】,選擇『環境變數』,即可看到【xxx 的使用者變數】及【系統變數】,選擇【系統變數】 選 單 下 的 『 新 增 』 新 增 變 數 ( 變 數 名 稱 =DDKROOT 變 數 值,=C:/WINDDK/3790.1830)




















    2.建立 MyDriver 的目錄存放 Driver 的原始程式碼
    3.建立組譯驅動程式的批次檔
    Build.bat %1 %2 %3 %4
    %1 – 放驅動程式程式碼的目錄
    %2 – 要組譯的作業系統
    %3 – 要建立正式版或開發中版本
    %4 – 其他的參數和組譯程式相關
















    4.環境設定
    在 VC++應用程式中,選擇應用程式中,選擇『TOOL』『選單中的『Options』 【Options】,的 畫 面 中 , 在 『 Projects 』 選 項 的 『 C++ Directories 』 建 立 新 的 目 錄(E:/MyDriver)

















    5.建立一個驅動程式的專案建立一個驅動程式的專案
    在 VC++的應用程式中,選擇『的應用程式中,選擇『FILE』選單中的『NEW』的選項,在選單』的選項,在選單中選擇『Project...』子選項,即可看到【New Project】畫面,在『Project Types』選單中,選擇(General),而在『 Templates 』選單中,選擇
    (Makefile Project)輸入 PROJECT Name 和 Location 最後按下,,『OK』進行下一步。
















    在【Makefile Application Wizard】畫面的『Application Settings』選單,輸入(Build command line = build E: MyDriver WXP chk -cZ)和( Output = sample1.sys),最後按下『Finish』即完成專案的建立。
















    6.加入 makefile 和 source
    Makefile.def 是用來的告訴 NAMKE.EXE 要如何組譯驅動程式的參數,然而 DDK 早已當我們建立好一般驅動程式可用的 Makefile.def,所以我們只需要將 makefile.def 箝入 makefile 即可。














    Source 是用來宣告驅動程式包含了那些檔案及組譯後檔案種類和名稱,因為 DDK 除了可以組譯驅動程式之外也可以組譯應用程式,所以需要指定組譯後的檔案種類。

    TARGETNAME = 驅動程式的名稱
    TARGETPATH = 驅動程式的目錄,Default=C:/WINDDK/BIN
    SOURCES = 驅動程式的來源
    USE_MAPSYM=1 產生驅動程式的符號給 Microsoft Kernel Debug 做為偵錯用














    7.加入驅動程式的程式碼及版本控制
    在 VC++專案畫面的『Solution Explorer』選單中,加入程式碼

















    將滑鼠移到在『Resource Files』選項中,按右鍵選擇『Add』選項,在選單中選擇『Add New Item』 【Add New Item】。在的畫面中選擇『Resource File(.rc)』,然後輸入(Name=Sample1)最後按下『OPEN』進行下一步。


















    選擇『Sample1.rc』,按右鍵選擇『Add Resource ...』 【Add Resource】,在的畫面中選擇『Version』,按下『New』接著下一步。
















    填入驅動程式的版本及相關的資訊 『Build』,選單中 選擇, 『Build Solution』或 者 『 Rebuild Solution 』, 即 完 成 了 我 們 的 第 一 個 驅 動 程 式「sample1.sys」。

















    1.3 驅動程式的組譯過程
    完成驅動程式的環境設定後,驅動程式是如何組譯而成的呢?而 sample1驅動程式中的 source 和 makefile 又辦演什麼角色呢?















  • DIRS-是用來告知 BUILD UTILITY 有那些磁碟目錄需要被組譯,因此,如果我們的驅動程式落於不同的磁碟目錄,除了,原本的 SOURCE 檔案之外,記得還要加入 DIRS 來告知 NMAKE.EXE。
  • SOURCE-是用來告知 NMAKE.EXE 有那些檔案需要被組譯,
  • MAKEFILE-是將組譯驅動所需要的組譯參數傳給 NMAKE.EXE。即為MAKEFILE.DEF 檔案。
  • MAKE.EXE-參考 DIRS、SOURCE 及 MAKEFILE 來設定組譯驅動程式的環境,完成後,再啟動組譯程式開始組譯驅動程式。
  • .RC-用來宣告驅動程式的版本
  • .C 及.CPP-驅動程式的驅式碼
  • EVENT LOG-如果驅動程式會在系統事件中紀錄事件的話,可以加入EVENT LOG 的宣告來紀錄事件。
  • COMPLIER and LINKER-組譯驅動程式的程式碼變作系統的驅動程式

    驅動程式碼經過 nmake.exe、complier.exe 及 linker.exe 之後,驅動程式碼就變成作業系統的驅動程式。

    1.4 驅動程式的開發工具

    驅動程式設計開發上有一些非常有用的輔助工具,當然這些軟體也會隨著時代或需要而做修改,所以驅動程式設計者需要常常上網去取得最新的版本,或許可以縮短開發程式的時間。
  • Microsoft WinDbg – 由 Microsoft 所開發的,是驅動程式除錯最強的工具,可以做單機除錯或者除錯另一台電腦。一般驅動程式設計者,都是用來除錯另一台電腦 WinDbg 提供 COM PORT IEEE1394 USB 2.0,、、PORT 等方法連接另一台電腦來除錯。其中 COM PORT 和 IEEE1394才有支援在 Windows Easy Step 設除錯點的功能,但是現在的電腦已經很難找到有支援 COM PORT 或 IEEE1394 只能使用 USB 2.0 PORT來除錯,只是注意 USB 2.0 除錯只支援 Root Hub 的 PORT 0。
  • VMwave Player – 為了方便除錯,一般的驅動程式開發者,都會使用虛擬電腦來除錯,現今較多人使用的是 VMware Player,所以學會如何使用 WinDbg 配合 VMware Player 是必修的課程。


1.4.1 VMware Player
使用『Create a New Virtual Machine』建立一個新的虛擬電腦用來除錯。



然後,在虛擬電腦上新增一個『Serrial Port』並且設定如下:




















就可以使用虛擬電腦的虛擬 COM PORT 可以和 WinDbg 連線。

1.4.2 電腦設到除錯模式

在 Windows 7 上,執行『MSCONFIG.EXE』,選到『開機』的選項。
































選擇『進階選項』,選擇『偵錯』。
如果使用虛擬電腦的 COM PORT,就不需設傳輸速率。
如果使用實際的 COM PORT,需設傳輸速率。
如果使用 IEEE 1394,需要設定頻道
如果使用 USB 2.0,需要設定 USB 目標名稱




























重新開機就可以使用 WinDbg 來除錯了。

1.4.3 WinDbg

如果使用虛擬電腦連結 WinDbg 的情形下,虛擬電腦開到 Windows 7畫面出現時,就會停下來了。此時,使用以下的指令開啟 WinDbg。
『windbg -b -k com:pipe,port=\\.\pipe\com_1,resets=0』



載入驅動程式的程式碼

選擇【File】->【Source File Path】->【Browse…】找到程式碼存放的目錄,可以直接在程式碼上設偵錯點。

















沒有留言:

張貼留言