【发布时间】: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