=================================版權聲明=================================
版權聲明:原創文章 謝絕轉載
請通過右側公告中的“聯系郵箱(wlsandwho@foxmail.com)”聯系我
勿用於學術性引用。
勿用於商業出版、商業印刷、商業引用以及其他商業用途。
本文不定期修正完善。
本文鏈接:http://www.cnblogs.com/wlsandwho/p/4856272.html
恥辱牆:http://www.cnblogs.com/wlsandwho/p/4206472.html
=======================================================================
狠下心來買了個8G內存條(2014年還500多的萬紫千紅呢),又下決心做了64位系統,終於可以開(zhan)開(zhan)心(jing)心(jing)的學點東西了。
=======================================================================
硬件環境:
CPU i3-4150(勉強夠用了,可有錢還得上E3,8個框框神秘加成不可小覷。)
內存 2+2+8(就是這么任性。以后還得買個8G,因為插滿好評。)
硬盤 ssd+hdd
=======================================================================
軟件環境:
操作系統 Windows7 64
虛擬機 VMware Workstation10.0.2 build-1744117
虛擬串口 VSPD
串口調試助手 隨意
=======================================================================
防揪心,我決定全部在虛擬機里進行開發和測試。(不信邪的仁人志士可以直接使用本機電腦和一個虛擬機來做驅動開發以及相關測試。)
=======================================================================
安裝虛擬串口(我用的這個)。添加串口2和串口4。務必重啟電腦。
創建兩個虛擬機,一個作為開發虛擬機,另一個作為測試虛擬機。各分配30G硬盤和2G內存。開發虛擬機存放在SSD,測試虛擬機存放在HDD。
為虛擬機添加串口。
在開發虛擬機里,選擇串口2,發送數據。
可以在測試虛擬機里收到數據。
=======================================================================
上面僅表示串口已通可用,但是想讓兩個虛擬機雙機調試,還得做額外的設置。
=======================================================================
將測試虛擬機設置成調試模式:
1 查看下有什么加載器
2 備份當前的加載器(以便直接進行配置,備份的那個加載器用於正常(非調試)啟動。)
3 開啟“調試”和“啟動調試”
4 先查看下調試設置
發現使用的是串口1,波特率為115200。
因為之前用串口助手測試時,配置的是串口2,所以這里也要改一下。(我的虛擬機安裝完成時,默認自帶的串口1和串口3,當給虛擬機添加新的串口時,自動使用的串口2。當然串口名可以自己改,跟改盤符差不多的樣子。)
5 修改調試設置
要注意的是還要同時設置波特率,不然波特率的設置就丟失了。(不信可以自己試試呀。)
6 再查看下調試設置
測試虛擬機就配置完了。
=======================================================================
下面設置開發虛擬機。
1 安裝VS2013+WDK8.1或者VS2015+WDK7.1。
第一套配置的好處是微軟官方頁面上寫的就是它,而且可以創建各種驅動項目,缺點是開始菜單下沒有命令行環境等,而且跟各種書籍對不上號;第二種的配置的好處當然就是有命令行環境而且能跟當下的書籍對上號啦。
所以,我做了兩個開發虛擬機,目前先用VS2015+WDK7.1的那個。
(安裝WDK7.1之后還能安上WDK8.1,可是VS2015里面並沒有可以用於創建驅動的項目。親測不騙人!不知道會不會有問題。)
2 設置一下WinDbg快捷方式的目標,給它弄一些參數。
圖片中“目標(T)”里的命令為:
1 "C:\Program Files\Windows Kits\8.1\Debuggers\x86\windbg.exe" -b -k com:port=2,baud=115200
如果不設置快捷方式也可以哦,只是每次都要在管理員權限的CMD里敲同一個命令行感覺並沒有什么實際意義。
3 據說WinDbg要設置符號表。據說要按下Ctrl+S來輸入SRV*C:\symbolcache*http://msdl.microsoft.com/download/symbols
開發虛擬機也配置完了。
=======================================================================
下面需要自己實際的雙機調試一下。
測試虛擬機:
依次執行net start 和net stop 命令
開發虛擬機會在測試虛擬機運行net start時觸發設置的int 3中斷。
此時在卸載程序里加斷點,則可以在測試虛擬機運行net stop時觸發斷點。
下面附上測試驅動“HelloDriver”的代碼以及其他小文件。
1 #include <ntddk.h> 2 3 VOID DriverUnload(PDRIVER_OBJECT pDriverObj) 4 { 5 DbgPrint("Goodbye Driver!"); 6 } 7 8 NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pUnicodeStrPath) 9 { 10 #if DBG 11 _asm int 3 12 #endif 13 DbgPrint("Hello Driver!"); 14 15 pDriverObj->DriverUnload = DriverUnload; 16 17 return STATUS_SUCCESS; 18 }
makefile文件
1 !IF 0 2 This file is created by WLS. 3 !ENDIF 4 !INCLUDE $(NTMAKEENV)\makefile.def
SOURCES文件
1 TARGETNAME=HelloDriver 2 TARGETTYPE=DRIVER 3 SOURCES=HelloDriver.c