WIN10环境下使用串口跟踪WDF驱动程序

WDF驱动开发调试环境的搭建还是比较麻烦的,通过串口来调试相对来说简单一点,现将我实验的具体步骤记录一下。

一  搭建硬件环境

    需要两台电脑,一台电脑主板有原生串口(usb转串能不能用我没试),安装待调试硬件和驱动程序,称为目标机(target)。另一台电脑安装了vs2015+sdk+wdf10驱动开发环境,使用一条usb转串口线,这台机称为主机(host)。

详情请参考微软文档 Setting Up Kernel-Mode Debugging over a Serial Cable Manually

二 目标机设置

 以管理员权限打开命令行窗口,

首先打开windows的驱动测试签名模式,输入bcdedit /set testsigning on

WIN10环境下使用串口跟踪WDF驱动程序

重启电脑,可以看见屏幕右下角显示已经进入测试模式

WIN10环境下使用串口跟踪WDF驱动程序

 

输入bcdedit /debug on 打开debug模式

WIN10环境下使用串口跟踪WDF驱动程序

然后设置debug参数,bcdedit /dbgsettings serial debugport:1 baudrate:115200

WIN10环境下使用串口跟踪WDF驱动程序

设置完成,输入bcdedit /dbgsettings,查看一下debug参数

WIN10环境下使用串口跟踪WDF驱动程序

正确无误,我们使用串口1(COM1)。

三 主机设置

双击打开windbg.exe程序(通常路径是:C:\Program Files (x86)\Windows Kits\10\Debuggers\x64),选择菜单File > Kernel Debug > COM,输入参数Baud Rate :115200 , Port:com8,(我的usb转串是com8,你需要根据实际填入你的usb转串的串口号)

WIN10环境下使用串口跟踪WDF驱动程序

 

点击确定,主机等待目标机连接 。。。

WIN10环境下使用串口跟踪WDF驱动程序

四  重启目标机,可以看到主机显示的跟踪信息

WIN10环境下使用串口跟踪WDF驱动程序

 

这时候,可能你的驱动程序的跟踪信息没有打印出来,这是因为被windows过滤掉了,你可以添加注册表项[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter]
"DEFAULT"=dword:00000008,重启后可以看到你的KdPrint或者DbgPrint打印的跟踪信息。

但是通过修改注册表的方法,会使windbg输出很多不相关的信息。还有一种方法不修改注册表,而是修改KdPrintEx函数的打印信息的输出等级,将DPFLTR_INFO_LEVEL提升为DPFLTR_ERROR_LEVEL,就可以输出打印信息

将KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_INFO_LEVEL, "DPFLTR_INFO_LEVEL: KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));

修改为KdPrintEx((DPFLTR_IHVDRIVER_ID, DPFLTR_ERROR_LEVEL, "DPFLTR_ERROR_LEVEL: KmdfHelloWorld: KmdfHelloWorldEvtDeviceAdd\n"));

就可以跟踪你的驱动程序了。

好了,到了这一步,以后可以进一步导入符号表,使用windbg更高级的功能了。