原文链接 Windows驱动开发:环境搭建(1)

目前最新的WDK版本为WDK10,最新的IDE为VS2017,但目前的VS2017并不支持驱动开发,根据MS的路线图,新的开发工具还在研发中,所以目前还是用VS2015 Update3 + SDK + WDK10。

学习一门开发技术,首先是搭建环境,这样我们才能直观地感受这门技术,这远比书本上看来的直观。下面,依照目前当前的实际情况,说一下驱动开发环境。

Windows平台

Windows平台以Vista、Windows 7 为分水岭。自Vista开始有了UAC,所以一般的应用开发就Vista为界限;对WDK10来说,因为WDK10支持的最早版本就是Windows7,所以对目前我们进行驱动开发来说,就以Windows 7 位界限。

目前还能支持XP的DDK版本是DDK 7.1,这是最后一个支持XP的版本。

我们开发驱动,肯定至少要支持XP – win10,这也是几乎所有驱动厂商都要支持的。根据我们上面所说,那么我们就需要以下几种组合:

WDK10  —— 针对Windows 7 到 Windows 10的版本

DDK7.1 ——针对的是XP及以后版本

直接看,我们用DDK7.1开发就可以了,但针对新平台的许多特性,DDK7.1并不具备,因此目前阶段我们要搭建以下几种开发、测试环境:

  • VS2015 + WDK10 + 虚拟机WIN10 (32+64)  : 组合一
  • VS2015 + WDK10 + 虚拟机WIN7(32+64)      : 组合二
  • VS2015 + WDK10 + 虚拟机XP                                : 组合三
  • VS2015 + DDK7.1 + 虚拟机WIN10(32+64)    : 组合四
  • VS2015 + DDK7.1 + 虚拟机WIN7(32+64)       : 组合五
  • VS2015 + DDK7.1 + 虚拟机XP                                : 组合六

如果有些环境无法用VS2015直接调试,那么可以考虑用windbg调试。

环境搭建

组合一:

1.创建一个Windows 10 Enterprise版本,因为我本机也是装了这个版本,要与虚拟机一致;

2.增加一个串口,一般我是删除掉打印机占用的COM1,让新增加的串口号为1;

3.对虚拟机进行设置

设置虚拟机系统为内核可调试状态:

bcdedit /set {default} DEBUG YES

bcdedit /set TESTSIGNING ON

设置虚拟机串口调试

bcdedit /debug on

bcdedit /dbgsettings serial debugport:1 baudrate:115200

在WDK10安装目录下(我的是C:\Program files(x86)\windows kits\10)找到文件WDK Test Target Setup x86-x86_en-us.msi和WDK Test Target Setup x64-x64_en-us.msi,拷贝到虚拟机中进行安装。

4.对VS2015进行设置

走到这,发现Network Hostname没有让我们输入的地方啊,还有一个红框把Provisioning Options框起来,是有什么特别的意图吗?到了这部,在网上搜了半天都没搜出来,所以重装了两次VS+WDK,还是没法解决,后面也忘了怎么想着就拉伸了一下,结果你猜怎么着?就下面这副鸟样了

我只能说,MS你家真不厚道啊,你家产品经理有脑子吗?

言归正传,继续往下走,这里Provisioning Options有两个选项:

Provision device and choose debugger settings和Manually configure debuggers and do not provision,前者是在target machine安装和配置组件,以允许从VS直接分发驱动,运行测试。默认的debug设置也会被设置到目标机器上。相比较,后者就是在VS里设置debugger settings,而target machine上的设置需要我们像第三步那样手动设置。

如果我们选择了前者,那么其实第三步可以省略,这时候target machine上会创建一个新的用户WDKRemoteDebugger,我们的调试,会在这个用户下进行。

好了,配置已经做完了,下面就是正式调试。

在组合一里面,其实也有三种情形。

(1)WDM驱动调试

(2).KMDF驱动调试

