用Visual Studio 2015成功编译、发布UMDF驱动到目标机!!
开发工具:Visual Studio 2015企业版
主 机:windows10 X64企业版,主机是安装了Visual Studio 2015的操作系统,主要进行驱动开发和调试。
目 标 机:windows10 X86企业版,目标机是安装和调试驱动的操作系统,和主机是分离的独立的操作系统。
虚 拟 机:VMWear Workstation 12 Pro
前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版本和WDK版本保证一致,如果不一致会造成Visual Studio 2015里面C/C++的宏定义和使用的WDK不匹配,严重影响驱动程序的编译!关于这个问题,可以看这篇文章:http://www.cnblogs.com/sunylat/p/6286527.html
好了,下面我就告诉大家我是如何一步步实现这个目标的!
一,配置目标机:让目标机能够和主机通讯,成为一个可以进行我们开发的驱动安装和调试的操作系统。
1,添加和设置通讯的串口:我们通讯采用串口方式,默认情况下,在VM里面安装的操作系统并没有打开串口,需要我们手动添加,下面就是添加的过程。注意:添加端口时候,虚拟机中的操作系统必须是关机状态才可以添加。
A,在想要设置为目标机的操作系统上鼠标右键->设置。

B,在虚拟机设置里面点击下面的“添加”按钮,随后在弹出的“添加硬件向导”里面,选中左侧列表中的“串行端口”,随后点击“下一步”按钮。

C,选中“输出到命名管道”,随后点击“下一步”按钮。

D,在这里,点击中间的下拉列表,选择“另一端是应用程序”,其它两项不需要修改,上面一项是命名管道名称;下面是启动时连接,我们这两项保持默认就可以了!随后点击“完成”按钮。

E,这是最终配置截图,如果配置都正确了,点击“确定”按钮,完成串口添加和设置。

二,设置目标机:让目标机成为一个可以安装和调试我们开发驱动的环境。
1,允许目标机成为调试环境:执行两个DOS命令。
启动目标机操作系统后,以管理员权限打开DOS窗口,把盘符转换到C盘根目录下,随后依次执行下面两条命令:
A,bcdedit /debug on
B,bcdedit /dbgsettings serial debugport:1 baudrate:115200
上面两条命令执行时候,如果正常,应该没有任何错误显示,如果一切正常,那么随后我们应该重新启动一下当前操作系统!
操作系统启动完毕后,如果我们想验证上面命令操作是否成功,可以以管理员权限打开DOS窗口,执行这个命令:bcdedit /dbgsettings
如果我们这些DOS命令设置成功了,那么这个验证的DOS命令返回信息应该是这样:

2,安装WDK Test Target Setup程序:安装这个程序后,才可以在主机端使用VS2015对目标机进行设置。注意:这个安装程序有两个版本,分别是X86和X64,对应不同平台的操作系统,因为我的目标机是X86,所以我选择的是:“C:\Program Files (x86)\Windows Kits\10\Remote\x86\WDK Test Target Setup x86-x86_en-us.msi”,如果你的目标机是X64平台,你应该用这个安装文件:“C:\Program Files (x86)\Windows Kits\10\Remote\x64\WDK Test Target Setup x64-x64_en-us.msi”。把这个安装文件拷贝到目标机中,随后安装,安装完毕后重新启动一下操作系统!
通过上面的设置,我们已经完成了目标机的准备工作,剩下就是如何在VS2015里面建立同目标机的通讯了!!
二,在Visual Studio 2015里同目标机建立通讯:
A,在VS2015的菜单中,点击“Driver”->"Test"->"Configure Devices"。

B,

C,

D,上面点击“下一步”按钮后,就进入了主机和目标机建立通讯的过程,这个过程需要一些时间,要耐心等待完成,不要进行其它操作,期间目标机会进行多次重启操作,都是自动完成,我们不要进行任何人为干预!如果一切顺利,我们就会成功建立主机和目标机的通讯,如下图:

三,编写测试驱动程序:
A,点击“新建项目”,在Visual C++里面选择“WDF”,随后在右侧选择指定项目,随后点击“确定”按钮。

B,VS2015使用UMDF模板,自动给我们建立了一个驱动工程,包含了完整的驱动需要的各种文件,我们暂时不对这些文件做任何修改,为了保证这些文件可以正常编译,从而测试发布到目标机中!

C,对这个驱动进行编译,如果一切顺利,那么从输出窗口,我们应该能看到编译成功的信息!

四,发布到目标机:把我们编写的驱动程序通过主机和目标机建立的通讯,发布到目标机中!在发布时候,确保目前目标机已经在VM中处于开机正常运行状态!!!
A,在当前工程上鼠标右键,点击“属性”,随后在左侧选择“Driver Install”->"Development",随后右侧选择正确就可以发布了,选择项目按照下面截图标识!

B,点击VS2015的菜单“生成”->“部署 UMDF 2 Driver1”,注意,这里面的“UMDF 2 Driver1”是我当前建立的工程名称,如果你的工程名称和我的不一样,那么只是后面的工程名称不同而已,也是选择这个菜单项!

C,正在发布的截图,输出窗口会不断出现各种信息!

D,发布成功的截图:经过一小段时间等待,最终提示信息,我们的驱动发布成功了!!

五,验证驱动是否发布成功:进入VM里面的目标机,随后查找我们发布的驱动程序!
A,在我的电脑上鼠标右键,随后在弹出菜单中点击“管理”。

