• windows driver开发和双机调试环境搭建


    本地环境

    • 本地开发环境: win 10, visual studio installer(2022版), visual studio 2022, VMware player
    • 目的:本地环境作为开发环境,VM作为测试和调试环境
    • 用debug view查看内核调试输出请直接看最后 debug view查看内核打印信息 部分

    开发环境搭建

    WDK.vsix路径在C:\Program Files (x86)\Windows Kits\10\Vsix\VS2019 或者 C:\Program Files (x86)\Windows Kits\10\Vsix。
    这个插件的版本和visual studio的版本要对应,最新的WDK(windows 10 版本)的插件对应的只能安装在visual studio 2019
    
    • 1
    • 2

    调试/测试环境搭建

    需要设置网络连接方式为桥接
    需要删除打印机(如果有的的话)
    需要添加一个串行端口,并设置命名管道属性和开启CPU轮询
    
    注意:
    	VMware player创建命名端口后,启动虚拟机可能会提示 serial0: Unable to create the server-side instance of the "***" named pipe: The filename, directory name, or volume label syntax is incorrect.
    	这可能因为管道的名称格式不对,我试了下设置成\\.\pipe\com<数字>的格式(比如 \\.\pipe\com1)成功了,网上有人设置成.\pipe\com<数字>也成功了
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • VM安装上面下载的WDK
    • 安装驱动开发平台对应的目标安装MSI,详细参考
    如果构建的driver是基于x64平台,则msi路径如下:
    C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi
    
    安装这个msi是后面visual studio部署要用,不安装的话用visual studio部署会失败
    
    • 1
    • 2
    • 3
    • 4
    • VM添加debug启动项, 参考,设置完成后windows搜索栏输入msconfig找到System Configuration应用,进入应用后点Boot项查看修改的结果
    以管理员身份打开CMD, 依次输入以下命令
    bcdedit
    bcdedit /dbgsettings serial baudrate:115200 debugport:1  
    bcdedit /copy {current} /d DebugEntry  
    	这个命令会生成一串GUID,保存这个GUID,后面的ID用此GUID替换
    bcdedit /displayorder {current} {ID} 
    bcdedit /debug {ID} ON  
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 设置VM的内核dbg信息输出级别
    打开windows Registry editor, 修改注册信息:
    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Debug Print Filter
    如果没有这个key就添加这个key
    在这个key下添加或修改 “DEFAULT" (是DWORD 类型,32位或64位应该无关),值为 0xffffffff
    
    • 1
    • 2
    • 3
    • 4

    开发driver并部署到VM

    首次部署target device列表是空的需要添加device,添加device时,display name可以随便写,Network host name填VM的ip地址。
    填完后一直点next,等visual studio自动准备好target(也就是VM)的环境,然后点finish完成设备添加,回到部署对话框。
    部署对话框中要添加hardware ID, 这个id在生成inf文件中,我的文件中内容是:
    [Standard.NTamd64]
    %hello_driver.DeviceDesc%=hello_driver_Device, Root\hello_driver ; TODO: edit hw-id
    其中amd64表示开发平台因为我构建设置的平台是x64,Root\hello_driver就是hardware ID
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • VM安装driver
    VM上以管理员身份运行CMD,输入以下命令:
    C:\Program Files (x86)\Windows Kits\10\Tools\x64\devcon.exe  
    
    INF文件 一般在C:\DriverTest\Drivers, hardware ID就是上面提到的hardware ID。这种安装方式是hello world教程里提供的,不同的driver有不同的安装方式。
    如果INF文件提供了DefaultInstall属性,可以直接右键点击INF文件然后点击安装。
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 启动driver
    启动方式和INF文件里StartType的配置有关,此项配置在Services Section里配置。
    
    如果配置的是SERVICE_DEMAND_START,则需要手动启动driver。以filter driver为例,启动命令是:FLTMC load [ driverName ]
    
    • 1
    • 2
    • 3

    windg连接VM进行调试

    • 按照上述步骤VM环境搭建完成并安装了driver
    • 本地主机执行命令
    windbg.exe -y  -k com:pipe,port=\\.\pipe\com1,resets=0,reconnect
    
    • 1

    执行成功windgb会显示等待连接

    • 重启VM,windbg就可以成功连接了,至此就可以看到内核打印的信息了。

    debug view查看内核打印信息

    debug view 查看debug信息是更简单方便的信息,用搜狗或者百度去查找debug view下载地址结果都是华军软件软之类的下载站。
    直到一次用Bing搜索才发现微软提供了debug view下载。唉,国内的搜索引擎真的毁人青春。
    
    • 1
    • 2
    • 设置VM的内核dbg信息输出级别,参考上面 调试/测试环境搭建
    • 在VM上以admin权限运行debug view,然后点顶部menu里的capture kernel(快捷键 Ctrl + k)就能看到内核 debug 打印信息了
  • 相关阅读:
    [Java] 浅析rpc的原理及所用到的基本底层技术
    记一次MySQL5初始化被kill的问题排查 | 京东云技术团队
    CompletableFuture异步编排
    <码农翻身>读书笔记
    数据治理之数据质量评估办法(参考)
    JavaScript的this为什么这么设计
    标注工具—labelme, label-studio
    深入理解C++11
    第8章 综合案例—构建DVD租赁商店数据仓库
    混合App开发
  • 原文地址:https://blog.csdn.net/QuanWaiRen0/article/details/127766147