(3).UMDF驱动调试

因为目前正在看《Windows内核安全与驱动开发》,开头就是WDM驱动的例子,所以此处我们暂且放下,但后面一定会讲到,而且注意,KMDF和UMDF的调试也还是有很多小技巧以及注意的地方。

WDM驱动是以服务的方式运行,因此,我们需要有一个驱动加载工具,这方面的工具很多,有InstSrv,DriverStudio,还有书上推荐的srvinstw,但很不幸好像都不支持64位驱动加载,所以最后我们还要找一个64位WDM驱动加载工具,实在不行,只能自己写一个了。

VS在Debug->Attach to Process下

直接附加到Kernel进程里,待系统启动后,我们break一下,设置断点,然后再continue,这样断点就能生效了(其实不break,断点也能生效,但有时候就不能生效,是挺奇怪的,我说的不能生效是在调试KMDF的时候)。

把生成的驱动拷贝到target machine,我用的是InstSrv加载工具,先安装驱动,再启动,点击启动的时候,就进入到VS中的DriverEntry中的断点了。注意:不需要拷贝符号表文件,本身就是VS加载调试,我不理解为什么有的文章里写一定要把PDB文件一块拷贝进去。

组合二:

这个组合可把我坑苦了。。。重装了N遍虚拟机,实在找不出原因了,我还装了英文版,英文版不行,我还更新了700多M的补丁,到头来我也不知道自己哪儿错了,只知道一条路不通,另外一条路可以,在搜索引擎里找了好久,终于找到一个靠谱的blog,其它的都不靠谱,按理说搞驱动开发的不少啊,可能写blog的少吧。

1和2,装虚拟机和增加串口就不说了,跟上面一样;

3.以管理员身份,在虚拟机cmd下运行

bcdedit /debug on

bcdedit /dbgsettings serial debugport:n baudrate:115200
这里的n是增加的串口号,我的是1
3.最重要的一步来了,在Provisioning Options,如果选择自动方式,此时确实会创建一个WDKRemoteDebugger用户,但一旦重启就蓝屏,进入保护模式也是蓝屏,这根本没法玩儿的节奏啊!!!!坑爹的MS,我又要诅咒你了,在网上找不到一条关于蓝屏的情形,根本没有解决方案,于是我忙活了一下午+一晚上。到了这里我要插一句话,以后搜索的发展方向也要朝着人工智能方向发展,像这种情形,我能用什么语言做关键字搜索? VS2015 + WDK10 + WMWARE + WIN7 + BlueScreen?总有许多我们可能无法用语言描述的问题,很可能已经有人解决了问题,或者说有人能解决这个问题,但两者无法联系在一起,这时候搜索该怎么做?
言归正传,那就试试Manual方式吧,不需要在target machine上安装什么,很快就可以了。
如果下图中的状态变为Configured for driver testing,那么就可用了。
这时候调试,跟之前一样,没有区别。知道现在,我也完全想不通,为什么第一种方式会出错?
跟上面一样,这里也有WDM KMDF UMDF的三种情形,不过放在后面处理。
好了,今天就先到这,下期再见。
附:
经过证明,Provisioning 选择完全自动化的方式对Windows7系统并不适用,好吧,那就安心了。

