Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驅動開發環境配置

開發Windows驅動,我選擇的環境是Win8.1+VS2013+WDK8.1+VirtualBox。理由如下:

①開發機器和測試機器均安裝Win8.1,其中開發機器安裝的是64位Win8.1,測試機器安裝的是32位Win8.1。爲什麼裝Win8.1?因爲我平時電腦上裝的就是Win8.1,Win10太新,WinXP太老。所以Win7和Win8.1是最合適的,當然以下環境配置,對於Win7和Win8.1來說,幾乎都是一樣的,你完全可以在Win7上按照本文進行配置。測試機器之所以安裝32位系統,是因爲64位系統只能裝64位的驅動,要裝32位的驅動,只能使用32位系統,剛開始學驅動開發,從32位驅動入手比較方便些,而且64位驅動需要簽名才能安裝,否則要讓系統進入驅動測試模式,才能安裝未簽名的64位驅動,而32位的沒有這個限制,未簽名的驅動也能安裝,搞起來更方便。

②爲什麼選擇VisualStudio2013+WDK8.1?其實你可以選擇VS2012+WDK8.0或VS2015+WDK10,其實它們配置下來都區別不大。不過因爲我平時用的就是VS2013,索性就裝了WDK8.1。需要注意的是WDK10可以開發Win10、Win8.1、Win8、Win7(以及對應的服務器版的操作系統)的驅動,WDK8.1可以開發Win8.1、Win8、Win7的驅動(不過實驗證明大部分WDK8.1開發出來的針對Win8.1生成的驅動可以直接安裝到Win10上),WDK7.1可以開發Win7、WinVista、WinXP的驅動。由於WinXP已經淘汰,且WDK7.1無法直接整合到VisualStudio上,故把它Pass掉。

③爲什麼選擇VirtualBox,其實你可以選擇VMware或真機,在配置上也沒有多大的差異,因爲WDK8.0以後的環境配置很簡單,簡單來說就是開發機和測試機都聯網後,在測試機上安裝一個EXE,在開發機的VisualStudio上輸入它的計算機名、用戶名、密碼,然後就OK了。此後在VisualStudio中生成解決方案,它會自動幫你把驅動拷貝到虛擬機上並安裝好。如果要單步調試,也只需配置一下調試串口就行了。所以用什麼都一樣,我之所以用VirtualBox是因爲平時都用它,VirtualBox開源、免費,而且不像VMware那樣搞一大堆啓動項、服務、多個網卡,感覺很乾淨。

配置下來的驅動開發環境大致如下圖(圖盜自MSDN)

測試機器可以是虛擬機,也可以是真機。開發機器和測試機器通過兩條線連接起來,其中一條是網線,有了網線連接,VisualStudio才能在你點擊生成解決方案的時候,把驅動文件拷貝過去並安裝好。但僅有網線,只能進行用戶態程序的調試(用過VS遠程調試功能的都知道),包括UMDF(用戶模式驅動程序),而對於KMDF(內核模式驅動程序),無法僅通過網線來調試,爲什麼呢?因爲內核模式下的驅動程序,在被調試,被中斷時,整個操作系統都是暫停的,自然沒有程序能繼續執行並通過socket把調試數據發到開發機器上。所以爲了調試內核模式驅動程序,還需要在開發機器和測試機器間連接起另一根線來,這根線可以是USB線、1394線或串口線。本文只講串口線的方式,因爲VirtualBox和VMware都支持虛擬串口,用起來很方便。如果測試機器是真機,則需要買條串口線來把它們連起來,淘寶有售,10塊包郵哦!當然,如果測試機是虛擬機,不需要買網線和串口線,因爲虛擬機已經提供了虛擬的線了。
如果要使用USB或1394可以參考MSDN文檔:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439376

步驟一:
先安裝VisualStudio2013,再安裝WDK8.1,這步沒有什麼懸念
WDK下載:https://msdn.microsoft.com/zh-cn/windows/hardware/hh852365

步驟二:在虛擬機中裝好32位的Win8.1系統。並在VirtualBox中配置一下網絡,把網絡連接方式改爲“橋接網卡”,“界面名稱”選擇你的真機上能上網的那塊網卡。
爲什麼要用“橋接網卡”方式來讓虛擬機中的系統聯網,而不用默認的“網絡地址轉換(NAT)”?因爲如果使用“網絡地址轉換(NAT)”的話,對於虛擬機來說,你的真機相當於路由器,虛擬機相當於你的子局域網下的一臺機器。也就是說你的真機和虛擬機並不在一個局域網中,你們在“網上鄰居”中看不到彼此,那樣的話你通過計算機名無法訪問到虛擬機,那樣搞起來會比較麻煩。所以使用“橋接網卡”方式。VMware中也有類似的設置。如果測試機器也是真機的話,只要開發機器和測試機器都連到同一個路由器上就沒有問題了。

然後配置一下串口,如下圖所示,啓用串口,端口編號COM1,端口模式“主機管道”,路徑/地址(即管道名字)設爲“\.\pipe\com_1”。
端口模式裏面的其它模式是什麼意思呢?簡單來說:
“未連接”:效果就是對虛擬機來說,它的電腦主板上有串口,但是什麼都沒插。
“主機管道”:就是把虛擬機的串口映射到宿主機(我們的真機)的命名管道上,命名管道是Windows系統提供的一種進程間通信的方式,用過命名管道的程序員一定對上面這個“\.\pipe\”很熟悉。
“主機設備”:就是把虛擬機的串口映射到宿主機的真實串口上,這時,我們真機的主板上的串口就不屬於我們了,變成了虛擬機的私有財產去了,當我們在真機的窗口上插個設備上去後,實際上是插到了虛擬機裏。
“裸文件”:貌似是把虛擬機的串口映射到一個宿主機中的一個文件句柄上?然後用ReadFile和WriteFile讀寫?沒用過
“TCP”:把虛擬機的串口映射到宿主機的socket套接字上
當然這裏只是科普一下,實際操作選“主機管道”並輸入“\.\pipe\com_1”就行了,其中的“com_1”是管道名,自己取的,你可以自己取一個不一樣的。

