首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux上PCIe重新扫描后未分配的BAR区域

Linux上PCIe重新扫描后未分配的BAR区域
EN

Stack Overflow用户
提问于 2014-06-23 21:26:40
回答 3查看 2.9K关注 0票数 2

在Linux系统上,我有一个连接到PCIe的FPGA卡。我可以对FPGA重新编程,然后echo 1 > /sys/bus/pci/rescan,我的卡就会出现在lspci中。

但是,不会为条形区分配任何内存:

代码语言:javascript
复制
Region 0: Memory at <unassigned> (64-bit, prefetchable) [disabled] [size=32M]
Region 2: Memory at <unassigned> (64-bit, prefetchable) [disabled] [size=64M]

我已经在Linux启动命令行上尝试了各种pci=标志,但效果不是很好。

我的怀疑是条区域太大,因此Linux无法在地址空间中找到适当对齐的范围来映射条,因为它们在引导时不存在。

这是一个正确的理论吗?可以告诉Linux为我的设备预留空间吗?

EN

回答 3

Stack Overflow用户

发布于 2014-09-16 05:23:10

我在Linux中也看到了这一点。在http://forums.xilinx.com/t5/PCI-Express/Incorrect-assignment-of-64bit-BAR-addresses/td-p/347577的Xilinx论坛上有一个答案-尽管您的内存空间很小。尝试减小大小,直到获得分配为止。

很可能你的基本输入输出系统不允许这么大的内存空间。实际上,我从未见过真正的PCIe设备将超过512MB的内存映射到内存空间。你为什么要这样做呢?如果您认为这是有原因的,请再次检查您的应用程序是否真的需要始终同时访问这个内存量,或者您是否也可以使用分页机制来处理此问题。

您的怀疑很接近,但分配区域的是BIOS,而不是linux。正如我所看到的,根端口被分配了一个固定的内存块,如果你在该块中请求更多的空闲内存,那么你就会被取消分配。

票数 1
EN

Stack Overflow用户

发布于 2014-06-25 19:55:20

只是胡乱猜测:当驱动程序第一次映射这些区域时,会为它们分配地址。

票数 0
EN

Stack Overflow用户

发布于 2014-09-22 23:17:27

Tom Keddie说,BIOS,而不是linux内核,为设备分配地址区域。我发现有时您需要重启Linux系统才能使其映射到设备。根据您配置FPGA的方式,您可能需要为FPGA提供外部电源,以便其配置在重新启动时不会被清除。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24367169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档