一. 主机OS为Win8.1 x64,在此OS上安装VS2013 With Update5和WDK8.1
二.在虚拟机中装好64位的Win8.1系统。并在VirtualBox中配置一下网络,把网络连接方式改为“桥接网卡”,“界面名称”选择你的真机上能上网的那块网卡。
为什么要用“桥接网卡”方式来让虚拟机中的系统联网,而不用默认的“网络地址转换(NAT)”?因为如果使用“网络地址转换(NAT)”的话,对于虚拟机来说,你的真机相当于路由器,虚拟机相当于你的子局域网下的一台机器。也就是说你的真机和虚拟机并不在一个局域网中,你们在“网上邻居”中看不到彼此,那样的话你通过计算机名无法访问到虚拟机,那样搞起来会比较麻烦。所以使用“桥接网卡”方式。VMware中也有类似的设置。如果测试机器也是真机的话,只要开发机器和测试机器都连到同一个路由器上就没有问题了。
然后配置一下串口,如下图所示,启用串口,端口编号COM1,端口模式“主机管道”,路径/地址(即管道名字)设为“\\.\pipe\com_1”。
端口模式里面的其它模式是什么意思呢?简单来说:
“未连接”:效果就是对虚拟机来说,它的电脑主板上有串口,但是什么都没插。
“主机管道”:就是把虚拟机的串口映射到宿主机(我们的真机)的命名管道上,命名管道是Windows系统提供的一种进程间通信的方式,用过命名管道的程序员一定对上面这个“\\.\pipe\”很熟悉。
“主机设备”:就是把虚拟机的串口映射到宿主机的真实串口上,这时,我们真机的主板上的串口就不属于我们了,变成了虚拟机的私有财产去了,当我们在真机的窗口上插个设备上去后,实际上是插到了虚拟机里。
“裸文件”:貌似是把虚拟机的串口映射到一个宿主机中的一个文件句柄上?然后用ReadFile和WriteFile读写?没用过
“TCP”:把虚拟机的串口映射到宿主机的socket套接字上
当然这里只是科普一下,实际操作选“主机管道”并输入“\\.\pipe\com_1”就行了,其中的“com_1”是管道名,自己取的,你可以自己取一个不一样的。
三.进入虚拟机中的系统,首先关闭UAC,然后启用系统的Administrator用户账户并设置密码。因为待会儿要在VS中输入虚拟机的计算机名、用户名、密码进行连接,完成后重启一下虚拟机。
四.在开发机的WDK安装目录下找到“WDK Test Target Setup”安装包,安装WDK8.1的时候如果是安装到默认路径,那么应该在“C:\Program Files (x86)\Windows Kits\8.1\Remote”文件夹下,有ARM、X64、X86版,由于我的测试机是64位系统,故选择X64文件夹下的“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",然后点击下一步。最好关闭两个系统的防火墙。
如果连接成功的话会要求你输入虚拟机Administrator的用户名和密码。如果出现连接失败,请检查你的真机和虚拟机能否相互ping同,你在网络邻居(网络)中能否看到彼此的计算机名。
五.安装虚拟机系统对应的符号表,并在VS的工程中设置:或配置环境变量:在系统的环境变量中新建一个_NT_SYMBOL_PATH系统变量,值为C:\symbols;
六.打开VS2013,建立新工程,即可看到新的驱动工程项目。新建一个Networking的NDIS工程。VS为我们生成的解决方案中有两个项目,其中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,照着填入即可,然后点确定。
* KDPrint没有输出的解决办法:
在虚拟机的OS中创建
[HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Control/Session Manager/Debug Print Filter]
DEFAULT=dword:0000000f
重启虚拟机,重启后需要重新配置连接下。
* Debug NDISlwf driver
1. 将Build出来的.cat, .sys, .inf文件拷贝到虚拟机中。
2. 在虚拟机中安装驱动,步骤如下,
(1) 打开“网络和共享中心”。
(2) 右击“本地连接”或“无线网络”,选择“属性”。
(3) 在弹出的“本地连接 属性”对话框中选中“常规”属性页,点击“安装”按钮。
(4) 在弹出的“选择网络组件类型”对话框中选中“服务”,然后点击“添加”按钮。
(5) 在弹出的“选择网络服务”对话框中点击“从磁盘安装”按钮。
(6) 在弹出的“从磁盘安装”对话框中点击“浏览...”按钮。“netsf.inf”文件,点击“打开”按钮,确定。
(7) 在弹出的“选择网络服务”对话框中选中“Passthru”,点击“确定”按钮。
(8) 在安装过程中对弹出的数字签名对话框都要点击“确认”按钮。
(9) 安装完成后,“Passthru”就出现在了组件列表中
3.在VS中启动Debug,并设置断点。
4.在虚拟机中管理员权限下的CMD中输入net strart nidslwf,如果没有进入断点,先stop一下,再start,这样应该就能进入断点了。
使用VS2015+WDK10+WKD10可能遇到的问题
Project properties
Debugging
Remote Computer Name, drop down and select Configure...