windows设备驱动开发-总结篇

随着USB系列、NDIS系列和WDM、WDF等框架的完成,整个开发算是已经完全讲解完了,下面就是整体的总结和一些问题的回答:

windows 驱动使用哪种开发框架

如果看windows 驱动开发的整个体系,就会发现它很复杂,也很容易让人迷惑,所以下面会讲解一下:

如果需要开发windows 设备驱动,那么首先需要解决的是开发环境,目前的主流平台是 Microsoft Visual Studio系列,它从2012版本开始就将驱动开发整合到IDE环境中了,所以用最好使用比较新的版本+WDK版本的集合:

VS版本下载: VS2022社区版

SDK版本下载: windows SDK

WDK下载: WDK

更为具体的安装和描述可以参考: MSDN: 驱动开发环境搭建

WDM和WDF是两套框架下的一套东西,WDM是整个windows 内核架构的基石,WDF则是利用这个基石封装的面向对象的开发框架,使用哪种开发框架本身不会影响驱动在内核中的实例化。

如果需要更细微的粒度控制可以选择WDM,但在工程师们不断地努力下,WDF的细节正在变得越来越丰富,故相对WDM大量的开发工作来说WDF更加合适。

驱动的调试技术

当Microsoft Visual Studio将WDK集成后,windbg也被集成到其中,故此时调试已经相对简单了,不过,调试部分后续还是单独做一个系列吧。

windows 驱动开发和设备驱动开发

很多人可能没有注意到,windows设备驱动开发和windows驱动开发并不是一回事,设备驱动更加偏向于外设,windows可能是目前支持外设最为广泛和灵活的操作系统之一,这得益于它强大的驱动程序框架,不但让驱动开发变得更加容易,还能方便的进行拓展。

将外设纳入硬件体系,这其实是Linux更加擅长的事情,但是Linux的开发难度和使用难度是一个巨大的门槛,而windows在更大时间和空间尺度上完美的解决了这个问题!2000系统支持的硬件到了win11仍然可以支持,时间可能已经过去了二十年,并在未来二十年内也是如此。

这得益于windows内核精巧的设计,win 10之后的内核是对NT内核的改写,相当于重新用新技术将内核编写了一次,但它在二进制上看起来和二十年前没什么不同,除了更高的并发数目、更大的内存使用、更快的运算。

所以在内核开发中,驱动开发和设备驱动开发完全是两个概念,非设备驱动程序是为软件使用的,而设备驱动则是为设备准备的,所以二者的侧重点是不一样的。

设备开发需要让设备的性能尽可能的发挥出来,而驱动则是泛指在内核中运行的任务,而后者更加接近操作系统的运行本质。

内核的两个主要功能: 充分发挥外设的性能和向应用层提供服务,例如一个U盘,它的性能就是USB设备驱动程序+USB总线驱动决定的,在windows 7上可能只能达到2.0的速度,但是同样的引荐下换成支持USB 3.0扩展驱动的软件,速度就能达到3.0的速度,硬件的设计会存在冗余和兼容的情况,此时软件系统优劣就是是否能将它的性能发挥出来。

计算机的性能和日常认知的不一样,例如,即使在xp的时候,PCIE也有5Gb/s的速度,内部总线的速度就更不用说了,DDR3-1600MHz意味着12GB/s,到PCI的时候降低一个数量级,到硬盘又降低一个数量级,已经是100MB/s了,到局域网也是这个速度。

在非设备的驱动程序中,目前最常见的就是杀毒软件,集中于文件、网络、硬盘这些模块,这其实并不奇怪,一般很少有需要程序员去处理内核本身的流程,那需要极其专业的人员才能胜任。

后续的创作

我其实没想到我可以完整的将这几个系列写完,它们的内容来源于MSDN和对英文原文的理解,但很多人看完估计很难知道怎么进行开发,于是后续我想着是两个方向。

第一个方向是对windows C++编程技术的讲解没这部分其实类似于基础知识吧。

另外一个则是对一些实际项目的分享。目前正在准备游戏辅助、USB驱动、网卡驱动三个系列的分享,另外还有一些自己的DIY的小硬件项目。

另外我会持续对这几个系列的文章进行校对和增删改。

相关推荐
cxr8282 天前
SPARC方法论在Claude Code基于规则驱动开发中的应用
人工智能·驱动开发·claude·智能体
sukalot2 天前
window显示驱动开发—显示适配器的子设备
驱动开发
Evan_ZGYF丶3 天前
【RK3576】【Android14】如何在Android14下单独编译kernel-6.1?
linux·驱动开发·android14·rk3576
sukalot4 天前
window显示驱动开发—视频呈现网络简介
驱动开发
sukalot4 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(二)
驱动开发
zwhSunday4 天前
Linux驱动开发(1)概念、环境与代码框架
linux·运维·驱动开发
sukalot5 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(三)
驱动开发
sukalot5 天前
window显示驱动开发—为头装载和专用监视器生成自定义合成器应用(一)
驱动开发
cxr8286 天前
基于Claude Code的 规范驱动开发(SDD)指南
人工智能·hive·驱动开发·敏捷流程·智能体
zwhSunday6 天前
Linux驱动开发(2)进一步理解驱动
linux·驱动开发