以前一直都是用 VS2008 + DDKWizard + WinDbg 來進(jìn)行驅(qū)動(dòng)程序的開發(fā)調(diào)試的,
使用 DDKWizard 來搭配調(diào)試環(huán)境呢,在 VS2008 下也還算方便,
因?yàn)椴恍枰约喝ピO(shè)置一些什么包含文件啊,源代碼路徑啊之類的就可以直接編譯驅(qū)動(dòng)程序源碼,
安裝好 DDKWizard 后,在 VS2008 中就會(huì)自動(dòng)出現(xiàn)一個(gè)開發(fā)驅(qū)動(dòng)程序的項(xiàng)目框架,
就跟選擇創(chuàng)建 WinForm 應(yīng)用程序一樣的,創(chuàng)建好 DDK 項(xiàng)目后也是可以直接在 VS2008 下編譯的,
所以在開發(fā)上也還方便,但是在調(diào)試上的話,就麻煩了,
在 WinDbg 中有一大堆東西要設(shè)置,在虛擬機(jī)上也要設(shè)置一些命令,
關(guān)于 WinDbg + VMware 開發(fā)調(diào)試驅(qū)動(dòng)程序在網(wǎng)上有比較有名的酒若琳的文章,
不過那是很多年以前的文章了,有興趣的可以去谷歌搜索 "酒若琳 WinDbg" ,應(yīng)該是可以找到那篇文章的。
同時(shí)對(duì)于這一塊的使用,也可以參考筆者的文章《驅(qū)動(dòng)開發(fā) – WDK 調(diào)試及 SVN 環(huán)境搭配》,
博文地址為:http://www.cnblogs.com/BoyXiao/archive/2011/05/06/2038578.html
但是在使用 DDKWizard + VS2008 進(jìn)行驅(qū)動(dòng)開發(fā)時(shí),是不能夠直接通過 VS2008 來調(diào)試的
(這里可能有其他門路來實(shí)現(xiàn),但是筆者沒有實(shí)現(xiàn)過),
而一般都是在 WinDbg 中設(shè)置好符號(hào)文件的路徑以及源代碼的路徑,然后再驅(qū)動(dòng)程序的源代碼中嵌入一些匯編代碼,
當(dāng)然這些匯編代碼只是簡(jiǎn)單的用來實(shí)現(xiàn)一個(gè)中斷,從而在 WinDbg 調(diào)試器中會(huì)生成一個(gè)斷點(diǎn)。
這樣調(diào)試起來速度慢,也不好控制,所以有時(shí)候覺得在做開發(fā)的時(shí)候,在調(diào)試上花去的時(shí)間太多了,會(huì)不爽。
在本次博文中,將要介紹的是一個(gè)開源項(xiàng)目 VirtualDDK(VirtualKD 中包含了 VirtualDDK),
通過這個(gè)開源項(xiàng)目即可以很好的實(shí)現(xiàn)在 VS2010 以及 VS2008 下直接調(diào)試驅(qū)動(dòng)程序,
同時(shí)對(duì)于 VirtualDDK 的環(huán)境搭配也是很簡(jiǎn)單的,下面就直接上一些圖片以及一些注解來說明,
由于文章存在大量的截圖,所以讀者只要按著截圖來做基本上都是可以成功的。
同時(shí)下面給出官網(wǎng)上的一篇關(guān)于利用 VirtualDDK 和 VS 來調(diào)試驅(qū)動(dòng)程序的文章(內(nèi)容非常詳細(xì)),
基本上通過筆者的這篇博文和官網(wǎng)上的博文就完全可以搭建驅(qū)動(dòng)程序開發(fā)環(huán)境成功了 !
同時(shí)在官網(wǎng)上的環(huán)境為 VS2008 的。而且在官網(wǎng)的博文中還有兩個(gè)比較好的驅(qū)動(dòng)例子の !
-
1. A dummy driver that simply prints a message when it is loaded .
-
2. A ramdisk driver, that creates a virtual hard disk .
《Making Your First Driver – Complete WalkThrough》
博文地址為:http://articles.sysprogs.org/visualddk/firstdriver/
前期設(shè)置:
安裝虛擬機(jī)和 VS2010,然后再網(wǎng)絡(luò)和共享中心中進(jìn)行一些設(shè)置,
設(shè)置即是將本地連接網(wǎng)卡,安裝虛擬機(jī)后生成的兩塊虛擬網(wǎng)卡的 IP 地址都改為自動(dòng)獲取 IP 地址,
同時(shí)需要修改一塊虛擬網(wǎng)卡的共享屬性。




在虛擬機(jī)中安裝好 Windows 操作系統(tǒng)并且設(shè)置網(wǎng)卡類型為 NAT 類型

