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

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

 

输入bcdedit /debug on 打开debug模式

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

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

正确无误,我们使用串口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转串的串口号)

 

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

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

 

这时候,可能你的驱动程序的跟踪信息没有打印出来,这是因为被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更高级的功能了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: USB转串口(WDF驱动源代码)是一种用于在计算机和串口设备之间传输数据的转接器。WDF是Windows Driver Foundation的缩写,是一种开发驱动程序的框架。以下是一个简单的USB转串口(WDF驱动)的源代码示例: ```c #include <ntddk.h> #include <wdf.h> DRIVER_INITIALIZE DriverEntry; NTSTATUS DriverEntry( _In_ PDRIVER_OBJECT DriverObject, _In_ PUNICODE_STRING RegistryPath ) { NTSTATUS status; WDF_DRIVER_CONFIG config; WDF_DRIVER_CONFIG_INIT(&config, NULL); status = WdfDriverCreate(DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, WDF_NO_HANDLE); if (!NT_SUCCESS(status)) { KdPrint(("Failed to create WDF driver object (status: 0x%x)\n", status)); } return status; } NTSTATUS SerialPortEvtDeviceAdd( _In_ WDFDRIVER Driver, _Inout_ PWDFDEVICE_INIT DeviceInit ) { NTSTATUS status; WDFDEVICE device; WDF_OBJECT_ATTRIBUTES attributes; UNREFERENCED_PARAMETER(Driver); WDF_OBJECT_ATTRIBUTES_INIT_CONTEXT_TYPE(&attributes, DEVICE_EXTENSION); status = WdfDeviceCreate(&DeviceInit, &attributes, &device); if (!NT_SUCCESS(status)) { KdPrint(("Failed to create WDF device (status: 0x%x)\n", status)); } return status; } VOID SerialPortEvtDeviceContextCleanup( _In_ WDFOBJECT Device ) { WDFDEVICE device; device = WdfObjectToWdfDevice(Device); // 清理设备上的资源和内存管理 // ... } NTSTATUS SerialPortEvtDevicePrepareHardware( _In_ WDFDEVICE Device, _In_ WDFCMRESLIST ResourcesRaw, _In_ WDFCMRESLIST ResourcesTranslated ) { // 初始化硬件设备 // ... return STATUS_SUCCESS; } VOID SerialPortEvtDeviceD0Entry( _In_ WDFDEVICE Device, _In_ WDF_POWER_DEVICE_STATE PreviousState ) { UNREFERENCED_PARAMETER(Device); UNREFERENCED_PARAMETER(PreviousState); // 执行D0进入状态的相关操作 // ... } VOID SerialPortEvtDeviceD0Exit( _In_ WDFDEVICE Device, _In_ WDF_POWER_DEVICE_STATE TargetState ) { UNREFERENCED_PARAMETER(Device); UNREFERENCED_PARAMETER(TargetState); // 执行离开D0状态的相关操作 // ... } NTSTATUS SerialPortEvtDeviceSelfManagedIoCleanup( _In_ WDFDEVICE Device ) { UNREFERENCED_PARAMETER(Device); // 清理自管理I/O相关资源 // ... return STATUS_SUCCESS; } ``` 以上代码是一个简单的USB转串口(WDF驱动)的源代码示例,用于创建并初始化WDF驱动和设备,以及相应的设备操作和清理函数。通过编写适当的驱动组成部分,可以实现USB转串口设备的基本功能。为了完整地实现所需的功能,可能需要在代码中添加更多的逻辑和函数。请注意,以上代码仅供参考,实际的驱动开发需要更多的详细信息和实现。 ### 回答2: USB转串口WDF驱动源代码是一种用于实现USB转串口功能的驱动程序的源代码。 WDF(Windows Driver Framework)是微软开发的一种驱动框架,它提供了一套高级的API接口,旨在简化驱动程序的开发和维护。通过使用WDF驱动框架,开发者可以更加方便地编写稳定、高效的驱动程序。 在USB转串口驱动的源代码中,主要包含了以下几个部分: 1. 初始化和插拔处理:驱动程序需要监测USB设备的插拔事件,并正确地初始化串口通信的相关参数。这部分代码主要负责与操作系统交互,注册回调函数,并处理设备的插拔事件。 2. IO请求处理:驱动程序需要处理来自用户空间的串口读写请求。这部分代码主要负责将用户空间的IO请求映射到底层硬件设备的操作,并处理读写结果的返回。 3. 数据传输处理:驱动程序需要负责处理串口通信的数据传输。这部分代码主要负责将用户空间的数据传输到设备,或将设备接收到的数据传输到用户空间。 总结来说,USB转串口WDF驱动源代码主要实现了USB设备的插拔处理、IO请求处理和数据传输处理等功能。通过这些源代码的实现,可以使计算机与串口设备之间进行稳定、高效的通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值