WIN10 + VS2015 + WDK10 + SDK10 + VM虛擬機驅動開發調試環境搭建

1、準備工做

1 系統環境:Win10系統

2 開發工具:VS2015

3 驅動開發工具:WDK10

 Windows SDK :SDK10(VS2015中能夠勾選安裝)

5 VM虛擬機     : VMware WorkStation 12



win10 64位下驅動安裝工具下載地址(此工具只在上述環境下測試過,請在虛擬機中測試過再在真實環境下安裝不然藍屏本身負責)



注意事項:
關閉 、主機 客戶機 防火牆 、 互相ping都能ping通。


2、具體操做步驟


工具安裝就不說了,不會的百度一下。只說一下一些關鍵的地方
 

一、安裝好虛擬機後,給虛擬機增長一個串口設備。具體操做見圖:






完成配置後虛擬機設備配置就多了一個串行端口的設備。由於打印機用了端口1。因此設備裏面顯示的是串行端口(若是想設置成端口1,把打印機設備刪了在添加串口設備)。

二、配置虛擬機系統爲調試模式


     以管理員身份,在虛擬機命令行模式下運行以下2個命令開啓。

     bcdedit /debug on
      bcdedit /dbgsettings serial debugport:n baudrate:115200

      where  n  is the number of a COM port on the virtual machine.(n時虛擬機的一個COM端口號。就是設備顯示的串行端口2,n就是端口2)。


三、把WDK10的虛擬機調試驅動拷貝到虛擬機中安裝。






由於VS2015能夠調試x86 x64兩種驅動因此兩個都拷貝到虛擬機安裝。

四、VS2015開發工具配置

在VS2015的菜單欄點擊DRIVER--TEST--CONFIGURE DEVICES會報錯估計是VS2015的Bug求大神指點。如圖

 


這裏不行咱們換個地方配置,從工程屬性裏面進行配置。右鍵工程屬性配置從這也能夠進行測試設備的配置:安全



配置界面,下面兩個選項第一項由VS2015幫咱們建立一個WDKuser測試帳戶,自動打開測試模式等。第二個是使用咱們本身配置的參數。因爲上面咱們已經配置了串口參數 、設置了調試模式因此咱們選擇第二個就好了。ide



以下配置在內核模式中,選擇串口、配置好波特率、勾上2個選項、管道名稱、端口號。函數




出現上述紅色框字樣則說明配置已經成功了。(不要開啓全局代理軟件,不然會出現鏈接不上的問題)。工具



五、使用工具安裝調試64位驅動

網上下的下面的驅動安裝軟件貌似64位的都用不了。開發工具



本身動手豐衣足食大笑,本身在網上弄了個源碼改了下弄成能夠加載64位的驅動的版本了。測試



使用DebugView打印內核調試信息是開發驅動的很是重要的手段,但DebugView默認在WINDOWS 10下卻沒法獲取內核的調試日誌,驅動調用KdPint/DbgPrint等的打印結果是沒法被DebugView給捕捉到的。設置方法以下(複製下面的代碼到txt文件。改後綴爲.reg後執行,而後重啓電腦):spa

 

[cpp]  view plain  copy
 
  在CODE上查看代碼片 派生到個人代碼片
  1. Windows Registry Editor Version 5.00  
  2.   
  3. [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]  
  4. "DEFAULT"=dword:0000000f  

 


還有本身編譯出來的驅動要使用編譯的Debug版原本測試,Release版本是不會執行KdPrint/DbgPint函數的。.net

下面是在Win10 64位的虛擬機中用此安裝程序,加載64位的驅動以及用DebugView查看驅動打印消息的截圖結果。命令行



六、在VS2015中下斷點進行調試

若是你第五部已經完成了,而且在DebugView中已經可以輸出調試的打印信息了,辣麼騷年你已經離成功只有一部之遙了大笑debug


建立一個驅動工程,WDK10提供的模板中根本沒有提供NT驅動模板,咱們如何建立NT驅動呢?
解決:其實雖然沒有提供NT模板,可是咱們能夠創建WDM空模板工程,而後再本身添加文件,編譯,獲得的也就是NT驅動了。


驅動工程中會幫你創建一個inf文件,NT是使用不到的,能夠直接刪除。咱們直接添加一個MyDriver.c

在文件中添加測試代碼。

 

[cpp]  view plain  copy
 
  在CODE上查看代碼片 派生到個人代碼片
  1. #include <ntifs.h>   
  2.   
  3. VOID DriverUnload(PDRIVER_OBJECT objDriver)  
  4. {  
  5.     // 避免編譯器關於未引用參數的警告  
  6.     UNREFERENCED_PARAMETER(objDriver);  
  7.   
  8.     // 什麼也不作,只打印一行字符串  
  9.     KdPrint(("My Dirver is Ending..."));  
  10. }  
  11.   
  12. NTSTATUS DriverEntry(PDRIVER_OBJECT objDriver, PUNICODE_STRING strRegPath)  
  13. {  
  14.     // 避免編譯器關於未引用參數的警告  
  15.     UNREFERENCED_PARAMETER(strRegPath);  
  16.   
  17.     // 打印一行字符串,並註冊驅動卸載函數,以便於驅動卸載  
  18.     KdPrint(("My  Dirver Is Starting!\r\n"));  
  19.   
  20.     objDriver->DriverUnload = DriverUnload;  
  21.   
  22.     return STATUS_SUCCESS;  
  23. }  


編譯,報錯,沒有關係,這些都是由於安全警告等級過高了,咱們能夠下降編譯器警告等級的方式解決:

 



執行編譯,編譯的時候選擇Debug模式,X64的選項。編譯成功後,按照上面的第五步進行基本測試能夠。


不知不覺感受已經寫了好長了。。。。奮鬥抽口煙壓壓精。好吧我不抽菸的。。。。。繼續
若是上述的驅動成功編譯出來了。辣麼如今咱們開始附加虛擬機的內核進行調試了。
首先把虛擬機的系統內核附加到VS2015,具體步驟見下圖:


選中內核調試模式、選本身配置的那個電腦、選中下面列表中內核。見下圖


點擊附加,而後出現下圖界面,點擊一下所有中斷。


而後系統就斷下了,虛擬機的系統咱們鼠標已經點不了,如今系統處於掛起狀態了。見下圖


如今咱們能夠到源代碼中下斷點了。我就隨便下個斷點了,見圖:


而後咱們在下面的Debugger Immediate Winddow窗口的 Kd>  一行輸入命令   g     讓系統運行起來。這樣虛擬機中的系統又能夠點擊了。

最後一步了。使用咱們剛剛創建的驅動工程編譯出來的.sys驅動文件拷貝到虛擬機中。用第五步的工具進行安裝、啓動。啓動的時候自動觸發VS2015中的下的斷點。至此能夠像平時咱們調試程序同樣進行單步調試了。
注意事項:一、必定要拷貝Debug版本的進行調試。
                  二、拷貝到虛擬機中的.sys文件必定要是你源碼編譯出來的。若是改動了源碼後必定要從新拷貝一份新的驅動文件到虛擬機中調試。不然沒法觸發斷點的。


3、結束語

       本人也是剛開始研究驅動開發,上述若是有什麼不對的請你們指點、共同交流。至此整個調試過程已經結束。能夠開始過遊戲驅動保護開發了。感謝你們支持。。。。大笑

原文地址: http://blog.csdn.net/qing666888/article/details/50858272
相關文章
相關標籤/搜索