將本地主機(jī)開啟遠(yuǎn)程,并且將本地主機(jī)的防火墻全部關(guān)掉
(這一步,看你運(yùn)氣了,有時(shí)候不設(shè)置這些東西,在 VS2010 下也是可以利用 VirtualDDK 調(diào)試驅(qū)動(dòng)程序成功的,
但是你人品不好的時(shí)候就難說了,就比如我自己,前些日子不設(shè)置這些東西也都可以調(diào)試的,
但是這幾天死活調(diào)不上,結(jié)果把上面這兩東西設(shè)置了就可以調(diào)試了,估計(jì)是因?yàn)?VirtualDDK 需要 UDP 來進(jìn)行調(diào)試,
所以,防火墻還是禁用比較好,但是我一直都不明白這個(gè)調(diào)試和開不開遠(yuǎn)程有何關(guān)系,感覺著不是扯淡嘛)


同樣在你的虛擬機(jī)操作系統(tǒng)上,我這里安裝的是 XP ,
也一樣需要開啟遠(yuǎn)程并且關(guān)閉防火墻,理由同上,看你人品了。


檢測(cè)是否設(shè)置成功:
設(shè)置好上面這些東西后,我們需要來檢測(cè)一下,這個(gè)檢測(cè)是必要的,
因?yàn)槿绻銠z測(cè)沒有通過的話,在后面是絕對(duì)不可能成功的利用 VS2010 + VirtualDDK 來調(diào)試驅(qū)動(dòng)程序的
1. 在主機(jī)里面 Ping 虛擬機(jī)上的 XP 操作系統(tǒng)(必須成功)。
2. 在虛擬機(jī)里面的 XP 操作系統(tǒng)中 Ping 本地主機(jī)(必須成功)。
3. 在虛擬機(jī)里面的 XP 操作系統(tǒng)中通過網(wǎng)上鄰居訪問本地主機(jī)(必須成功)。


下載和安裝 VirtualDDK:
安裝好 VirtualDDK 后(一般安裝在 C:\Program Files\VisualDDK 目錄下),
可以在該目錄下看到一個(gè) Target 文件夾,
將這個(gè) Target 文件夾拷貝到虛擬機(jī)上的 XP 操作系統(tǒng)下,并且運(yùn)行 Target 文件夾下的 vminstall.exe,
然后將虛擬機(jī)中的 XP 操作系統(tǒng)重新啟動(dòng)(安裝完 vminstall.exe 后會(huì)提示需要重啟系統(tǒng))。
VS2010 創(chuàng)建 VirtualDDK 項(xiàng)目:
打開 VS2010 ,創(chuàng)建 VirtualDDK 項(xiàng)目,創(chuàng)建過程如下截圖:


創(chuàng)建好 VirtualDDK 項(xiàng)目后,您可以嘗試著生成以下解決方案,可以看到很容易的生成了解決方案,
也會(huì)在指定的目錄下生成 .sys 文件和 .pdb 文件。
調(diào)試驅(qū)動(dòng)程序:
開始調(diào)試驅(qū)動(dòng)程序:
首先是啟動(dòng)虛擬機(jī)中的 XP 操作系統(tǒng),等到 XP 操作系統(tǒng)出現(xiàn)以下界面時(shí)(你可以通過上下鍵來使得 30 秒倒計(jì)時(shí)停止),

到 VS2010 中,完成以下操作:



當(dāng)出現(xiàn)下面的錯(cuò)誤提示時(shí),直接確定忽略,然后重新 Start Debug 即可

然后再加載我們自己寫的這個(gè)驅(qū)動(dòng)程序即可,這樣就會(huì)出現(xiàn)調(diào)試界面了,

在虛擬機(jī)中也會(huì)顯示一些消息:

在 VBox 下調(diào)試驅(qū)動(dòng)程序:
在 VBox 下調(diào)試驅(qū)動(dòng)程序其實(shí)和在 VMware 下調(diào)試是差不多的,也就是具體的操作和上面的操作基本上是一樣的,
但是需要改變一點(diǎn)點(diǎn)東西,
首先定位到 VBox 的安裝目錄(C:\Program Files\Oracle\VirtualBox),
可以在該目錄下看到一個(gè) VBoxDD.dll,我們需要將這個(gè)文件的名字改為 VBoxDD0.dll,

改名后,我們?cè)俣ㄎ坏?VirtualDDK 的安裝目錄下(C:\Program Files\VisualDDK\VirtualBox\x86),
并且將該目錄下的 VBoxDD.dll 拷貝到上面的這個(gè)目錄(C:\Program Files\Oracle\VirtualBox)下。

至于其他的步驟的話,就和前面在 VMware 下的操作是一樣的了。
|