Перед регистрацией драйвера 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
вызовет bus_for_each_dev
с аргументом __driver_attach
, который вызовет driver_probe_device
И driver_probe_device
в конечном итоге вызывает really_probe
:
if (dev->bus->probe) {
ret = dev->bus->probe(dev);
Единственное, в чем я не уверен, это то, установлен ли флаг drivers_autoprobe
для pci_bus.