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

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

相关推荐
2202_7544215414 小时前
一个计算频率的模块
驱动开发·fpga开发
嵌入(师)2 天前
嵌入式驱动开发详解1(系统调用)
驱动开发
昵称p2 天前
杂项驱动开发
驱动开发·gpio子系统·杂项驱动开发
7yewh2 天前
嵌入式硬件杂谈(四)-高速板PCB设计 高速信号全面讲解 蛇形线 等长线 差分对 阻抗对
驱动开发·嵌入式硬件·mcu·物联网·硬件工程·pcb工艺·精益工程
lishing62 天前
Linux驱动开发(9):pinctrl子系统和gpio子系统--led实验
linux·运维·驱动开发
lishing62 天前
Linux驱动开发(7):使用设备树实现RGB 灯驱动
linux·驱动开发
TeYiToKu2 天前
笔记整理—linux驱动开发部分(13)块设备
linux·c语言·驱动开发·笔记·嵌入式硬件·arm
网易独家音乐人Mike Zhou3 天前
【Linux驱动开发】irq中断配置API及中断应用 阻塞休眠和非阻塞的驱动操作
linux·c语言·驱动开发·stm32·单片机·mcu·iot
believe、悠闲3 天前
GetVolumeInformation函数使用记录
c++·windows·驱动开发
不怕犯错,就怕不做3 天前
修复kernel编译栈帧大小异常问题error: the frame size of 1928 bytes is larger than 1024 bytes
linux·arm开发·驱动开发