Я предполагаю, что вы говорите о x86 здесь ...
Зависит от того, где вы считаете границу между «загрузчиком» и «ядром»: начало самого ядра32-битный код защищенного режима, но само ядро предоставляет некоторый загрузочный код для перехода из реального режима.
Код реального режима находится в arch/x86/boot/
: start_of_setup
выполняет некоторые базовые настройки среды для C и вызывает main()
, что делает довольно скучные вещи, заканчивая фактическим переходом в защищенный режим (см. pmjump.S
).
От того, где вы окажетесь, зависит то, сжато ли ядро.Если это так, точка входа на самом деле является процедурой самокомпрессии.Это также довольно скучный материал и, по сути, прозрачный: код декомпрессии и сжатое ядро перемещаются вверх по памяти из памяти, затем ядро распаковывается в исходное местоположение, а затем перепрыгивает, как если бы оно было распаковано.вместе.Этот код находится в arch/x86/boot/compressed/
(точка входа startup_32
в head_32.S
).
Ядро действительно работаетправильно на startup_32
в arch/x86/kernel/head_32.S
.Код там заканчивается вызовом i386_start_kernel()
в arch/x86/kernel/head32.c
, что в итоге вызывает общий код запуска ядра в start_kernel()
.