1. PCI9054驱动移植概述
PCI9054是PLX公司推出的一款PCI桥接芯片,广泛应用于工业控制、数据采集等领域。在嵌入式系统中,我们经常需要将基于PCI9054的设备接入Windows平台,这就涉及到驱动程序的开发和移植工作。
本次移植工作的核心目标是将原本为PCI9656开发的驱动程序适配到PCI9054芯片上,并确保其在Windows 7操作系统下的稳定运行。由于PCI9054和PCI9656在寄存器定义和功能上高度相似,这为我们的移植工作提供了便利。
提示:在进行驱动移植前,务必确认硬件设备的PCI配置空间信息,特别是BAR(基地址寄存器)的分配情况,这对后续的资源分配至关重要。
2. Windows 7开发环境配置
2.1 目标OS版本设置
在Visual Studio的驱动项目属性中,我们需要将"Driver Settings - Target OS version"设置为Windows 7。但在实际操作中,直接设置为Windows 7(版本1.19)会导致编译错误:
code复制error: 不支持的Windows版本1.19
解决方案是将目标版本降级到1.11,这是Windows 7兼容的最低版本要求。修改方法如下:
- 打开项目属性
- 导航至"Driver Settings"
- 将"Target OS version"修改为"Windows 7 (1.11)"
2.2 WDF函数兼容性问题处理
在Windows 7(1.11)环境下,WDF驱动框架中的WdfDmaTransactionSetSingleTransferRequirement函数不可用。这个函数原本用于设置DMA传输是否需要单次完成所有数据传送。
在我们的驱动场景中,可以通过同步IO方式解决这个问题。具体修改方案是:
- 定位到调用该函数的代码位置
- 注释掉相关调用
- 在DMA处理逻辑中增加同步控制机制
c复制// 原代码(不兼容Windows 7)
// status = WdfDmaTransactionSetSingleTransferRequirement(transaction, TRUE);
// 修改后代码(兼容Windows 7)
status = STATUS_SUCCESS;
3. 调试环境搭建
3.1 测试签名配置
在64位Windows系统上,所有内核驱动都必须经过数字签名才能加载。对于开发调试阶段,我们可以使用测试签名模式:
- 在目标机上以管理员身份运行命令提示符
- 执行以下命令开启测试签名:
bash复制
bcdedit /set testsigning on - 重启系统使设置生效
或者使用"Windows 64Signer V1.2.exe"工具,它不仅能给驱动文件签名,还能自动配置测试签名模式。
3.2 WPP跟踪日志配置
示例驱动使用WPP(Windows So
