Подтвердить что ты не робот

В чем разница между module_init и subsys_initcall при инициализации драйвера?

В чем разница между module_init и subsys_initcall при инициализации драйвера?

4b9b3361

Ответ 1

Отличие относится к срокам или, точнее, порядку исполнения. То есть процедура, объявленная как subsys_initcall, должна быть выполнена до процедуры, объявленной как module_init. Это упорядочение гарантирует, что драйверы подсистем и платформ инициализируются до того, как драйверы устройств попытаются использовать прежнюю функциональность (например, драйвер устройства регистрируется как устройство подсистемы).

Фактическое определение макроса для каждого зависит от того, настроено ли ядро ​​для (загружаемых) модулей или нет. Определение этих макросов (и других макросов init) можно найти в include/linux/init.h

Обратите внимание, что subsys_initcall() может использоваться только встроенным (статически связанным) модулем.
module_init может использоваться либо встроенными, либо загружаемыми модулями.