我正在为通过 PCIe 扩展槽连接到我的机器的 FPGA 板开发驱动程序,如果板在 PC 之前通电,一切都会很好。但是,如果我先预订我的计算机,然后预订 FPGA 板,我会得到设备被识别并加载我的模块的相当不寻常的行为(我看到我的系统日志中调用了“init”函数),但是“probe”函数永远不会被调用。
我认为这是由于 BAR0 无效。上电时的输出dmesg
:
[ 71.287587] pci 0000:3b:00.0: [0ae5:0001] type 00 class 0x000000
[ 71.287613] pci 0000:3b:00.0: reg 0x10: [mem 0x00000000-0x0000ffff]
[ 71.287821] pci 0000:3b:00.0: System wakeup disabled by ACPI
[ 71.328537] my_driver:
[ 71.328537] ****************************************************************
[ 71.328542] my_driver: init debug=2
第一个 reg 应该是 0xb4000000-0xb400ffff 之类的东西,但它却显示为 0。(就像我说的,如果它在计算机之前打开电源,它就可以正常工作)。
是否需要额外的步骤才能分配此块?或者以某种方式向内核表明它需要这样做?