Каковы первые операции, которые Ядро Linux выполняет на начальной загрузке?

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

26
задан rook 7 April 2010 в 07:09
поделиться

2 ответа

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

44
ответ дан 28 November 2019 в 07:00
поделиться
9
ответ дан 28 November 2019 в 07:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: