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

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

2016年03月16日 14:56:40

阅读数:11420
开发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,端口模式“主机管道”,路径/地址(即管道名字)设为“\\.\pipe\com_1”。
端口模式里面的其它模式是什么意思呢?简单来说:
“未连接”:效果就是对虚拟机来说,它的电脑主板上有串口,但是什么都没插。
“主机管道”:就是把虚拟机的串口映射到宿主机(我们的真机)的命名管道上,命名管道是Windows系统提供的一种进程间通信的方式,用过命名管道的程序员一定对上面这个“\\.\pipe\”很熟悉。
“主机设备”:就是把虚拟机的串口映射到宿主机的真实串口上,这时,我们真机的主板上的串口就不属于我们了,变成了虚拟机的私有财产去了,当我们在真机的窗口上插个设备上去后,实际上是插到了虚拟机里。
“裸文件”:貌似是把虚拟机的串口映射到一个宿主机中的一个文件句柄上?然后用ReadFile和WriteFile读写?没用过
“TCP”:把虚拟机的串口映射到宿主机的socket套接字上
当然这里只是科普一下,实际操作选“主机管道”并输入“\\.\pipe\com_1”就行了,其中的“com_1”是管道名,自己取的,你可以自己取一个不一样的。
 
 
VMware的设置如下,首先把虚拟打印机移除掉,因为它占用了COM1,当然你也可以不移除,那样调试串口就是用COM2,为了方便统一,好讲后面的步骤,统一使用COM1好了,果断移除虚拟打印机。
 
VMware的网络设置和串口设置直接看下图,不再赘述了。
 
 
步骤三:进入虚拟机中的系统,首先关闭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”就能找到。
 
步骤五:在开发机器上打开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,勾选管道,勾选自动重连,管道名"\\.\pipe\com_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

Win8.1+VS2013+WDK8.1+VirtualBox or VMware 驱动开发环境配置的更多相关文章

  1. VS2013+WDK8.1 驱动开发环境配置

    Windows Driver Kit 是一种完全集成的驱动程序开发工具包,它包含 WinDDK 用于测试 Windows 驱动器的可靠性和稳定性,本次实验使用的是 WDK8.1 驱动开发工具包,该工具 ...

  2. (OpenCV) VS2013 + opencv-2.4.10.exe + Windows 10 开发环境配置

    主要配置2点: - Windows 环境变量. - VC++ 配置. STEP BY STEP: 1. 双击 ”opencv-2.4.10.exe“,解压到本地文件夹 “C:\ ". 2. ...

  3. 用Windows+VirtualBox搭建嵌入式Linux开发环境

    Windows+VirtualBox的嵌入式Linux开发环境的搭建 最近一直在学习Linux的设备驱动编写,一直是在物理机上安装的Ubuntu进行的,但是在Ubuntu12.04的系统中,已经不能用 ...

  4. win8 64位系统,安装JDK的步骤及其环境配置

    工具/原料 jdk-8u51-windows-x64.exe 下载地址:::http://www.cr173.com/soft/55503.html#address jdk 安装步骤 1:到oracl ...

  5. 75.VS2013和opencv3.1.0开发环境配置

    首先要做的就是 开发环境配置,具体过程如下: Step 1:OpenCV环境变量配置 我的电脑--->属性--->高级系统设置--->高级--->环境变量--->系统变量 ...

  6. win7 vs2012+wdk8.0 搭建wdf驱动开发环境

    开发环境搭建:系统:win7 x64工具:vs2012 + WDK8.0插件:wdfcoinstaller.msi(1)先安装vs2012,再安装wdk8.0,这样在打开vs2012时可以创建wind ...

  7. vs2012+wdk8.0 搭建wdf驱动开发环境

    开发环境搭建: 系统:win7 x64 工具:vs2012 + WDK8.0 插件:wdfcoinstaller.msi (1)先安装vs2012,再安装wdk8.0,这样在打开vs2012时可以创建 ...

  8. LNMP虚拟机开发环境配置--vagrant+virtualbox+ubuntu14.04

    工作一直用的是别人打包好的虚拟机开发环境,感觉确实很酷.所以准备自己配个开发环境,为之后自己开发一些有趣的东西做准备. ok,开始~~~ 一.安装软件 vagrant和virtualbox 此处需注意 ...

  9. OpenCV 2.4.9 +VS2013 开发环境配置

    OpenCV 的全称是:Open Source Computer Vision Library.OpenCV是一个基于(开源)发行的跨平台计算机视觉库,可以运行在Linux.Windows和Mac O ...

随机推荐

  1. C#基础知识之图解TCP IP》读书笔记

    一.网络基础知识 1. 计算机使用模式的演变 2.协议 协议就是计算机与计算机之间通过网络实现通信事先达成的一种“约定”.这种“约定”使那些由不同厂商的设备.不同的CPU以及不同的操作系统组成的计算机 ...

  2. java ArrayList迭代过程中删除

    第一种迭代删除方式: 第二种迭代删除方式: 第三种迭代删除: 第四种迭代删除: 第五种迭代删除: 第六种: ArrayList中remove()方法的机制,首先看源码: 真正的删除操作在fastRem ...

  3. 常用的webpack 配置

    const path = require('path'); let HtmlWebpackPlugin = require('html-webpack-plugin'); let VueLoaderP ...

  4. 一个web应用的诞生(6)

    之前登录注册的功能都已经完成,但是登录成功回到首页发现还是白茫茫的一片,对的,title一直都写得博客,那么最终目的也是写出一个轻博客来,但是,在发表文章之前是不是要先记录一下登录状态呢? 用户登录 ...

  5. CSS札记(二):级联与继承

    一.级联 概念:级联(The cascade),CSS是Cascading Style Sheet的简写,说明级联是非常重要的.从表层来看,级联表明CSS规则的顺序问题,但是级联远比这个复杂,在所有的 ...

  6. 关于web网页截图的问题(html2canvas插件)

    import html2canvas from 'html2canvas' import jpg from '@/assets/1.jpg';     htmlToImage=(element, ca ...

  7. 【shell】sed指定追加模式空间的次数

    最近遇到一个文本复制的场景,需要把文本的每一行都重复输出三次. 这个用awk或者sed实现都还是很简单的. sed代码: [root]$ seq | sed '{h;G;G}' 现在的问题是,如果每行 ...

  8. ideal 工具jdk环境配置

    1.File  >>  Other Settings >> Default Project Structure ... 2.Project  >>  jdk_vie ...

  9. 线程优先级队列( Queue)

    Python的Queue模块中提供了同步的.线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue.这些队列都实现 ...

  10. ubuntu下,VSCode采用cmake编译C++工程

    首先在VSCode中下载CMake和CMake Tools两个插件. 选中CMake Tools,可以看到在VSCode中如何使用cmake编译C++工程的教程. 官网教程 最重要且最实用,看这个网址 ...