Win7+vmware+xpsp3+vs2010驱动开发环境搭建及调试方法
本文,系09年笔记记录整理,当时只有大概的步骤,最近又搭建环境,顺道比较详细的整理一下,以供自己备查。较之前的笔记,只是DDK和VMWARE的版本增高了,基本步骤还是大差不差。
注意:
如果是初次搭建环境,请大概浏览完全篇后,再参照本文搭建环境。
一、工具描述
主机:Win7 (原来是:XP sp3)
虚拟机:vmware9.0 +XP sp3
WinDBG :DDK安装完成后即有
DDK:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso
注:
主机:hostOS
虚拟机:guestOS
代码来自于网络,详细如下:
#include <ntddk.h>
// 提?供?一?个?Unload函ˉ数簓只?是?为a了?能ü够?支§持?动ˉ态?卸?载?,?防え?止1驻痢?留?内ú存?
VOID DriverUnload(PDRIVER_OBJECT driver)
{
// 但?什?么′都?不?做?,?只?打洙?印?一?句?话°:
DbgPrint("first: Our driver is unloading...\r\n");
}
// DriverEntry,?入?口ú函ˉ数簓。£相à当獭?于瞞ain。£
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG//调獭?试?命ü令?
// _asm int 3
#endif
// 这a是?我ò们?的?内ú核?模£块é的?入?口ú,?可é以?在ú这a里?写′入?我ò们?想?写′的?东?西÷。£
// 我ò在ú这a里?打洙?印?一?句?话°。£
DbgPrint("first: Hello, world!...\r\n");
// 设Θ?置?一?个?卸?载?函ˉ数簓便?于?这a个?函ˉ数簓能ü退?出?。£
driver->DriverUnload = DriverUnload;
return STATUS_SUCCESS;//返う?回?成é功|,?否?则ò不?执′行D
}
二、具体步骤
guestOS设置比较简单,具体操作如下:
添加串口:
VM->settings->hardware->add
选择 serial
设置如下图所示:
修改guestOS的boot.ini文件
在文件最末行添加如下内容:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional Debug" /fastdetect /debugport=com2 /baudrate=115200
debugport=com2,要根据你虚拟出来的串口号来设置。
本人电脑里设置的是COM2,如上图所示。
注意:
1、boot.ini 文件在C:根目录下,修改booti.in文件时,需要设置文件夹选项,详见下图的标注。
2、波特率
进入系统(虚拟机),修改串口的波特率为115200,默认建立的时,波特率是9600。
电脑右键->属性->硬件->属性管理,在弹出的框框里找到COM2修改即可。
虚拟机(guestOS)上的配置基本完成。
hostOS配置:
安装DDK
版本:6.1.6001.18002.081017-1400_wdksp-WDK18002SP_EN_DVD.iso,在微软网站可以下载到。
DDK的安装,可以使用DEAMON tools 安装即可。
WinDBG设置:
创建一个windbg的快捷方式
右击windbg快捷图标,并在属性下的目标内容后面,
添加“-k com:port=\\.\pipe\com_1,baud=11520,pipe”后,确定即可。
设置符号路径
WinDbg->菜单->File->Symbol File Path或“Ctrl+S”打开设置窗体,符号路径一般有两个两者以分号隔开。
1、是你设置保存系统DLL的PDB文件的路径
直接从微软网站下载,下载时一定要注意版本,也就是要和你的操作系统版本一致。
Symbol下载地址中
http://www.microsoft.com/whdc/devtools/debugging/symbolpkg.mspx
例如
我将其安装在E:\WINDOWS\Symbols,则在框中输入“E:\WINDOWS\Symbols”
2、驱动的PDB的路径,即你驱动生成所在的目录。
配图是原图,新搭环境的盘符与09年搭环境时有区别,需注意。
至此,hostOS(主机)需要设置的基本完成。
联调基本步骤:
启动虚拟机
选择 XP的调试版本,先不要按“回车键”。
主机(hostOS)上运行Windbg程序。
运行虚拟机上的XP系统(在虚拟机的 debug选项上按 “回车”)
hostOS上的windbg 出现如下信息:
虚机启动后如下:
后来发现是“symbol”搞错了。
新hostOS是WIN7(32bits),老的是WINXP
第一次装的symbol(Windows_Win7SP1.7601.17514.101119-1850.X86FRE.Symbols)是对应于WIN7的,
所以报上面的错误。
后重新下载并安装
WindowsXP-KB936929-SP3-x86-symbols-full-ENU,就正常了。
设置路径:
Windbg中“restart”后:
Windbg界面的命令行窗口输入“bu driver!driverentry”(不分大小写哦)
在驱动的DriverEntry函数的入口点下一个延迟断点,driver是你的驱动名字。
在虚拟机上加载驱动程序
这里使用instDrv工具,网上搜索能搜到。
hostOS上的WINDBG不能断点下来。
狠是邪门
后来,用DDK命令行编译驱动,用相同的方法,最终在驱动源文件里能断点下来。
而新搭建的环境采用VS2010来配置环境,编译驱动。开始怀疑VS2010的编译问题,后经过对比发现:
用VS2010编译时,未能生成PDB文件。
设置VS2010,如下所示:
再次重复前面调试驱动步骤,成功断点下来。