B,点击左侧“设备”,看右侧的“Samples”下面,是不是已经有了我们发布的驱动?

WDK10下载:https://developer.microsoft.com/zh-cn/windows/hardware/windows-driver-kit
WDK10必须在安装完SDK之后才安装它!!SDK在安装VS2015时候可以安装!
MSDN驱动开发教程:https://msdn.microsoft.com/zh-cn/library/windows/hardware/ff554811(v=vs.85).aspx
微软官方提供的Windows 10驱动例子:https://github.com/Microsoft/Windows-driver-samples
用Visual Studio 2015成功编译、发布UMDF驱动到目标机!!的更多相关文章
- 用Visual Studio 2015 编写第一个UMDF驱动遇到的问题!!
前提:Visual Studio 2015已经成功安装了驱动环境,WDK都已经完全正常安装了,在Visual Studio 2015的菜单可以看到"Driver"菜单项了.这说明已 ...
- Visual Studio 2015下编译zmq项目下其他项目踩进的项目引用坑
PS.在之前的一篇文章中介绍了如何用Visual Studio 2015编译zmq,在编译同解决方案中除了libzmq之外的项目例如inproc_thr时会报错误,具如下: Severity Code ...
- Visual Studio 2015 Update 2 发布
2016年3月30日,微软发布了Visual Studio 2015 Update 2 . 更新内容: Visual Studio Visual Studio Tools for Apache Co ...
- Windows 7, Visual Studio 2015下编译Webkit
因工作需要,需要编译Windows版本的Webkit,中间走了不少弯路,都记录下来,供大家参考!也随时欢迎大家讨论(QQ群:345802342) 整个编译工作参考的是官方文档:https://webk ...
- 2015-12-1 Visual Studio 2015 Update 1发布
http://news.cnblogs.com/n/533856/ 下载地址 文件名 cn_visual_studio_enterprise_2015_with_update_1_x86_x64_dv ...
- Visual Studio 2015 下 编译 libpng
libpng https://github.com/glennrp/libpng zlib https://github.com/madler/zlib/releases https://github ...
- Visual Studio 2015正式发布
Windows 10 RTM正式版要7月29日发布,微软的另一个重磅软件Visual Studio 2015已经率先发布,今天如期放出了正式版本.Visual Studio 2015包括许多新功能和更 ...
- 用Visual Studio 2015 编译张帆的第一个NT式驱动,并且成功安装到Windows XP里面!!!
开发工具:Visual Studio 2015 企业版 目 标 机:Windows XP X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...
- 用Visual Studio 2015 编译张帆的第一个WDM驱动,并且成功安装到Windows 10里面!!!
开发工具:Visual Studio 2015 企业版 目 标 机:Windows 10 X86 前提:我们已经成功安装了Visual Studio 2015以及WDK,而且更重要一点是一定要SDK版 ...
随机推荐
- MyBatis3 用log4j在控制台输出 SQL
用log4j在控制台输出 SQL 在spring-mybatis.xml中配置 <bean id="sqlSessionFactory" class="org.my ...
- 3.Hadoop集群搭建之Zookeeper安装
前期准备 下载Zookeeper 3.4.5 若无特殊说明,则以下操作均在master节点上进行 1. 解压Zookeeper #直接解压Zookeeper压缩包 tar -zxvf zookeepe ...
- #define中 #与##的神奇用法
本文整理自csdn. #define f(a,b) a##b #define d(a) #a #define s(a) d(a) void main( void ) { puts(d ...
- Elasticsearch-PHP 命名空间
命名空间 客户端有很多命名空间,通常能够暴漏出他管理的功能.命名空间对应Elasticsearch各种管理的端点.如下是完成的命名空间的列表: 命名空间 功能 indices() 以指数为中心的统计数 ...
- go_内建变量类型
bool, string (u)int, (u)int8, (u)int16, (u)int32, (u)int64, uintptr (uintptr 是指针) byte, rune(表示字符cha ...
- UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr!
UNITY调用安桌方法出现 JNI: Init'd AndroidJavaClass with null ptr! 原因是····· 得运行在一个真正的Android设备上! 得运行在一个真正的And ...
- Java核心技术-接口、lambda表达式与内部类
本章将主要介绍: 接口技术:主要用来描述类具有什么功能,而并不给出每个功能的具体实现.一个类可以实现一个或多个接口. lambda表达式:这是一种表示可以在将来的某个时间点执行的代码块的简洁方法. 内 ...
- Python将阿拉伯数字转化为中文大写-乾颐堂
利用Python将阿拉伯数字转化为中文大写,其实最麻烦的地方就是中间空多个0的问题,这种情况下,采用拆分法则,将一个大数字,先拆分成整数部分和小数部分,再对整数部分按照仟.万.亿.兆分位拆分为四个字符 ...
- Django框架 之 信号
Django中提供了“信号调度”,用于在框架执行操作时解耦.通俗来讲,就是一些动作发生的时候,信号允许特定的发送者去提醒一些接受者. Django内置信号 Model signals pre_init ...
- [原创]升级SOUI WKE以支持_blank
由于WKE的精简模式,导致原有的SOUI不支持针对诸多内容的调用,此处针对WKE的部分内容做升级,以支持对应的功能. 目的:使WKE可以_blank弹出新窗口. 由国人 海绵宝宝维护的WKE新分支:h ...