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的小硬件项目。

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

相关推荐
华清远见成都中心10 小时前
分享一个驱动开发工程师学习路线图
驱动开发·学习
DeeplyMind1 天前
linux drm子系统专栏介绍
linux·驱动开发·ai·drm·amdgpu·kfd
Shang180989357261 天前
T41NQ/T41N高性能低功耗SOC芯片 软硬件资料T41NQ适用于各种AIoT应用,适用于智能安防、智能家居,机器视觉等领域方案
驱动开发·嵌入式硬件·计算机视觉·fpga开发·信息与通信·t41nq
amberman2 天前
解读 PCIe Gen6 RAS
驱动开发·fpga开发·硬件工程
逻极2 天前
AI 规范驱动开发“三剑客”深度对比:Spec-Kit、Kiro 与 OpenSpec 实战指南
人工智能·驱动开发·ai·agent
逻极2 天前
Claude Code 实战:Spec-Kit、Kiro、OpenSpec 规范驱动开发三剑客
ide·人工智能·驱动开发·ai·自动化
范纹杉想快点毕业3 天前
100道关于STM32的问题解答共十万字回答,适用入门嵌入式软件初级工程师,筑牢基础,技术积累,校招面试。
驱动开发·单片机·嵌入式硬件·fpga开发·硬件工程
进击大厂的小白4 天前
35.linux的定时器使用
驱动开发
winner88814 天前
嵌入式Linux驱动开发全流程:工具协作+核心概念拆解(从入门到理解)
linux·运维·驱动开发
Evan_ZGYF丶5 天前
深入解析CFS虚拟运行时间:Linux公平调度的核心引擎
linux·驱动开发·嵌入式·bsp