用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不匹配,严重影响驱动程序的编译!关于这个问题,可以看这篇文章:用Visual Studio 2015 编写驱动之前一定要注意的问题!!! - sunylat - 博客园

好了,下面我就告诉大家我是如何一步步实现这个目标的!

一,配置目标机:让目标机能够和主机通讯,成为一个可以进行我们开发的驱动安装和调试的操作系统。

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下载:Download the Windows Driver Kit (WDK) - Windows drivers | Microsoft Learn

 WDK10必须在安装完SDK之后才安装它!!SDK在安装VS2015时候可以安装!

MSDN驱动开发教程:製作您的第一個驅動程式 - Windows drivers | Microsoft Learn

微软官方提供的Windows 10驱动例子:GitHub - microsoft/Windows-driver-samples: This repo contains driver samples prepared for use with Microsoft Visual Studio and the Windows Driver Kit (WDK). It contains both Universal Windows Driver and desktop-only driver samples.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/714413.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里巴巴面试必备:数据库集群知识全面解读!

大家好,我是小米。今天,我们将深入探讨阿里巴巴面试题中一个备受关注的话题:数据库集群。作为技术领域中的一项重要实践,数据库集群不仅是企业架构中的核心组成部分,更是保障系统稳定性和数据可靠性的关键一环。让我们一起来揭秘数据库集群的奥秘吧! 主从复制过程 主从…

手势识别应用介绍

目录 一、功能介绍 二、安装部署说明 2.1 文件目录说明 2.2 手势识别部分 一、功能介绍 这是一个通过摄像头捕获手势,根据不同的手势来做出不同操作的计算机程序。目前可以识别9种手势,可以根据识别到的手势,进行打开应用、增大音量、减小音量…

交友社交软件开发-php交友聊天系统-

为了开发一个高效的交友系统,需要一个完善的信息管理和筛选机制。这个系统应该能够根据用户的个人信息、兴趣爱好、价值观等标准进行筛选,并向用户提供符合他们要求心仪的人的信息。为了实现这个目标,系统可以利用人工智能技术,分…

MySQL基础-----SQL语句之DDL语句

目录 前言 开启登录数据库 一、数据库操作 1.查询所有数据库 2.切换使用数据库 3.查询当前使用的数据库 4.创建数据库 创建一个hello数据库, 使用数据库默认的字符集。 创建一个itheima数据库,并且指定字符集 5.删除数据库 二、表操作 1.查询当前数据库所有…

JAVA的学习日记

JAVA的学习日记(2024.3.1)(b站韩顺平老师课程学习笔记版) ps:捡起忘光光的Java语言 Sublime //1. public是公有,class是类 //2. public class Hello表示Hello是一个类,是一个public公有的类 //3. Hello{…

解决Unable to load class ‘org.gradle.api.attributes.VerificationType‘

在使用AdnroidStudio开发过程中难免会遇到Unable to load class org.gradle.api.attributes.VerificationType报错,可以尝试清理缓存重启解决 打开 File-》Invalidate Caches... 重启AndroidStudio后,重新加载即可,但也不是百分百解决。

【MySQL】:高效利用MySQL函数实用指南

🎥 屿小夏 : 个人主页 🔥个人专栏 : MySQL从入门到进阶 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一. MySQL函数概论二. 字符串函数三. 数值函数四. 日期函数五. 流程函数&#x1…

基于NSFW数据集的违规图片检测系统

目录 一、功能介绍 二、安装部署说明 2.1数据集简介 2.2文件目录说明 一、功能介绍 本程序是一个违规图片检测系统,能够识别用户上传的信息图片,是否包含有敏感(NSFW,Not Safe For Work)信息。 本程序使用雅虎开源的NS…

芯科科技为全球首批原生支持Matter-over-Thread的智能锁提供强大助力,推动Matter加速成为主流技术

智能锁领域的先锋企业U-tec和Nuki选择芯科科技解决方案,成为Matter-over-Thread应用的领先者 致力于以安全、智能无线连接技术,建立更互联世界的全球领导厂商Silicon Labs(亦称“芯科科技”,NASDAQ:SLAB)今…

2024广东水展即将开幕 | 聚焦净水行业热点抢占行业新机遇

2024广东水展即将开幕 | 聚焦净水行业热点抢占行业新机遇 随着消费升级和人们对环境健康的意识增强,人们除了关注净水产品的性能外,对产品的设计、服务、多应用场景化等需求也愈发多样化。节能环保、智能化成为产品迭代升级主要方向。据奥维云网数据显示…

Docker中使用Tomcat并部署war工程

系列文章目录 文章目录 系列文章目录前言一、构建镜像二、运行镜像三、列出正在运行的容器四、停止正在运行的容器 前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文…

物联网技术助力智慧城市安全建设:构建全方位、智能化的安全防护体系

一、引言 随着城市化进程的加速和信息技术的迅猛发展,智慧城市已成为现代城市发展的重要方向。在智慧城市建设中,安全是不可或缺的一环。物联网技术的快速发展为智慧城市安全建设提供了有力支持,通过构建全方位、智能化的安全防护体系&#…

Kali Linux 安装 + 获取 root 权限 + 远程访问

一、什么是Kali kali是linux其中一个发行版,基于Debian,前身是BackTrack(简称BT系统)。kali系统内置大量渗透测试软件,可以说是巨大的渗透系统,涵盖了多个领域,如无线网络、数字取证、服务器、密…

Python读取hbase数据库

1. hbase连接 首先用hbase shell 命令来进入到hbase数据库,然后用list命令来查看hbase下所有表,以其中表“DB_level0”为例,可以看到库名“baotouyiqi”是拼接的,python代码访问时先连接: def hbase_connection(hbase…

red hat 6.9版本7.9版本 忘记root密码重置方法

文章目录 1、重置密码具体步骤Oracle Linux 6.9版本:1、开机到此界面按e2、在以下界面选择后按e3、选择相应内核后按e4、在此界面输入 single 回车5、回到内核界面后按b进入引导系统6、在#后输入passwd root修改密码7、修改密码:8、Reboot重启9、使用新密…

PostgreSQL中int类型达到上限的一些处理方案

使用int类型作为表的主键在pg中是很常见的情况,但是pg中int类型的范围在-2147483648到2147483647,最大只有21亿,这个在一些大表中很容易就会达到上限。一旦达到上限,那么表中便没办法在插入数据了,这个将会是很严重的问…

word文档空格不能有下划线【笔记】

word文档空格不能有下划线 2024-3-1 21:20:24 推荐 word下划线打不出来了,是怎么回事? 问题 字后面打不出来下划线 操作 1.点击文件 左上角,点击“文件”。 2.点击选项 鼠标下滑,点击“选项”。 3.点击常规与保存 点击“…

java基础-mysql

文章目录 mysql基础面试题什么是mysql什么是事务并发事务带来的影响事物的隔离级别索引大表优化什么是池化思想,什么是数据库连接池,为什么要用数据库连接池⾏锁,表锁;乐观锁,悲观锁MySQL主备同步的基本原理SQL什么情况…

[⑥5G NR]: 无线接口协议,信道映射学习

5G系统整体包括核心网、接入网以及终端部分,接入网与终端间通过无线空口协议栈进行连接。无线接口可分为三个协议层:物理层(L1)、数据链路层(L2)和网络层(L3)。 L1:物理…

【python】json转成成yaml中文编码异常显示成:\u5317\u4EAC\u8DEF123\u53F7

姊妹篇:【python】json转成成yaml json数据 {"name": "张三","age": 30,"isMarried": false,"children": [{"name": "小王","age": 5},{"name": "小李",&qu…