前提是,有兩台真機,目標機是winxp,除錯機是win7,它們通過串列埠連線,波特率115200.
在目標機上修改配置設定檔案boot.ini
注意在修改boot.ini檔案之前,要去掉它的唯讀屬性.
然後用記事本開啟檔案後,新增一行選項,內容為
multi(0)disk(0)rdisk(0)partition(1)\windows=」microsoft windows xp professional - debug」 /fastdetect /debugport=com1 /baudrate=115200
然後再把timeout=0修為timeout=10,作用是啟動系統時後有時間作出選擇.
實際檔案內容為
[boot loader]
timeout=10
default=multi(0)disk(0)rdisk(0)partition(1)\windows
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\windows="microsoft windows xp professional" /noexecute=optin /fastdetect
multi(0)disk(0)rdisk(0)partition(1)\windows="microsoft windows xp professional - debug" /fastdetect /debugport=com1 /baudrate=115200
除錯機端
1. 安裝windbg軟體
2.為windbg建立乙個桌面快捷方式,開啟屬性,修改目標為」c:\program files\debugging tools for windows (x86)\windbg.exe」 -b -k com:port=com1,baud=115200
3.開啟windbg的快捷方式,此時偵錯程式處於等待狀態.等待串列埠收到正確的資訊.
進入除錯
注意在開始除錯之前,建議兩台真機先用串列埠除錯助手測試一下串列埠通訊是否正常.
開啟目標機,進入系統選項時,選除錯模式就可以了.
此時除錯機端,windbg從串列埠接收到了正確的訊號後,發出了中斷指令,使目標機中斷.執行g命令後,目標繼續啟動.
一般的除錯過程
要除錯驅動程式,除錯機端需提前準好兩樣東西.一是驅動程式的符號檔案即pdb檔案,二是原始碼.
在windbg中設定好符號檔案路徑和原始碼檔案路徑.
然後乙個乙個開啟需要下斷點的原始碼,在**中下斷點,也可以通過命令下斷點,比如bp driver!driverentry
windbg命令很多,除錯技術很深,需要不斷學習和使用才能掌握.
開啟c:\windows\setupapi.log這個日誌檔案
找到這樣一行,
錯誤 0xe0000217:這個inf中的服務安裝段落無效.在它的上一行發現這樣一行,
新增服務: 服務 「svcdesc」 的二進位制檔案 「c:\windows\system32\drivers\driver.sys」這說明inf檔案中copyfiles節,複製檔案由於某種原因沒有成功.於手動把sys檔案復到c:\windows\system32\drivers,然後再安裝就成功了.不存在.
1.驅動程式首先編譯是成功的,沒有問題.
2.安裝成功了,也沒有問題.
所以需要除錯**.
發現driverentry例程進入正常.
adddevice例程進入正常.
pnpirp例程進入正常.但得到的minorfunction總是irp_mn_remove_device,所以啟動不起來.
然後在adddevice例程中發現可疑點,在建立符號鏈結時,返回碼不成功.
ntstatus = iocreatesymboliclink (&userdevicelinkunicode,原來發現定義符號鏈結的名稱需要以l」\dosdevices\」開頭,而我的**寫成了l」\dosdevice\,少了個s,所以出錯了.&kerneldevicenameunicode);
修正後,裝置啟動正常了.
USB學習之二 USB匯流排驅動程式
usb匯流排驅動程式的作用 1.識別usb裝置 1.1 分配位址 1.2 並告訴usb裝置 set address 1.3 發出命令獲取描述符 描述符的資訊可以在include linux usb ch9.h看到 2.查詢並安裝對應的裝置驅動程式 3.提供usb讀寫函式 將乙個usb裝置接到開發板上...
驅動程式學習筆記
什麼是驅動程式 驅動程式就是使硬體工作的一種特殊軟體,它執行在作業系統的核心空間 虛擬位址0xc0000000到0xffffffff 封裝硬體細節,服務於系統呼叫。驅動程式和應用程式的區別 1.應用程式執行在使用者空間,驅動程式執行在核心空間。2.應用程式可使用標準的庫函式,而驅動程式連線到核心,只...
裝置驅動程式學習筆記(1)
1.主從裝置號是用乙個32位的整數 dev t 來表示,這個整數的高12位表示主裝置號,後面20位表示從裝置號,核心定義了一些巨集來轉換 define minorbits20 define major dev unsigned int dev minorbits define minor dev u...