我们正在开发一种通过PCIe连接到Linux PC主机的嵌入式系统。现在,在实施和调试阶段,我经常需要关闭电源并打开设备电源或尝试不同的电路板。这会导致在Intel PC上运行的Linux(Ubuntu或Debian)出现问题。
当我需要插入被测设备时,通常会启动PC。正如所料,Linux没有找到设备,软件应用程序无法与之通信。如果我做“lspci -v”,那么它不会列出我们的设备。我们的应用程序使用libpci(使用-lpci构建的程序)来访问我们的设备公开的单个BAR,然后通过执行page_remap的内核模块“mmap”。我们的解决方法是重启PC,之后设备可见并启用。
我正在寻找一种解决方案,我不必经常重启PC(一天中数十次)。我无法连接设备然后运行一些代码来使Linux内核检测并启用我们设备的BAR吗?我希望找到一些关于使用PCI支持库和示例的文档,但是还没有。任何指针赞赏。也许我可以在我的代码中执行像pci_enable_device()或pci_find_device()等调用吗?我无法弄明白。我可以编写内核模块和用户代码来实现这一点,即我对是否具有root访问权限没有任何限制。
非常感谢您的建议和指示, Guraaf
答案 0 :(得分:0)
您是否尝试使用以下方式重新加载模块(设备已拔下插头)
rmmod yourmodule
modprobe yourmodule
然后重新插入设备。