Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置
Posted encoderlee
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)
![](https://image.cha138.com/20220618/dee6634e134c4fa0a72572b989599333.jpg)
测试机器可以是虚拟机,也可以是真机。开发机器和测试机器通过两条线连接起来,其中一条是网线,有了网线连接,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,这步没有什么悬念 WDK下载:https://msdn.microsoft.com/zh-cn/windows/hardware/hh852365
步骤二:在虚拟机中装好32位的Win8.1系统。并在VirtualBox中配置一下网络,把网络连接方式改为“桥接网卡”,“界面名称”选择你的真机上能上网的那块网卡。 为什么要用“桥接网卡”方式来让虚拟机中的系统联网,而不用默认的“网络地址转换(NAT)”?因为如果使用“网络地址转换(NAT)”的话,对于虚拟机来说,你的真机相当于路由器,虚拟机相当于你的子局域网下的一台机器。也就是说你的真机和虚拟机并不在一个局域网中,你们在“网上邻居”中看不到彼此,那样的话你通过计算机名无法访问到虚拟机,那样搞起来会比较麻烦。所以使用“桥接网卡”方式。VMware中也有类似的设置。如果测试机器也是真机的话,只要开发机器和测试机器都连到同一个路由器上就没有问题了。
![](https://image.cha138.com/20220618/9d7d6ac684db408cb827186f6fc775ca.jpg)
![](https://image.cha138.com/20220618/95ddc8ca29594ff38a76b4536be2b2fb.jpg)
VMware的设置如下,首先把虚拟打印机移除掉,因为它占用了COM1,当然你也可以不移除,那样调试串口就是用COM2,为了方便统一,好讲后面的步骤,统一使用COM1好了,果断移除虚拟打印机。
![](https://image.cha138.com/20220618/57b3f9dff09d469e9aecdef3b20a9158.jpg)
VMware的网络设置和串口设置直接看下图,不再赘述了。
![](https://image.cha138.com/20220618/63e93bf08fe54c27a4b19a0c24859c19.jpg)
![](https://image.cha138.com/20220618/1d69880d17eb45b38775919ddcb3041e.jpg)
步骤三:进入虚拟机中的系统,首先关闭UAC,然后为系统的Windows用户账户设置密码。因为待会儿要在VS中输入虚拟机的计算机名、用户名、密码进行连接,没有密码的话岂不是谁都可以连接你,那怎么行,不行。完成后重启一下虚拟机。
步骤四:在开发机的WDK安装目录下找到“WDK Test Target Setup”安装包,安装WDK8.1的时候如果是安装到默认路径,那么应该在“C:\\Program Files (x86)\\Windows Kits\\8.1\\Remote”文件夹下,有ARM、X64、X86版,由于我的测试机是32位系统,故选择X86文件夹下的“WDK Test Target Setup x86-x86_en-us.msi”,把这个安装包拷出来拿到虚拟机里进行安装。WDK10的路径可能有所不同,但只要在WDK安装目录下搜索“Remote”或“WDK Test Target”就能找到。
![](https://image.cha138.com/20220618/f802fac845454c50b2e46f5b84c5d741.jpg)
步骤五:在开发机器上打开VisualStudio,点击"DRIVER"-"Test"-"Configure Computers",如果VS没有"DRIVER"这个菜单项,说明WDK没有装好。
![](https://image.cha138.com/20220618/44d1cd9d92b148d0ace7838d4c6570f5.jpg)
![](https://image.cha138.com/20220618/fbcb43cc540f419fbd941c28adfe7f2d.jpg)
点击下一步,照着下图进行设置,连接方式"串口",波特率默认115200,勾选管道,勾选自动重连,管道名"\\\\.\\pipe\\com_1",然后点击下一步。
![](https://image.cha138.com/20220618/3d090bf1f97d432dafc7d7287086bbfe.jpg)
![](https://image.cha138.com/20220618/1802dc4ba92640b392d5c2b287e4fc0b.jpg)
![](https://image.cha138.com/20220618/3f928e176e6c43c5a7248d7b2efb8ea2.jpg)
步骤六:新建一个驱动项目,比如新建一个KMDF项目
![](https://image.cha138.com/20220618/79e704bd5fc14954b736f688b72d5a53.jpg)
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,照着填入即可,然后点确定。
![](https://image.cha138.com/20220618/2564bbab0cab4737a0e458acb2661fa3.jpg)
完成了上面的步骤以后,每次你点击生成解决方案,它会自动把生成好的驱动程序传到虚拟机中并自动安装好,下图就是虚拟机中已经装好的可爱的虚拟设备。
![](https://image.cha138.com/20220618/561eb50f6a234f33bb028b07d7f1ff8d.jpg)
接下来如果你直接点调试运行,会发现驱动自动装好了,也进入调试中了,可以手动点“全部中断(暂停调试)",但是代码中的断点断不下来!这里还要注意一点,当你点击调试运行后,紧接着马上就点“全部中断(暂停调试)”,然后再点继续调试,不出意外的话就能命中断点了。至于为什么?这个问题太深奥,天机暂时还没泄露,等天机泄露给我了,我再来更新文章说明。
下面就是激动人心的DriverEntry中的断点命中图,注意右下角的“Debugger Immediate Window”实际上就是嵌入到VisualStudio中的WinDbg,用法是一样的哦。
![](https://image.cha138.com/20220618/8e54ff71168745babe8f4964d18298ce.jpg)
还不清楚的直接上MSDN看视频教程: 硬件开发视频集合:https://msdn.microsoft.com/zh-cn/windows/hardware/gg454522 与本文相关的3个视频: https://msdn.microsoft.com/windows/hardware/drivers/develop/visual-studio-driver-development-environment https://msdn.microsoft.com/library/windows/hardware/dn265573 https://msdn.microsoft.com/windows/hardware/drivers/develop/debugging-a-driver
还有更多高级、好用、方便的功能。具体参照MSDN上的文档来,驱动开发资料入口:https://msdn.microsoft.com/zh-cn/windows/hardware
本文由CharlesSimonyi发表于CSDN博客:http://blog.csdn.net/charlessimonyi/article/details/50904956转载请注明出处
以上是关于Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置的主要内容,如果未能解决你的问题,请参考以下文章
error C2039: 'SetDefaultDllDirectories'错误解决办法