我正在寻找可以从驱动程序、用户空间实用程序或系统调用中进行的内核模式调用,该调用将要求内核查看 PCI 总线并完全重新运行其初始化,或初始化特定的设备。具体来说,我需要 Kernel 识别一个在启动后添加到总线上的设备,然后配置它的地址空间、中断和其他配置参数,最后启用该设备,以便我可以为它加载驱动程序(除非这一切作为驱动程序负载的一部分发生)。
为此,我被困在 2.4.x 系列内核上,目前正在使用 2.4.20,但如果重要,将移至 2.4.37。该发行版是在 ram 磁盘中运行的精简版 Red Hat 7.3,但我可以添加任何需要的工具来使其正常工作(只要它们与 2.4 系列配合得很好)。
如果一些背景有助于澄清我正在尝试做的事情:从冷启动,一旦在 Linux 中,我使用 GPIO 对 FPGA 进行编程。FPGA 的一部分一旦被编程,就实现了一个简单的 PCI 设备。目前,在对 FPGA 进行编程后,我重新启动系统,Linux 会在启动后识别设备并为其加载驱动程序。
而不是需要重新启动,我想简单地要求内核在启动期间执行任何操作以查找 PCI 设备(我将内核配置为自行查找 PCI 设备,而不是向 BIOS 询问该信息,所以 BIOS 不需要知道这个设备(我希望))。
我相信 Linux 能够在编程后但在重新启动之前看到设备,因为scanpci
在我编程后会显示设备,就像lspci -H 1
. 我只需要一种方法让它进入/proc/pci
、配置和启用。