smr 发表于 2011-01-17 15:51

linux启动后添加pci设备问题(非hotplug)

碰到一个特殊的情形,现在x86上开发个fpga的驱动。PCI设备。
平台启动后将芯片的逻辑下载到芯片中,但此时linux早已完成pci的扫描和初始化工作。
于是再加载驱动,会找不到设备。pci_scan_child_bus和pci_bus_add_devices解决这个总题。

但它的存储资源却无法分配了。pci_bus_assign_resources显示无法分配。碰设此设备所在PCI桥的PCI_MEMORY_BASE又会显示冲突。


请教,有什么合适办法能将这个设备加到系统中?
或者能有什么样的思路?
多谢。

dreamice 发表于 2011-01-17 22:03

你是想热插拔吗?可能设备驱动不支持该设备

wenzhouyip 发表于 2011-01-18 13:58

楼主烧完程序以后再重启下Linux系统,然后加载驱动,是不是就可以找到设备了。

smr 发表于 2011-01-18 16:21

回复 3# wenzhouyip


    重启后不用加载驱动也可以lspci到设备。加载驱动就可以正常使用了。

昨天又试了下,先将设备所在的pci桥设置了PCI_MEMORY_BASE和PCI_MEMORY_LIMIT
虽然在调用pci_bus_assign_resources时会有冲突,但不重启也可以加载驱动了。
只是不能正常工作,访问设备内存设备会重启


分析应该还是桥上的配置不对,所以事务下发(或返回)不到fpga上。
看看能不能有新的思路?

smr 发表于 2011-01-18 16:28

回复 2# dreamice


    这应该不算是热插拔。内核里没有对它的支持。内核起来后完全不知道这个东东。
然后在这种情况下,能设备运行起来。呵,比较个特的需求。需要大家滴智慧了。

dreamice 发表于 2011-01-18 16:42

回复 5# smr


    内核能支持,那就是这个设备自身驱动的问题了

smr 发表于 2011-01-18 17:03

回复 6# dreamice


    内核对标准的PCI是支持的。开机扫描到的设备也都可以被驱动操作(所以带电重启之后,我的驱动就可以正常工作了)

而现在我不做重启,是什么也做不了的。
于是手动查找,初始化桥和设备的空间。(pci_scan_child_bus和pci_bus_add_devices等操作)
结果是可以访问到设备了,但操作还有问题。

所以我就不能确定,机器启动后重新扫描和初始化PCI子系统来添加这个PCI设备,是不是个合理的方法?
或者有别的更好的方案。

garyv 发表于 2011-01-18 23:23

本帖最后由 garyv 于 2011-01-18 23:24 编辑

回复 7# smr


    貌似BIOS对该PCI设备配置有些问题,也许是PCI设备BAR空间分配冲突等原因导致无法正常配置这个设备,你能进BIOS界面查看吗?你说X86不知是啥产品

dreamice 发表于 2011-01-19 09:15

回复dreamice


    内核对标准的PCI是支持的。开机扫描到的设备也都可以被驱动操作(所以带电重启之 ...
smr 发表于 2011-01-18 17:03 http://linux.chinaunix.net/bbs/images/common/back.gif


    你这个和我遇到的网卡问题可能很相似。
我之前用一块realtek 8169的网卡,执行lspci的时候是能看到网卡的,包括型号;但是网卡就是起不来。最后重新下载了最新的网卡驱动,编译加载,就可以了。
所以,我猜测你这个还是设备自身驱动的问题,和pci关系不大。

wenzhouyip 发表于 2011-01-19 09:18

楼主有没试过这样:
1.先烧写FPGA程序;
2.再带电重启;
3.加载驱动,能够正常执行驱动程序功能;
4.然后再卸载驱动;
5.再次重新烧写FPGA程序(这时就不再重启);
6.最后再次加载驱动,看这次加载的驱动能否正常运行?
页: [1] 2
查看完整版本: linux启动后添加pci设备问题(非hotplug)