【问题标题】:Linux kernel fails to assign memory to the PCIe device when the BAR size is set to 1GB当 BAR 大小设置为 1GB 时,Linux 内核无法为 PCIe 设备分配内存
【发布时间】:2015-12-05 07:21:21
【问题描述】:

当 BAR 大小设置为 1GB 时,Linux 内核无法为设备分配内存。只要 BAR 内存大小设置为 512MB,设备枚举就可以正常工作。但是当设置为 1GB 时,它会枚举设备,但不会分配内存映射。

控制:I/O- Mem- BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- 步进-SERR- FastB2B- DisINTx- 状态:Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- SERR- (64 位,不可预取)[禁用] 区域 2:内存位于 (64 位,不可预取)[禁用] 区域 4:内存 在(64 位,不可预取)[禁用]

这可能是什么原因?可以做些什么来调试这个?

在启动时启用内核调试,这是为该设备记录的内容:

[7.087688] pci 0000:8b:00.0: BAR 4: 无法分配内存(大小 0x40000000) [7.109427] pci 0000:8b:00.0: BAR 0: 无法分配内存 (大小 0x100000)[7.130599] pci 0000:8b:00.0: BAR 2: 无法分配 内存(大小 0x2000)

【问题讨论】:

  • 可能是 DMA 内存碎片。尝试在其他 PCI 驱动程序之前加载驱动程序。
  • 内核似乎找不到这么长的连续内存块。

标签: linux linux-kernel


【解决方案1】:

您可以尝试 setpci -s "your pcie device bus number" COMMAND=0x02 例如 setpcie -s 01:00.0 COMMAND=0x02 这将为您的 pcie 设备启用内存映射传输。

你可以参考这个链接: https://forums.xilinx.com/t5/PCI-Express/lspci-reports-BAR-0-disabled/td-p/747139

【讨论】:

    猜你喜欢
    • 2020-12-15
    • 2015-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多