zoukankan      html  css  js  c++  java
  • WDK驱动调试问题点滴

     
     
    1,调试驱动时要先打开testsiging,命令为: bcdedit /set testsigining on
     
    2,bcdedit命令执行失败,说由于安全策略的保护,执行失败,解决方法:关掉Secure boot
     
    3,新装的系统不能安装开发好的驱动,安装时设备管理器提示当前没有更好的驱动。这时 需确认我们使用的签名是否已经安装在测试机中,并安装在受信任的存储位置。
             同时要使用 bcdedit -set testsigning on 命令来启用测试签名。测试签名启用以后有的驱动可以直接安装,有的驱动需要安装签名以后才能安装。
    4,关掉secureboot之前先要关掉bitlocker,否则重启后无法进入系统。
    5,dbgView或者用kernel debugger连接以后在windbg中,不能看到驱动打印的LOG,需增加如下注册表信息:
    HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlSession ManagerDebug Print Filter,找到注册表的这个项,在我机器上是没有Debug Print Filter子项的,手动建好,在这个键下新建default的dword值,十六进制为0XF,然后重启电脑,就可以看到日志输出了。
     
    UMDF消息显示的开关在:HKLMSOFTWAREMicrosoftWindows NTCurrentVersionWUDF
     
    6,USB kernel debugger连接不上的排查
    1)按WDK文件中所说,先在目标机上设置(test为任意名称, busparams后的字符串是用usbview查找调试线插入的USB根HUB上的信息):
    bcdedit /debug on
    bcdedit /dbgsettings usb targetname:test
    bcdedit /set "{dbgsettings}" busparams 0.20.0
    2)主控机上启动windbg时,第一次一定要使用admin权限启动与主控机CPU指令集一致版本(如X86,X64,ARM等),否则“USB Connection Device”不能自动安装。
    3)做完之前的设置,打开windbg,选USB kernel debugger, windbg中如果显示:USB: Write opened,就说明已经建立了连接,不需要重启目标机。WDK的文档里说的重启,只是说明下次重启时它会自动连接。
    4)如果不能建立连接,或者插入USB线以后PC机上的USB HUB不能正常工作(设备管理器中显示叹号)。需要关闭两端的USB口(调试用到的)的电源管理页中的 “允许计算机关闭此设备以节约电源”(清除该文字前边的勾选)
    5)如果还有问题,可以把USB线换到其它USB口上试试,我就为此花过挺多时间。
    6)记得一定要用USB3.0的交叉线。判断是否是USB3.0的方法:
    USB3.0交叉线一旦插入,主控机上会显示“USB Connection Device”连接。非3.0版本的线插入后设备管理器里不会有反应。
     
    7,WHCK问题排查:
    测试:PCI Root Port Surprise Remove Test(PCI devcies only)(Reliability)时报告:

    WDTF_PNP : Target: I/O LPC Controller - 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub PCIVEN_8086&DEV_0284&SUBSYS_380C17AA&REV_003&11583659&0&F8 WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=1798605197 LogSessionId=1 SessionTraceCount=293  
     Result: TestSurpriseRemove operation timed out waiting for IRP_MN_REMOVE_DEVICE.. WexTraceInfo ThreadId=212 ProcessId=10440 TimeStamp=4799338572 LogSessionId=1 SessionTraceCount=294 

    Result: Failed to receive IRP_MN_REMOVE_DEVICE after receiving IRP_MN_SURPRISE_REMOVAL. Ensure that there are no open handles or references to the test device (in user mode or in kernel mode) preventing IRP_MN_REMOVE_DEVICE from being sent. You may need to terminate any processes or services that may have open user mode handles to this device. ( 80004005 )

    因为出错时的驱动名字里带HUB,一开始想到了调试用的USB,所以关掉kernel debug,没有用。去设备管理器找  LPC Controller - 0284 for Intel(R) 400 Series Chipset Family On-Package Platform Controller Hub这个设备,发现它有一个没有签名的驱动:msdmfilt.sys。
    搞不清楚其出现的原因,将驱动版本回滚,该设备变成了PCI 标准ISA桥。我猜测该设备是PCI总线,而我的驱动挂在PCI总线上,所以需要测试它。再次测试时发现测试开始前有一个确认参数的窗口,其中有一项叫DriverVerfifierAdditionalDrivers,其值为:msdmfilt.sys,将其设置为空字符串,并将设备驱动恢复(以删除msdmfilt.sys) 。也一样会失败。
    后来将系统重装,该测试用例可以通过。但我的功能不起作用,将系统更新,没有安装驱动的两个设备安好,需要的应用也都安好。确认功能正常以后,测试用例又会失败。
    所以判断是新加入的应用及驱动有影响,将新加入的两个驱动禁用之后测试可以通过。但这两个驱动都是通过WHCK测试的。怀疑是我的使用方法有问题,对两个驱动做同一个WHCK测试,发现会失败。
    它也有同样的提示,说可能设备被其它程序打开了。只是它不再提示PCIVEN_8086&DEV_0 有问题,直接提示正在测试的驱动有这个问题。到此恍然大悟,该驱动被它的应用打开了(应用程序启动就会打开)。修改设置,使该程序开机时不自动启动。
    再测试可以通过了。
     
     
     
     
     
     

  • 相关阅读:
    手起刀落-一起来写经典的贪吃蛇游戏
    同步、异步、回调执行顺序之经典闭包setTimeout分析
    起步
    设计模式之单例模式与场景实践
    青春是如此美好,又怎忍平凡度过
    nvm管理不同版本的node和npm
    起步
    基础
    调用wx.request接口时需要注意的几个问题
    微信小程序实现各种特效实例
  • 原文地址:https://www.cnblogs.com/ceblog/p/12667680.html
Copyright © 2011-2022 走看看