學習筆記 這幾天在除錯USB驅動程式時遇到的問題

2021-07-24 14:30:25 字數 2144 閱讀 3139

前提是,有兩台真機,目標機是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,

&kerneldevicenameunicode);

原來發現定義符號鏈結的名稱需要以l」\dosdevices\」開頭,而我的**寫成了l」\dosdevice\,少了個s,所以出錯了.

修正後,裝置啟動正常了.

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...