PCIe:lspci 显示“内存在 <未分配> ...”

Posted

技术标签:

【中文标题】PCIe:lspci 显示“内存在 <未分配> ...”【英文标题】:PCIe: lspci shows 'Memory at <unassigned> ...' 【发布时间】:2016-02-03 23:25:06 【问题描述】:

有人问过类似的问题,但这些信息似乎没有帮助。我有一个运行 Linux 3.14 的飞思卡尔 iMX6 芯片和一个 Altera Cyclone V GT FPGA 开发套件。当我将套件(带有 Altera 的演示 PCIe 代码)插入 iMX6 载板(PCIe 连接)并输入 lspci 时,我得到未分配 BAR0 和 BAR1 的内存。我们是否更改内存类型(32 位与 64 位 - 不可预取与否)都没关系。进入并在设备下执行“echo 1 > enable”并重新扫描,仍然没有。为此,没有实现驱动程序,但其他 PCIe 设备没有驱动程序并且它们分配了资源(即 resource0..3)。几乎每个 PCIe 内核配置设置都已添加。我可能会错过什么?

【问题讨论】:

【参考方案1】:

对于 i.MX6,Linux 为 BARx 接受的最大内存量为 15MB。 当 BAR 的大小过大时,Linux 无法分配内存空间,一直处于未分配状态。

您的 BAR0 和 BAR1 的尺寸是多少? 我认为您应该减小 BARx 的大小。 如果您的 FPGA 上连接了 DDR,请考虑 span extender 以允许 i.MX6 -> DDR 访问。

如果您有兴趣,我写了一个小教程here 来解释如何通过 PCIe(1 通道)将 iMX6 插入 CycloneV GX。

【讨论】:

在 DMA 访问 15 MB 时,iMX6 是否也受到限制? 查看我们的设备,BAR 大小为 256 MB 和 128 MB,这是 FPGA 的 PCIe 演示代码所具有的值。 此限制仅适用于 BARx,不适用于 DMA 访问。要使用 dma 访问,您必须在 Quartus 中配置 PCIe IP 的页面大小,Linux 驱动程序会更复杂。 到目前为止,我们遵循了您的建议和教程。我们现在可以让 Linux 内核映射内存。谢谢!!! 欢迎 ;) 如果您需要更多信息,请随时联系 Armadeus 系统。我们有一个名为 APF6_SP 的板,带有 i.MX6 和 CycloneV。

以上是关于PCIe:lspci 显示“内存在 <未分配> ...”的主要内容,如果未能解决你的问题,请参考以下文章

RK3568平台开发系列讲解(调试篇)PCIe调试详解

RK3568平台开发系列讲解(调试篇)PCIe调试详解

PCIe相关的操作命令

linux上的pcie内存访问

查看pcie总线上的设备ID以及带宽计算

linux 不支持NVME