- 论坛徽章:
- 0
|
谢谢sky兄的解释。不过我还是不是太明白。首先我们不考虑“热插拔”,假设没有支持热插拔的
设备存在。那么一个正常的加载顺序是在start_kernel后的rest_init中载入,__define_initcall
("N",fn), N从小到大。在2.4的内核如你所说,加载的顺序不是固定的,而且是由pci_init调用
pcibios_init->pci_scan_bus->.....->(drv->probe).
drv->probe这个就是每个pci设备的初始化,而它是需要pci_register_driver通过
module_init(XX_init)加载的。这里的XXX_init和pci_init中__define_initcall("N",fn)的N是
一样的。所以没有什么问题。
可是2.6的内核pcibios_init不是通过pci_init调用的,而是subsys_initcall,它的N比
module_init优先级要高。所以pcibios_init在建立完内核树再probe pci设备的时候,pci设备
的驱动还没有通过module_init(XX_init)加载到内核里面。
我想问的是pci设备的probe是不是要等module_init(XX_init)加载到内核后,在做的呢?
如果是那样的话,pcibios_init不是只用建立内核树,不用在对pci设备进行scan和probe了吗? |
|