Какие первые операции выполняет ядро ​​Linux при загрузке? - PullRequest
24 голосов
/ 07 апреля 2010

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

Ответы [ 2 ]

42 голосов
/ 07 апреля 2010

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

9 голосов
/ 07 апреля 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...