基於網路的核心除錯
驅動除錯需要用到兩臺機器,目前主要是通過串\口、usb或者1394介面來連線。對於軟裝置驅動來說就多了一種選擇,通過vmware等虛擬化軟體來虛擬測試機。但有些情況下必須在真實的雙機環境進行,如真實裝置驅動的除錯,以及其他驅動無法在虛擬機器上執行的情況,這時就要考慮用什麼介面來連線了。串列埠的優點是它屬於標配,幾乎每個PC主機板上都有,串列埠線也便宜,另外就是所有的windows系統都支援串列埠除錯,所以很多同行都用串列埠進行驅動除錯,但它有個缺點速度慢,最快也只能達到115200。Usb和1394的速度比串列埠速度快,但要找到合適的usb線也不容易,1394就更難了。在這樣的情況下,如果可以通過網路進行雙機除錯一定會是很好的除錯體驗。
很可惜,想要通過網路進行驅動除錯也是有要求的。為了敘述方便我們先明確兩個概念。
1. 目標機,指的是安裝和執行被除錯驅動的機器。
2. 宿主機,執行偵錯程式對目標機進行除錯的機器。
要通過網路進行驅動除錯,需要滿足以下幾個方面的要求:
1. 目標機和宿主機的網絡卡要支援這種除錯。
2. 目標機作業系統必須是win8或者windows server 2012.
3. 宿主機作業系統可以使XP或者更高版本的系統。
條件是苛刻了點,但隨著win8的普及,相信使用這種方法進行驅動除錯的人會越來越多。接下來進入本文的重點,除錯環境的配置。
1. 用ipconfig
2. 選擇一個宿主機和目標機都要用到的網路埠,你可以在49152-65535這個範圍選擇,確保你選擇的埠沒有被其他程序佔用。
3. 在目標機執行如下命令:
(1)bcdedit /debug on
(2) bcdedit /dbgsettings net hostip:w.x.y.z port:n
其中w.x.y.z表示宿主機IP,n表示剛才選擇的網路埠。(2)這個命令將會產生一個key,把這個key抄下來,等會要用到。
如果目標機有多個網絡卡,還需要執行如下命令:
bcdedit /set {dbgsettings} busparams
其中b為匯流排號,d為裝置號,f為功能號,這些可以在裝置管理器中查到。
4. 重啟目標機。
5. 在宿主機上開啟windbg,選擇kernel debug下的net標籤,填入選擇的埠號和剛才的key,點選OK就可以開啟除錯會話。你也可以在命令視窗執行windbg -k net:port=n,key=Key 來開啟除錯會話。
從上面可以看出,配置也是挺簡單的。筆者很早以前就想過這種除錯方法,奈何微軟一直都不支援, 估計微軟內部應該也有這種需求,所以現在出來這種技術。時間晚了點,要是XP和win7能支援就更好。筆者認為,使用網路來除錯將會變成主流。(PS,win8的system32目錄下有個kdnet.dll,正是這個庫支援的網路除錯,不知道有沒有人有這個興趣去研究下,能移植到win7和winxp就好了。筆者最近需要在真實雙機環境下測試一個驅動,這個驅動還不能在win8上跑,上面的辦法我是用不了了,目前正在用串列埠除錯。)
相關推薦
基於網路的核心除錯
驅動除錯需要用到兩臺機器,目前主要是通過串\口、usb或者1394介面來連線。對於軟裝置驅動來說就多了一種選擇,通過vmware等虛擬化軟體來虛擬測試機。但有些情況下必須在真實的雙機環境進行,如真實裝置驅動的除錯,以及其他驅動無法在虛擬機器上執行的情況,這時就要考慮用什麼介面來連線了。串列埠的優點是
Linux核心除錯環境搭建(基於ubuntu12.04)
by Netfairy - 2016-05-29 一、測試環境 物理機:ubuntu16.04 LTS target(被除錯機)環境:VirtualBox 5.0.20+ubuntu 12.04 LTS + linux kernel 3.0.4 host
linux核心資料結構以及核心除錯
一、可移植性 1.1 資料型別可移植性 由於核心可能執行在不同的架構上,不同的架構具有不同的機器字長,因而可移植性對核心程式設計非常重要。核心資料使用的資料型別分為 3 個主要型別 標準C型別 明確大小的型別 用作特定核心物件的型別 1.1.1 標準 C 型別 使用標準
庖丁解牛Linux網路核心
通過TCP協議進行C/S模式的網路通訊 學習要由淺入深、由易到難,分析Linux核心中網路部分就要從核心對外提供的socket封裝介面說起,典型以TCP協議C/S方式socket通訊大致過程如圖所示: (圖片來源於網路) 從圖中可以看到TCP服務端server的初始化過程複雜一些,就像開一個小賣鋪,你要
SylixOS 核心除錯
1、printk()是最常用的,可以在核心態中列印響應除錯資訊; 2、部分核心程式碼中無法使用printk()列印資訊時就需要用到_DebugFormat(),申明如下: _DebugFormat(level, fmt, ...) level可選值如下: #define __LO
SylixOS下開啟核心除錯資訊
開啟檔案libsylixos/SylixOS/config/net/net_cfg.h 將巨集LW_CFG_LWIP_DEBUG置1 開啟檔案libsylixos/SylixOS/include/network/
嵌入式Linux開發——(十六)Linux核心除錯技術
1、核心列印函式printk ①printk函式與printf函式用法格式完全相同 ②它所列印的字串頭部可以加入“<n>”樣式字元,n=0---7表示這條資訊的記錄 級別 ③對於p
P2P 網路核心技術:Gossip 協議
背景 Gossip protocol 也叫 Epidemic Protocol (流行病協議),實際上它還有很多別名,比如:“流言演算法”、“疫情傳播演算法”等。 這個協議的作用就像其名字表示的意思一樣,非常容易理解,它的方式其實在我們
Android : 安卓裝置配置網路adb除錯
一、除錯環境: Android Debug Bridge version 1.0.40 + Nexus7平板; 二、除錯步驟: 1. Android裝置除了用有線usb進行ADB除錯外,還可以在同一區域網通過網路ADB連線,一般指令為 adb connect 192.168.2.36(此為當前And
計算機網路(1)-計算機網路概述:網路結構(網路邊緣、接入網路、網路核心)
文章目錄 1. 計算機網路基本概念 2. 計算機網路結構 3. 網路核心之資料交換 1. 電路交換 2. 多路複用技術 3. 報文交換 4. 分組交換(因特網)
基於IE核心的多媒體檔案視覺化程式實現(二)
文章目錄 使用命令列引數 命令列引數獲取和解析程式碼 幫助系統 執行測試 WSEE的功能還不只如此 現在的結果 上回說道,我們需要使用命令列引數方法將要瀏覽的檔名傳入wsee.exe 程式,然後由
linux核心除錯技巧之一 dump_stack【轉】
在核心中程式碼呼叫過程難以跟蹤,上下文關係複雜,確實讓人頭痛 呼叫dump_stack()就會列印當前cpu的堆疊的呼叫函數了。 如此,一目瞭然的就能看到當前上下文環境,呼叫關係了 假設: 遇到uvc_probe_video這麼一個函式,不知道它最終是被誰呼叫到的,根據linux裝置模型,初步推測,p
基於IE核心的多媒體檔案視覺化程式實現(一)
目的 前回書說道,在訊號處理或演算法研究中,資料的視覺化可以直觀地展現和判別結果的合理性。如果只允許用C語言做開發,或要將C語言所做演算法的輸出資料進行展示,又不許用MATLAB、Python所帶的視覺化工具,那麼,最快捷而直接的辦法就是將資料以文字方式輸出,再
Android Studio 通過網路方式除錯
一、環境設定 1、安卓裝置乙太網進行網路設定,包括IP地址、閘道器等(必須同連線的網路為同網段;可參考電腦IPV4的屬性,設定的IP地址為非佔用的IP) 2、連線方式通過有線網路連線需要測試的安卓裝
基於Linux核心的UDP協議原始碼分析
當一個數據包(package)經過IP層的處理之後,最終呼叫ip_local_deliever()函式,這個函式會根據這個資料包(packet)的傳輸層頭兒確定其採用的傳輸協議,如果是UDP協議,將會呼叫udp_rcv()函式。至此,進入傳輸層的範圍。 UDP協議棧的報頭定義如下:
Golang網路:核心API實現剖析(一)
這一章節我們將詳細描述網路關鍵API的實現,主要包括Listen、Accept、Read、Write等。 另外,為了突出關鍵流程,我們選擇忽略所有的錯誤。這樣可以使得程式碼看起來更為簡單。 而且我們只關注tcp協議實現,udp和unix socket不是我們關心的。 L
計算機網路核心基礎知識總覽
第一章——概述 計算機網路效能指標 1、速率,傳輸資料速率,也叫資料率、位元率,單位有:b/s、kb/s、Mb/s、Gb/s、Tb/s 2、頻寬,最高傳輸速率,即為速率最高值,單位與速率相同 3、吞吐量,單位時間通過某個網路通道或介面的資料量,單位b、kb、Mb
HI_SDK 核心除錯
/etc/init.d # cat rcS #! /bin/sh /bin/mount -a echo " _ _ _ _ _ _ _ _ _ _ _ _ \ _ _ _ _ _ ___ / /__/ \ |_/
【舊文章搬運】Windbg+Vmware驅動除錯入門(四)---VirtualKD核心除錯加速工具
原文發表於百度空間,2009-01-09========================================================================== 今天又想起來VirtualKD這個東西,試用了一下,真是爽壞了,可能我火星了~~ 很久以前就知道小喂有個VmKd工具
《Linux核心設計與實現》讀書筆記(十八)- 核心除錯
核心除錯的難點在於它不能像使用者態程式除錯那樣打斷點,隨時暫停檢視各個變數的狀態。 也不能像使用者態程式那樣崩潰後迅速的重啟,恢復初始狀態。 使用者態程式和核心互動,使用者態程式的各種狀態,錯誤等可以由核心來捕獲並顯示。 而核心是直接和硬體互動的,核心出錯之後整個系統就無法正常運行了,所以要想熟練的