1.熟悉C/C++编程语言(能了解函数指针、回调函数以及事件处理程序的理念)
2.Visual Studio基本使用
1. 设备函数驱动程序
2. 设备筛选器驱动程序
3. 软件驱动程序
4. 文件系统筛选器驱动程序
5. 文件系统驱动程序
主要分为两种模型:WDM 模型 和 WDF 模型。
WDM 模型
WDM(Windows Driver Model)驱动程序是受信任的内核模式组件,系统对驱动程序输入提供有限的检查。WDM 模型要求开发人员手动控制与操作系统和硬件之间的交互,因此存在一定的风险和较高的复杂性。
WDF 模型
WDF(Windows Driver Framework)模型则侧重于驱动程序的需求,框架库处理与系统的大部分交互,简化了驱动程序的开发。通过提供自动化的框架,WDF 模型减少了低级别操作的复杂性,提高了开发效率。
为什么微软建议使用 WDF 模型?
微软推荐开发者使用 WDF 模型,因为它提供了更高效、更安全、更易维护的驱动程序开发方式,特别适合新开发的驱动程序。
WDF 模型的两种开发方式:
KMDF(内核模式驱动程序框架)
用于开发运行在操作系统内核模式中的驱动程序。
适用于需要直接与硬件交互,且对性能要求较高的场景,如硬件设备驱动、文件系统驱动等。
UMDF(用户模式驱动程序框架)
用于开发运行在操作系统用户模式中的驱动程序,适用于需要高稳定性和安全隔离的场景。
适用于 USB 设备、外部设备等不需要直接与硬件交互的驱动程序。
常见开发:KMDF(内核模式驱动程序)
在实际开发中,KMDF 是最常用的驱动程序开发方式。它可以直接访问硬件资源,适用于需要高性能、低延迟的驱动程序开发。
1. VS2022
2. SDK(根据目标板系统版本进行下载)
3. 驱动程序工具包WDK
VS2022安装:选择"使用c++的桌面开发"和"Visual Studio扩展开发"两个内容。
SDK和WDK通过网络资料安装即可。
可参考以下教程
1. 启动 Visual Studio。
2. 选择“创建新项目” 或在 文件 菜单中选择 项目。
3. 在 创建新项目 对话框的右窗格中,选择 内核模式驱动程序 (KMDF),然后点击 下一步。
4. 填写项目名称、位置和解决方案名称,点击 创建。
5. 开始编写特定于设备的代码,完成驱动程序开发。
调试阶段,目标机器需要配置为测试模式,否则无法安装驱动
bcdedit /set testsigning on
如果不再需要测试模式,可以通过以下命令退出:
bcdedit /set testsigning off
1.将编译出来的驱动程序文件夹拷贝到目标机器。
2.在目标机器的驱动程序文件夹中,找到并右键点击 XXX.inf 文件。
3.选择安装,完成驱动程序的安装。
与普通应用程序的调试方法不同,驱动程序调试需要通过查看驱动程序的过程日志来判断和分析其是否正常运行。
需要用到微软的工具:
为了在正式模式下安装驱动程序,驱动必须经过 签名。
以下是关于驱动签名的详细信息和步骤,帮助你在调试完成后顺利进行正式安装。
驱动签名要求
在正式模式 下安装驱动程序时,系统要求驱动必须经过 签名。签名可以由微软或者第三方机构提供,具体的签名方式如下:
1.微软签名
微软提供的驱动签名服务,可以确保驱动符合 Windows 操作系统的安全性和兼容性要求。
●优点:具有广泛的兼容性和信任度,适合希望广泛发布驱动程序的开发者。
●缺点:签名过程繁琐,通常需要一定的费用。
2.第三方机构签名
你也可以选择让第三方机构为你的驱动程序提供签名。
●优点:通常成本较低,流程较为简单。
●缺点:与微软签名相比,信任度和兼容性可能稍逊一筹。
签名的价格因提供服务的机构不同而有所差异,通常微软的签名费用较高,但第三方机构签名的价格更为灵活,可以根据需求选择。
在通过 I2C/SPI 总线 挂载外部设备时,首先需要在主板的 ASL(ACPI Source Language) 代码中声明该设备。
只有这样,系统的设备管理器才会识别并显示新设备。
具体的设备加入过程会在后续的 I2C/SPI/NFC 开发 中详细提到。
开发阶段:测试模式下的设备注入
在设备调试和开发阶段,目标系统可以处于 测试模式,此时无需刷新BIOS即可进行新设备的添加。通过向注册表注入设备信息,系统即可识别新设备并进行测试。
该过程仅在测试模式下有效。
以下步骤是在目标机器下实现
1.从注册表缓存中读取BIOS配置并保存为DSDT0000.bin文件
打开命令提示符(管理员身份),执行以下命令:
asl.exe /tab=DSDT /c
2.反编译DSDT0000.bin文件,生成DSDT0000.dsl (ASL CODE文件)
执行以下命令反编译文件:
.\iasl.exe -ve .\DSDT0000.bin
3.修改DSDT0000.dsl 文件,添加新设备信息
打开 DSDT0000.dsl 文件并根据实际需要添加新设备的信息。具体添加内容将在 I2C/SPI/NFC 开发中有详细示例。
4.编译修改后的DSDT0000.dsl,生成DSDT0000.aml文件
编译文件以生成新的 AML 文件:
.\iasl.exe -ve .\DSDT0000.dsl
5.将 DSDT0000.aml 写入注册表缓存
.\asl.exe /loadtable DSDT0000.aml
6.启用测试模式,忽略签名
执行以下命令以启用测试模式:
Bcdedit /set testsigning on
7.重启系统
重启系统后,新设备将出现在设备管理器中,便于进一步调试。
若要使该 ASL 代码 失效并恢复到未添加设备的状态,可以执行以下操作:
.\asl.exe /loadtable DSDT0000.aml -d
当新设备调试完成后,需要将其信息更新到BIOS代码中,并重新刷新BIOS,以便正式将设备加入系统。