基於網絡的內核調試

    驅動調試需要用到兩臺機器,目前主要是通過串\口、usb或者1394接口來連接。對於軟設備驅動來說就多了一種選擇,通過vmware等虛擬化軟件來虛擬測試機。但有些情況下必須在真實的雙機環境進行,如真實設備驅動的調試,以及其他驅動無法在虛擬機上運行的情況,這時就要考慮用什麼接口來連接了。串口的優點是它屬於標配,幾乎每個PC主板上都有,串口線也便宜,另外就是所有的windows系統都支持串口調試,所以很多同行都用串口進行驅動調試,但它有個缺點速度慢,最快也只能達到115200Usb1394的速度比串口速度快,但要找到合適的usb線也不容易,1394就更難了。在這樣的情況下,如果可以通過網絡進行雙機調試一定會是很好的調試體驗。

    很可惜,想要通過網絡進行驅動調試也是有要求的。爲了敘述方便我們先明確兩個概念。

    1. 目標機,指的是安裝和運行被調試驅動的機器。

    2. 宿主機,運行調試器對目標機進行調試的機器。

    要通過網絡進行驅動調試,需要滿足以下幾個方面的要求:

    1. 目標機和宿主機的網卡要支持這種調試。

    2. 目標機操作系統必須是win8或者windows server 2012.

    3. 宿主機操作系統可以使XP或者更高版本的系統。

    條件是苛刻了點,但隨着win8的普及,相信使用這種方法進行驅動調試的人會越來越多。接下來進入本文的重點,調試環境的配置。

    1. 用ipconfig以及ping命令確定目標機和宿主機的IP以及網絡連接情況。

    2. 選擇一個宿主機和目標機都要用到的網絡端口,你可以在49152-65535這個範圍選擇,確保你選擇的端口沒有被其他進程佔用。

    3. 在目標機運行如下命令:

       (1)bcdedit /debug on

        (2) bcdedit /dbgsettings net hostip:w.x.y.z port:n 

    其中w.x.y.z表示宿主機IPn表示剛纔選擇的網絡端口。(2)這個命令將會產生一個key,把這個key抄下來,等會要用到。

    如果目標機有多個網卡,還需要執行如下命令:

    bcdedit /set {dbgsettings} busparams b.d.f 

    其中b爲總線號,d爲設備號,f爲功能號,這些可以在設備管理器中查到。

    4. 重啓目標機。

    5. 在宿主機上打開windbg,選擇kernel debug下的net標籤,填入選擇的端口號和剛纔的key,點擊OK就可以開啓調試會話。你也可以在命令窗口運行windbg -k net:port=n,key=Key 來開啓調試會話。

    從上面可以看出,配置也是挺簡單的。筆者很早以前就想過這種調試方法,奈何微軟一直都不支持, 估計微軟內部應該也有這種需求,所以現在出來這種技術。時間晚了點,要是XPwin7能支持就更好。筆者認爲,使用網絡來調試將會變成主流。(PSwin8system32目錄下有個kdnet.dll,正是這個庫支持的網絡調試,不知道有沒有人有這個興趣去研究下,能移植到win7winxp就好了。筆者最近需要在真實雙機環境下測試一個驅動,這個驅動還不能在win8上跑,上面的辦法我是用不了了,目前正在用串口調試。)

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