VS2015+WDK10在不同环境下的驱动配置相关推荐

  1. WIN10 + VS2015 + WDK10 + SDK10 + VM虚拟机驱动开发调试环境搭建

    为什么80%的码农都做不了架构师?>>>    一.准备工作 1 系统环境:Win10系统 2 开发工具:VS2015 3 驱动开发工具:WDK10 4 Windows SDK:SD ...

  2. ubuntu16下 D415 驱动配置与硬件更新

    系统配置:ubuntu16.04LTS 1:进入catkin_ws/src文件夹内 2:按照https://realsense.intel.com/sdk-2/ 这个网址的步骤操作(此网站为reals ...

  3. SpringBoot(十三)-- 不同环境下读取不同配置

    一.场景: 在开发过程中 会使用 开发的一套数据库,测试的时候 又会使用测试的数据库,生产环境中 又会切换到生产环境中.常用的方式是 注释掉一些配置,然后释放一下配置.SpringBoot提供了在不同 ...

  4. Linux下的硬件驱动——USB设备(上)(驱动配置部分)

    USB设备越来越多,而Linux在硬件配置上仍然没有做到完全即插即用,对于Linux怎样配置和使用他们,也越来越成为困扰我们的一大问题.本文着力从Linux系统下设备驱动的架构,去阐述怎样去使用和配置 ...

  5. LittleVGL踩坑指南03:Arduino下显示和触摸驱动配置(TFT_eSPI)

    文章版本7.10,LVGL更新极快,不同版本配置方法可能存在差异 前言   触摸搞了好几天,坑太多了,好在总算飞过来了.顺便把显示驱动也写了:提前说一下,我的硬件是2.4寸ILI9341驱动屏幕+XP ...

  6. VS2015 + WDK10

    前几天刚刚用VS2008配置好了WDK7600,各种配置,又是修改项目包含文件目录和库目录,还要修改项目属性,折腾了半天debug下终于生成了*.sys文件(驱动文件),心理很是开心啊,经理看到了,说 ...

  7. 关于windows下的libtorch配置

    关于windows下的libtorch配置 1.环境 Windows service 2012 R2/Windows10 Cuda 9.0 OpenCV3.4.1 Libtorch1.0 VS2017 ...

  8. Ubuntu 16.04系统下CUDA8.0配置Caffe教程

    由于最近安装了Ubuntu 16.04,本文教程的特点是不需要降级gcc的版本,毕竟cuda8.0已经支持gcc5以上(默认不支持,实际支持). 本文是在参考caffe官网教程以及http://www ...

  9. 【WinCE】SD card技术了解并WINCE下SDHC驱动开发(updated)

    SD Card Driver on ADS Summary 了解SD card. 1 WinCE 5.0下SD Stack. 6 Bus Driver 7 Host Controller Driver ...

最新文章

  1. java swing 注册_Java 基础【04】Swing 组件事件注册
  2. 自动驾驶产业链全景图
  3. 取得Linux系统的各种统计信息
  4. Git之checkout到别的分支提示Your local changes to the following files would be overwritten by checkout:
  5. netflix_学习Netflix管理员–第2部分
  6. 傅里叶变换及其应用 pdf_级数的欧拉变换及其应用
  7. ubuntu下搭建android开发环境(转载)
  8. 页面的数据缓存,包括文字和图片
  9. 计算机出现硬盘数据丢失,硬盘数据丢失后的处理方法
  10. qml demo分析(clocks-时钟)
  11. 学python能做什么类型的工作-做自动化,学python要到那种程度呢?
  12. 中国水稻大省创新大米销售模式 启动2019首场拍卖
  13. 推荐几个超实用公众号,与众不同
  14. 微信公众号支付功能开发
  15. LM5017原理图PCB设计要点
  16. Mysql数据库锁与隔离级别
  17. SVN提交时出现remains in conflict错误
  18. 严蔚敏《数据结构》 迪杰斯特拉算法
  19. 微信小程序获取位置信息基于腾讯地图实现
  20. 国产家用跑步机什么牌子好?

热门文章

  1. 《深度强化学习实践》学习内容整理
  2. 【kafka】-入门篇
  3. iOS 动态下载系统提供的多种中文字体
  4. 比较基因组学常用分析软件和分析方法
  5. 典型环节的频率特性(建议收藏)
  6. ERROR:Session/line number was not unique in database. History logging moved to new session.
  7. 著名弹跳训练法 练成可提高30cm
  8. StreamReader和StreamWriter 的使用
  9. 画图工具如何裁剪图片
  10. 基于ORA-12170 TNS 连接超时解决办法详解