Linux内核2.6
我有一个通过GPIO加载到运行Linux的开发板上的fpga。该fpga将通过PCI Express总线传输和接收数据。但是,这在启动时进行枚举,因此不会发现连接(因为fpga未在启动时加载)。
我如何强制重新枚举Linux中的PCI Express总线?有简单的命令还是必须进行内核更改?我需要具备热插拔PCIe设备的功能。
Linux内核2.6
我有一个通过GPIO加载到运行Linux的开发板上的fpga。该fpga将通过PCI Express总线传输和接收数据。但是,这在启动时进行枚举,因此不会发现连接(因为fpga未在启动时加载)。
我如何强制重新枚举Linux中的PCI Express总线?有简单的命令还是必须进行内核更改?我需要具备热插拔PCIe设备的功能。
以 root 用户身份,尝试运行以下命令:
echo "1" > /sys/bus/pci/rescan
更多信息请参见此链接:http://www.kernel.org/doc/Documentation/ABI/testing/sysfs-bus-pci
sudo
,则会出现 "permission denied" 的错误。在这种情况下,请使用 sudo sh -c "echo 1 > /sys/bus/pci/rescan"
。 - mivk如果您没有BIOS,则考虑在引导加载程序中进行编程,您已经具备了从磁盘读取的能力,并且添加GPIO能力可能并不太困难(假设您使用的是jtag和GPIO?),事实上,根据您使用的引导加载程序,它可能已经能够执行GPIO?
修改内核的问题是您必须找到一个甜点,在此之前您可以读取位文件,而不是PCI枚举...例如,如果磁盘设备驱动程序在PCI之后初始化,则显然您必须对内核进行一些根本性的更改,以便在PCI枚举之前读取位文件,这可能会引起其他烦人的问题...
另一个选项是在开发时间内使用:启动系统,编程FPGA板,然后重置(不用重新上电,例如:sudo reboot now),FPGA应该保持其配置,而Linux应该将其枚举...