首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何告诉linux重新训练和扫描PCIe总线?

如何告诉linux重新训练和扫描PCIe总线?
EN

Stack Overflow用户
提问于 2022-03-23 16:43:21
回答 1查看 1K关注 2票数 2

我们有一个嵌入式板,它有iMX8M-Plus处理器和Linux5.4.161版本。这个板有一个PCIe总线,那个连接到一个FPGA。当我们打开电路板时,FPGA还没有配置,所以它的作用就好像它不在PCIe总线上一样。

一旦Linux被完全引导,我们就配置FPGA,然后它才开始充当PCIe端点(设备)。

此时,当我运行lspci ->时,它什么也不返回。当我第一次按建议的方式执行echo "1" > /sys/bus/pci/rescan ( herehere ),然后执行lspci时,我仍然一无所获。

但是,如果我重新启动linux而不重新启动FPGA,它就开始在lspci列表中可见。重新启动linux对我们来说不是一种选择。不知何故,我需要告诉linux,不管它在启动时做什么,请在运行时再做一次。但到目前为止我还没有找到解决办法。

根据德州仪器支持论坛,他们说,如果PCIe链接在启动时没有经过训练,rescan命令就无法工作。

在引导时,当linux加载pci驱动程序时,它试图建立一个PCIe链接,我可以看到,在示波器中,PERST被断言,PCIE_CLK生成了一段时间,如果它不能检测到任何设备,就会停止。但是rescan命令从来不这样做。

此外,在系统中没有执行echo 1 > $pcidevice/remove的pcie设备,以使rescan能够正常工作。或者没有像echo 0 > /sys/bus/pci/slots/.../power那样设置电源的设备或总线。

我还了解到,在过去的linux (v2.6)中,有一种方法叫做添加一个虚假的PCIe设备,而这个设备实际上并不存在,可以解决这个问题。为此,我从一个旧的linux中获取了fakephp.c驱动程序,并将其移植到我们的驱动程序中。在解决了几个不推荐的函数问题之后,就为LinuxKernelv5.4编译了它。modprobe fakephp工作并加载了驱动程序,但不知何故,我在设备列表中没有得到这个假设备。Here提到fakephp驱动程序是从主流linux中删除的,因为PCI核心具有类似的功能,但他从未提到如何删除fakephp驱动程序。

故事的不足是,我被困在这里,我需要我的lspcilspci列表中可见,而不重新启动linux。

EN

回答 1

Stack Overflow用户

发布于 2022-06-01 19:58:36

我建议在u引导中配置FPGA以避免这些问题。连接SPI引脚到FPGA的配置引脚,并在从配置模式下运行它。

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

https://stackoverflow.com/questions/71590943

复制
相关文章

相似问题

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