[学习笔记]这几天在调试USB驱动程序时遇到的问题

windbg实现双机调试平台搭建

  前提是,有两台真机,目标机是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命令很多,调试技术很深,需要不断学习和使用才能掌握.

安装驱动程序时,遇到失败,提示这个INF中的服务安装段落无效

  打开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,所以出错了.
  修正后,设备启动正常了.
  
  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值