В чем разница между module_init
и subsys_initcall
при инициализации драйвера?В чем разница между module_init и subsys_initcall при инициализации драйвера?
ответ
Разница относится к срокам или, точнее, порядку исполнения. То есть, процедура, объявленная как subsys_initcall
, гарантируется, чтобы выполнить процедуру, объявленную как module_init
. Это упорядочение гарантирует, что драйверы подсистем и платформ инициализируются до того, как драйверы устройств попытаются использовать функции прежнего (например, драйвер устройства регистрируется как устройство подсистемы).
Фактическое определение макроса для каждого зависит от того, настроено ли ядро для (загружаемых) модулей или нет. Определение этих макросов (и других макросов инициализации) можно найти в include/linux/init.h
Обратите внимание, что subsys_initcall()
может использоваться только встроенным (статически связанным) модулем.
module_init
может использоваться либо встроенными, либо загружаемыми модулями.
Очень понятно .. спасибо .. – kzs
Для загружаемых модулей '* .ko'' subsys_initcall() 'сопоставляется с' module_init() 'ie' device_initcall() 'Ссылка: http : //lxr.free-electrons.com/source/include/linux/init.h#L298 – TheCodeArtist
Вы проверили страницы руководства? – rekire
Для этого недоступна запись на странице руководства. – kzs
Вы всегда можете использовать grep через источники. Многое можно объяснить, просто взглянув на источники. –