【发布时间】:2023-03-21 20:53:01
【问题描述】:
在注册 PCI 驱动程序之前,我们必须初始化 struct pci_driver 并将其传递给 pci_register_driver。该结构的字段之一是指向驱动程序的probe 函数的指针。
我的问题是 - 当内核调用驱动程序的探测例程时。是否保证在致电pci_register_driver 之后立即生效,或者可能在其他任何时间发生?是什么决定了这种行为?
更新
pci_register_driver 是一个扩展为__pci_register_driver 的宏,它又调用driver_register,driver_register 调用bus_add_driver。
bus_add_driver中有如下代码:
if (drv->bus->p->drivers_autoprobe) {
error = driver_attach(drv);
if (error)
goto out_unregister;
}
driver_attach 将使用参数__driver_attach 调用bus_for_each_dev,这将调用driver_probe_device
而driver_probe_device 最终调用really_probe:
if (dev->bus->probe) {
ret = dev->bus->probe(dev);
我不确定的一件事是,标志 drivers_autoprobe 是否为 pci_bus 设置。
【问题讨论】:
标签: linux linux-kernel linux-device-driver pci