zoukankan      html  css  js  c++  java
  • Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    https://blog.csdn.net/charlessimonyi/article/details/50904956

    Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置

    开发Windows驱动,我选择的环境是Win8.1+VS2013+WDK8.1+VirtualBox。理由如下:
     
    ①开发机器和测试机器均安装Win8.1,其中开发机器安装的是64位Win8.1,测试机器安装的是32位Win8.1。为什么装Win8.1?因为我平时电脑上装的就是Win8.1,Win10太新,WinXP太老。所以Win7和Win8.1是最合适的,当然以下环境配置,对于Win7和Win8.1来说,几乎都是一样的,你完全可以在Win7上按照本文进行配置。测试机器之所以安装32位系统,是因为64位系统只能装64位的驱动,要装32位的驱动,只能使用32位系统,刚开始学驱动开发,从32位驱动入手比较方便些,而且64位驱动需要签名才能安装,否则要让系统进入驱动测试模式,才能安装未签名的64位驱动,而32位的没有这个限制,未签名的驱动也能安装,搞起来更方便。
     
    ②为什么选择VisualStudio2013+WDK8.1?其实你可以选择VS2012+WDK8.0或VS2015+WDK10,其实它们配置下来都区别不大。不过因为我平时用的就是VS2013,索性就装了WDK8.1。需要注意的是WDK10可以开发Win10、Win8.1、Win8、Win7(以及对应的服务器版的操作系统)的驱动,WDK8.1可以开发Win8.1、Win8、Win7的驱动(不过实验证明大部分WDK8.1开发出来的针对Win8.1生成的驱动可以直接安装到Win10上),WDK7.1可以开发Win7、WinVista、WinXP的驱动。由于WinXP已经淘汰,且WDK7.1无法直接整合到VisualStudio上,故把它Pass掉。
     
    ③为什么选择VirtualBox,其实你可以选择VMware或真机,在配置上也没有多大的差异,因为WDK8.0以后的环境配置很简单,简单来说就是开发机和测试机都联网后,在测试机上安装一个EXE,在开发机的VisualStudio上输入它的计算机名、用户名、密码,然后就OK了。此后在VisualStudio中生成解决方案,它会自动帮你把驱动拷贝到虚拟机上并安装好。如果要单步调试,也只需配置一下调试串口就行了。所以用什么都一样,我之所以用VirtualBox是因为平时都用它,VirtualBox开源、免费,而且不像VMware那样搞一大堆启动项、服务、多个网卡,感觉很干净。
     
    配置下来的驱动开发环境大致如下图(图盗自MSDN)
    测试机器可以是虚拟机,也可以是真机。开发机器和测试机器通过两条线连接起来,其中一条是网线,有了网线连接,VisualStudio才能在你点击生成解决方案的时候,把驱动文件拷贝过去并安装好。但仅有网线,只能进行用户态程序的调试(用过VS远程调试功能的都知道),包括UMDF(用户模式驱动程序),而对于KMDF(内核模式驱动程序),无法仅通过网线来调试,为什么呢?因为内核模式下的驱动程序,在被调试,被中断时,整个操作系统都是暂停的,自然没有程序能继续执行并通过socket把调试数据发到开发机器上。所以为了调试内核模式驱动程序,还需要在开发机器和测试机器间连接起另一根线来,这根线可以是USB线、1394线或串口线。本文只讲串口线的方式,因为VirtualBox和VMware都支持虚拟串口,用起来很方便。如果测试机器是真机,则需要买条串口线来把它们连起来,淘宝有售,10块包邮哦!当然,如果测试机是虚拟机,不需要买网线和串口线,因为虚拟机已经提供了虚拟的线了。
    如果要使用USB或1394可以参考MSDN文档:https://msdn.microsoft.com/zh-cn/library/windows/hardware/hh439376
     
    步骤一:
    先安装VisualStudio2013,再安装WDK8.1,这步没有什么悬念
     
    步骤二:在虚拟机中装好32位的Win8.1系统。并在VirtualBox中配置一下网络,把网络连接方式改为“桥接网卡”,“界面名称”选择你的真机上能上网的那块网卡。
    为什么要用“桥接网卡”方式来让虚拟机中的系统联网,而不用默认的“网络地址转换(NAT)”?因为如果使用“网络地址转换(NAT)”的话,对于虚拟机来说,你的真机相当于路由器,虚拟机相当于你的子局域网下的一台机器。也就是说你的真机和虚拟机并不在一个局域网中,你们在“网上邻居”中看不到彼此,那样的话你通过计算机名无法访问到虚拟机,那样搞起来会比较麻烦。所以使用“桥接网卡”方式。VMware中也有类似的设置。如果测试机器也是真机的话,只要开发机器和测试机器都连到同一个路由器上就没有问题了。
     
     
    然后配置一下串口,如下图所示,启用串口,端口编号COM1,端口模式“主机管道”,路径/地址(即管道名字)设为“\.pipecom_1”。
    端口模式里面的其它模式是什么意思呢?简单来说:
    “未连接”:效果就是对虚拟机来说,它的电脑主板上有串口,但是什么都没插。
    “主机管道”:就是把虚拟机的串口映射到宿主机(我们的真机)的命名管道上,命名管道是Windows系统提供的一种进程间通信的方式,用过命名管道的程序员一定对上面这个“\.pipe”很熟悉。
    “主机设备”:就是把虚拟机的串口映射到宿主机的真实串口上,这时,我们真机的主板上的串口就不属于我们了,变成了虚拟机的私有财产去了,当我们在真机的窗口上插个设备上去后,实际上是插到了虚拟机里。
    “裸文件”:貌似是把虚拟机的串口映射到一个宿主机中的一个文件句柄上?然后用ReadFile和WriteFile读写?没用过
    “TCP”:把虚拟机的串口映射到宿主机的socket套接字上
    当然这里只是科普一下,实际操作选“主机管道”并输入“\.pipecom_1”就行了,其中的“com_1”是管道名,自己取的,你可以自己取一个不一样的。
     
     
    VMware的设置如下,首先把虚拟打印机移除掉,因为它占用了COM1,当然你也可以不移除,那样调试串口就是用COM2,为了方便统一,好讲后面的步骤,统一使用COM1好了,果断移除虚拟打印机。
     
    VMware的网络设置和串口设置直接看下图,不再赘述了。
     
     
    步骤三:进入虚拟机中的系统,首先关闭UAC,然后为系统的Windows用户账户设置密码。因为待会儿要在VS中输入虚拟机的计算机名、用户名、密码进行连接,没有密码的话岂不是谁都可以连接你,那怎么行,不行。完成后重启一下虚拟机。
     
    步骤四:在开发机的WDK安装目录下找到“WDK Test Target Setup”安装包,安装WDK8.1的时候如果是安装到默认路径,那么应该在“C:Program Files (x86)Windows Kits8.1Remote”文件夹下,有ARM、X64、X86版,由于我的测试机是32位系统,故选择X86文件夹下的“WDK Test Target Setup x86-x86_en-us.msi”,把这个安装包拷出来拿到虚拟机里进行安装。WDK10的路径可能有所不同,但只要在WDK安装目录下搜索“Remote”或“WDK Test Target”就能找到。
     
    步骤五:在开发机器上打开VisualStudio,点击"DRIVER"-"Test"-"Configure Computers",如果VS没有"DRIVER"这个菜单项,说明WDK没有装好。
     
     
    在弹出的"Computer Configuration"对话框中点击"Add New Computer",然后在"Computer name"中输入虚拟机的计算机名,下面的选项第一项“Provison computer and automatically configure debugers”是全自动,方便是方便,不过它不会自动设置调试串口。所以选择第二项“Provision computer and choose debuger settings”。
     
     
    点击下一步,照着下图进行设置,连接方式"串口",波特率默认115200,勾选管道,勾选自动重连,管道名"\.pipecom_1",然后点击下一步。
     
     
    如果连接成功的话会要求你输入虚拟机的用户名和密码。如果出现连接失败,请检查你的真机和虚拟机能否相互ping同,你在网络邻居(网络)中能否看到彼此的计算机名。
     
     
    用户名和密码输入正确后,他们两边就开始噼里啪啦一顿乱搞了,期间虚拟机还会注销、重启、打开应用商店、自动安装一堆东西,总之你要做的事情就是冲一杯咖啡,烤一根热狗,边享受边等待美好世界的来临。
     
     
    几分钟后,随着进度条滚到底以及"Complete"字样的出现,世界就晴朗了。点击一下"下一步"和"完成",从此开启我们的社会主义和谐生活。
     
    步骤六:新建一个驱动项目,比如新建一个KMDF项目
     
    VS为我们生成的解决方案中有两个项目,其中KMDF Driver用于生成驱动程序文件,KMDF Driver Package用于部署安装测试驱动。打开KMDF Driver Package项目的属性对话框,找到"配置属性"-"Driver Install"-"Deployment",在此选项卡上,勾选"Enable deployment","Target Computer Name"就选择刚才配置好的虚拟机的机器名。"Driver Installation Options"选择"Hardware ID Driver Update",然后输入ID,ID输什么呢,可以在KMDF Driver项目中的inf文件里找,inf文件里的[Standard.NT]节中有ID,照着填入即可,然后点确定。
     
    完成了上面的步骤以后,每次你点击生成解决方案,它会自动把生成好的驱动程序传到虚拟机中并自动安装好,下图就是虚拟机中已经装好的可爱的虚拟设备。
     
     
    接下来如果你直接点调试运行,会发现驱动自动装好了,也进入调试中了,可以手动点“全部中断(暂停调试)",但是代码中的断点断不下来!这里还要注意一点,当你点击调试运行后,紧接着马上就点“全部中断(暂停调试)”,然后再点继续调试,不出意外的话就能命中断点了。至于为什么?这个问题太深奥,天机暂时还没泄露,等天机泄露给我了,我再来更新文章说明。
     
    下面就是激动人心的DriverEntry中的断点命中图,注意右下角的“Debugger Immediate Window”实际上就是嵌入到VisualStudio中的WinDbg,用法是一样的哦。
     
     
     
    还有更多高级、好用、方便的功能。具体参照MSDN上的文档来,驱动开发资料入口:https://msdn.microsoft.com/zh-cn/windows/hardwa
    delphi lazarus opengl 网页操作自动化, 图像分析破解,游戏开发
  • 相关阅读:
    Sample XPS Documents Download
    触发器中的inserted表和deleted表
    Using freewheel.labs.autodesk.com to auto generate preview images of DWF files on your web site
    解除SQL对组件"Ad Hoc Distributed Queries"的"STATEMENT'OpenRowset OpenDatasource"的访问
    读写xps
    XPS文件,在Windows XP下的打开查看阅读和打印方法。
    Learning to Reference Inserted and Deleted Tables
    Get value from updated, inserted and deleted
    Reinstall Microsoft Helper Viewer
    如何查找文件的IFilter
  • 原文地址:https://www.cnblogs.com/delphi-xe5/p/9484129.html
Copyright © 2011-2022 走看看