В программах пространства пользователя main()
- это точка входа в программу, которая вызывается кодом инициализации libc при выполнении двоичного файла. Код ядра не может позволить себе полагаться на libc, так как сам libc использует интерфейс системного вызова ядра для распределения памяти, ввода-вывода, управления процессами и т. Д.
Тем не менее, эквивалент main()
в коде ядра есть start_kernel()
, который вызывается загрузчиком после загрузки образа ядра, распаковывает его в память и настраивает необходимое оборудование и пейджинг памяти. start_kernel()
выполняет большую часть настройки системы и в конечном итоге порождает процесс инициализации.
Точка входа в модули ядра Linux - это функция init, которая регистрируется в ядре путем вызова module_init()
макроса. Зарегистрированная функция инициализации модуля затем вызывается кодом ядра через do_initcalls()
функцию во время запуска ядра.