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

Каковы первые операции, выполняемые ядром Linux при загрузке?

После того, как загрузчик выполнит выполнение ядра, что произойдет? Я знаю ассемблер, так какие первые инструкции нужно сделать ядру? Или есть функция C, которая делает это? Какова последовательность запуска, прежде чем ядро ​​может выполнить произвольный двоичный файл?

4b9b3361

Ответ 1

Я предполагаю, что вы говорите о 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().