none
pcie驱动程序运行状态不稳定 RRS feed

  • 问题

  • 如题,自己开发的针对Xilinx A7开发板的pcie驱动程序,使用WDF框架完成。

    驱动开发完成后,在自己的pc上工作正常,卸载、安装、重启,驱动程序都不会受到影响,均能正常工作。

    可是,在其他的PC上进行测试时,总会发生工作不稳定的情况,具体表现为:

    1、对PC进行Reset。重启后,驱动程序几乎总是无法工作。

    2、对PC进行Power Off/ON。关机后再次开机。驱动几乎都能正常工作(读写正常)。

    自己的PC机使用的操作系统是windows xp sp3。其他用于测试的pc机操作系统包括Windows Xp sp3,windows 7,windows 8,都出现了上述问题。

    求大神解答,万分感谢。

    2017年2月6日 16:17

答案

  • 重启时设备一直都没有断电,设备没有复位,可能是FPGA程序上有问题。

    建议在重启的时候,把设备关电再上电,排除一下是不是FPGA程序的问题。

    还有,就是XP上的驱动程序在win 8上能运行吗,是否编译了对应版本的驱动程序?

    2017年2月7日 13:55
  • 感谢回复。

    在Windows 8上进行了X64编译。

    今天对异常情况进行分析时,发现了失败时内核分配地址的一些特征:

        当内核分配的物理地址是4K整数倍时,程序无法进行读写。8K,16k,32k整数倍,程序可以正常运行。

        使用CommonBuffer 执行DMA过程。调用  WdfCommonBufferGetAlignedLogicalAddress /WdfCommonBufferGetAlignedVirtualAddress获取物理地址和内和虚拟地址。

        FPGA使用Xilinx A7。

    发现问题后,对地址进行了尝试性的修改,非8K字节对齐的内存地址进行偏移,变换成8K字节对齐。对齐后,偶尔出现蓝屏(后期进行debug),但是程序读写失败的情况不再发生了,貌似解决了问题。但是对于地址为何要8K字节对齐仍然不明白。

    自己在驱动程序中调用了

    WdfDeviceSetAlignmentRequirement进行数据对齐,但该函数的对齐参数也只是8,16,32字节,而非KB字节。

        

    2017年2月9日 15:27

全部回复

  • 重启时设备一直都没有断电,设备没有复位,可能是FPGA程序上有问题。

    建议在重启的时候,把设备关电再上电,排除一下是不是FPGA程序的问题。

    还有,就是XP上的驱动程序在win 8上能运行吗,是否编译了对应版本的驱动程序?

    2017年2月7日 13:55
  • 感谢回复。

    在Windows 8上进行了X64编译。

    今天对异常情况进行分析时,发现了失败时内核分配地址的一些特征:

        当内核分配的物理地址是4K整数倍时,程序无法进行读写。8K,16k,32k整数倍,程序可以正常运行。

        使用CommonBuffer 执行DMA过程。调用  WdfCommonBufferGetAlignedLogicalAddress /WdfCommonBufferGetAlignedVirtualAddress获取物理地址和内和虚拟地址。

        FPGA使用Xilinx A7。

    发现问题后,对地址进行了尝试性的修改,非8K字节对齐的内存地址进行偏移,变换成8K字节对齐。对齐后,偶尔出现蓝屏(后期进行debug),但是程序读写失败的情况不再发生了,貌似解决了问题。但是对于地址为何要8K字节对齐仍然不明白。

    自己在驱动程序中调用了

    WdfDeviceSetAlignmentRequirement进行数据对齐,但该函数的对齐参数也只是8,16,32字节,而非KB字节。

        

    2017年2月9日 15:27
  • 我说的8K整数倍地址比如:0x49C8 6000,

    4K整数倍对齐地址比如:0x49C6 5000。

    2017年2月9日 15:35