【问题标题】:How to read extended PCIE configuration space in Linux?如何在 Linux 中读取扩展的 PCIE 配置空间?
【发布时间】:2011-06-14 09:23:38
【问题描述】:

我已经尝试在 /proc/bus/pci 目录下读取用户空间 pci 条目并在驱动程序中调用内核空间 API pci_read_config_word()。但似乎两者都只能读取pci基本配置空间,偏移量小于0x100。

我想读取的偏移量超过 0x100,谁能告诉我如何在 Linux 中读取?如果在内核空间中完成,告诉我们调用哪个 API 将不胜感激。非常感谢!

【问题讨论】:

    标签: linux linux-kernel linux-device-driver pci


    【解决方案1】:

    pci_read_config_word() 是正确的 API,但要访问扩展配置空间,您需要使用 MMCONFIG。这不是您设置的;如果可用,内核应自行选择使用 MMCONFIG。你有没有看到类似的东西

    e0000000-efffffff : PCI MMCONFIG 0000 [bus 00-ff]
    

    /proc/iomem?同样在您的内核日志中,您应该会看到一些关于 ACPI MCFG 表和 MMCONFIG 的行:

    ACPI: MCFG 00000000bb7fec63 0003C (v01 LENOVO TP-6U    00001410 LNVO 00000001)
    ...
    PCI: MMCONFIG for domain 0000 [bus 00-ff] at [mem 0xe0000000-0xefffffff] (base 0xe0000000)
    

    当然,您的内核需要使用CONFIG_PCI_MMCONFIG=y 构建。

    【讨论】:

    • 我系统的 /proc/iomem 中没有类似的信息。您的意思是我们必须使用 CONFIG_PCI_MMCONFIG=y 构建内核,以便我们可以访问扩展配置空间?
    • 是的...我不知道我可以更明确地说“您的内核需要使用 CONFIG_PCI_MMCONFIG=y 构建”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-13
    • 1970-01-01
    • 2020-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多