gpt4 book ai didi

Linux PCI 驱动程序调用 init,但不探测

转载 作者:太空狗 更新时间:2023-10-29 12:03:31 25 4
gpt4 key购买 nike

我正在为通过 PCIe 扩展槽连接到我的机器的 FPGA 板开发一个驱动程序,如果该板在 PC 之前通电,则一切正常。但是,如果我先预订我的计算机,然后再预订 FPGA 板,我会得到相当不寻常的设备行为被识别并加载我的模块(我看到我的系统日志中调用了“init”函数),但是“探测”函数永远不会被调用。

我认为这是由于无效的 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。(就像我说的,如果它在计算机之前打开电源,它就可以完美运行)。

是否需要额外的步骤来让它分配这个 block ?或者以某种方式向内核表明它需要这样做?

最佳答案

最终解决方案是手动调用 pci_assign_resource ( http://lxr.free-electrons.com/source/drivers/pci/setup-res.c#L283 )。

pci_enable_device 之前调用它会导致操作系统(而不是 BIOS)分配所需的 BAR,现在一切正常!

我仍然需要手动触发 PCI 总线重新扫描(echo 1 >/sys/bus/pci/rescan)。

关于Linux PCI 驱动程序调用 init,但不探测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25411870/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com