VMware的設置如下,首先把虛擬打印機移除掉,因爲它佔用了COM1,當然你也可以不移除,那樣調試串口就是用COM2,爲了方便統一,好講後面的步驟,統一使用COM1好了,果斷移除虛擬打印機。

VMware的網絡設置和串口設置直接看下圖,不再贅述了。

步驟三:進入虛擬機中的系統,首先關閉UAC,然後爲系統的Windows用戶賬戶設置密碼。因爲待會兒要在VS中輸入虛擬機的計算機名、用戶名、密碼進行連接,沒有密碼的話豈不是誰都可以連接你,那怎麼行,不行。完成後重啓一下虛擬機。

步驟四:在開發機的WDK安裝目錄下找到“WDK Test Target Setup”安裝包,安裝WDK8.1的時候如果是安裝到默認路徑,那麼應該在“C:\Program Files (x86)\Windows Kits\8.1\Remote”文件夾下,有ARM、X64、X86版,由於我的測試機是32位系統,故選擇X86文件夾下的“WDK Test Target Setup x86-x86_en-us.msi”,把這個安裝包拷出來拿到虛擬機裏進行安裝。WDK10的路徑可能有所不同,但只要在WDK安裝目錄下搜索“Remote”或“WDK Test Target”就能找到。

步驟五:在開發機器上打開VisualStudio,點擊"DRIVER"-"Test"-"Configure Computers",如果VS沒有"DRIVER"這個菜單項,說明WDK沒有裝好。

在彈出的"Computer Configuration"對話框中點擊"Add New Computer",然後在"Computer name"中輸入虛擬機的計算機名,下面的選項第一項“Provison computer and automatically configure debugers”是全自動,方便是方便,不過它不會自動設置調試串口。所以選擇第二項“Provision computer and choose debuger settings”。

點擊下一步,照着下圖進行設置,連接方式"串口",波特率默認115200,勾選管道,勾選自動重連,管道名"\.\pipe\com_1",然後點擊下一步。

如果連接成功的話會要求你輸入虛擬機的用戶名和密碼。如果出現連接失敗,請檢查你的真機和虛擬機能否相互ping同,你在網絡鄰居(網絡)中能否看到彼此的計算機名。

用戶名和密碼輸入正確後,他們兩邊就開始噼裏啪啦一頓亂搞了,期間虛擬機還會註銷、重啓、打開應用商店、自動安裝一堆東西,總之你要做的事情就是衝一杯咖啡,烤一根熱狗,邊享受邊等待美好世界的來臨。

幾分鐘後,隨着進度條滾到底以及"Complete"字樣的出現,世界就晴朗了。點擊一下"下一步"和"完成",從此開啓我們的社會主義和諧生活。

步驟六:新建一個驅動項目,比如新建一個KMDF項目

VS爲我們生成的解決方案中有兩個項目,其中KMDF Driver用於生成驅動程序文件,KMDF Driver Package用於部署安裝測試驅動。打開KMDF Driver Package項目的屬性對話框,找到"配置屬性"-"Driver Install"-"Deployment",在此選項卡上,勾選"Enable deployment","Target Computer Name"就選擇剛纔配置好的虛擬機的機器名。"Driver Installation Options"選擇"Hardware ID Driver Update",然後輸入ID,ID輸什麼呢,可以在KMDF Driver項目中的inf文件裏找,inf文件裏的[Standard.NT]節中有ID,照着填入即可,然後點確定。

完成了上面的步驟以後,每次你點擊生成解決方案,它會自動把生成好的驅動程序傳到虛擬機中並自動安裝好,下圖就是虛擬機中已經裝好的可愛的虛擬設備。

接下來如果你直接點調試運行,會發現驅動自動裝好了,也進入調試中了,可以手動點“全部中斷(暫停調試)",但是代碼中的斷點斷不下來!這裏還要注意一點,當你點擊調試運行後,緊接着馬上就點“全部中斷(暫停調試)”,然後再點繼續調試,不出意外的話就能命中斷點了。至於爲什麼?這個問題太深奧,天機暫時還沒泄露,等天機泄露給我了,我再來更新文章說明。

下面就是激動人心的DriverEntry中的斷點命中圖,注意右下角的“Debugger Immediate Window”實際上就是嵌入到VisualStudio中的WinDbg,用法是一樣的哦。

還不清楚的直接上MSDN看視頻教程:
硬件開發視頻集合:https://msdn.microsoft.com/zh-cn/windows/hardware/gg454522
與本文相關的3個視頻:
https://msdn.microsoft.com/windows/hardware/drivers/develop/visual-studio-driver-development-environment
https://msdn.microsoft.com/library/windows/hardware/dn265573
https://msdn.microsoft.com/windows/hardware/drivers/develop/debugging-a-driver

還有更多高級、好用、方便的功能。具體參照MSDN上的文檔來,驅動開發資料入口:https://msdn.microsoft.com/zh-cn/windows/hardware

本文由CharlesSimonyi發表於CSDN博客:http://blog.csdn.net/charlessimonyi/article/details/50904956轉載請註明出處

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