我正在寻找一个内核模式调用,我可以从一个驱动程序,一个用户空间的实用程序,或一个系统调用,要求内核查看PCI总线,或者完全重新运行其初始化,或初始化一个特定的设备。 具体来说,我需要内核识别引导后添加到总线的设备,然后configuration其地址空间,中断和其他configuration参数,最后启用设备,以便我可以为它加载驱动程序(除非这一切作为驱动程序负载的一部分发生)。
我被困在2.4.x系列内核中,目前正在使用2.4.20,但是如果它很重要的话,将会移动到2.4.37。 发行版是一个精简版的Red Hat 7.3,运行在ram盘上,但是我可以添加任何需要的工具来完成这个工作(只要它们在2.4系列上运行的很好)。
如果有一些背景知识可以帮助我澄清我正在做的事:从冷启动开始,一旦在Linux中使用GPIO来编程FPGA。 一旦编程,FPGA的一部分就实现了一个简单的PCI设备。 目前FPGA编程完成后,我重新启动系统,Linux启动后识别设备并加载驱动。
而不是需要重新启动 ,我想简单地要求内核在启动时执行任何操作来查找PCI设备(我已经configuration了内核来自行查找PCI设备,而不是询问BIOS的信息,所以BIOS不需要知道这个设备(我希望))。
QueryPerformanceFrequency与cpu速度不匹配?
检查虚拟内存地址的有效性
什么是内核代码的“__Pcpu_ATTRS”中的“section”?
在Linux内核中从path获取inode
没有设备的设备驱动程序?
我相信Linux能够在设备编程之后,但在重新启动之前看到设备,因为scanpci会在编程之后显示设备,就像lspci -H 1 。 我只是需要一种方法来进入/proc/pci ,configuration和启用。
Linux内核:发生进程coredump之前的事件/path序列
C中两个整数的快速双向散列
在vnode上进行操作(在NetBSD中)
将物理地址映射到虚拟地址linux
Mips Linux:将内核恐慌logging到mtd分区中
如果您不知道如何重新进行PCI扫描,则可以使用kexec加速重新启动。 如果你还没有,可以在LKML上提问。
卸载/重装模块没有帮助,是吗?
http://www.linuxjournal.com/article/5633建议你应该可以用2.4内核来使用pcihpfs 。
如果这不起作用,也许驱动程序不支持热插拔?
这下面的命令将帮助用户重新扫描它完成根集线器。
echo "1" > /sys/class/pci_bus/0000:00/rescan
如果您在使用其他PCI设备时重新配置其地址,可能会导致系统崩溃。
更好的方法是只配置新的卡。 如果您的内核支持Cardus设备,则它已经知道如何配置新插入的PCI设备(Cardbus是什么)。 你只需要弄清楚如何让内核来做到这一点…
内核模块应该可以做到这一点。 即使你不能得到内置的热插拔代码,你应该能够使用调用pci_bus_write_config_dword()和朋友来设置pci资源。 可能有一些IRQ路由设置也可以。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。