Начиная с Linux 2.6:
ядро
После загрузки в оперативную память ядро выполняет следующие функции.
setup():
- Постройте таблицу в RAM, описывающую расположение физической памяти.
- Установите задержку повторения клавиатуры и скорость.
- Инициализируйте карту видеоадаптера.
- Инициализируйте контроллер диска с параметрами жесткого диска.
- Проверьте шину IBM Micro Channel.
- Проверьте наличие указывающих устройств PS / 2 (шинная мышь).
- Проверьте поддержку расширенного управления питанием (APM).
- Если поддерживается, создайте таблицу в ОЗУ с описанием доступных жестких дисков.
- Если образ ядра был загружен низко в ОЗУ, переместите его в высокий.
- Установите контакт A20 (совместимость для древних микропроцессоров 8088).
- Настройте предварительную таблицу дескрипторов прерываний (IDT) и предварительную таблицу глобальных дескрипторов (GDT).
- Сброс модуля с плавающей запятой (FPU).
- Перепрограммируйте программируемые контроллеры прерываний (PIC).
- Переключитесь из реального в защищенный режим.
startup_32():
- Инициализируйте регистры сегментации и временный стек.
- Очистить все биты в
eflagsрегистре.
- Заполните область неинициализированных данных нулями.
- Вызывает
decompress_kernel()распаковку образа ядра.
startup_32() (то же имя, другая функция):
- Инициализируйте регистры окончательной сегментации.
- Заполните
bssсегмент нулями.
- Инициализируйте временные таблицы страниц ядра.
- Включить подкачку
- Настройте стек режима ядра для процесса 0.
- Снова очистите все биты в
eflagsрегистре.
- Заполните IDT нулевыми обработчиками прерываний.
- Инициализируйте первый фрейм страницы с параметрами системы.
- Определите модель процессора.
- Инициализируйте регистры с адресами GDT и IDT.
start_kernel(): Почти каждый компонент ядра инициализируется этой функцией, это только несколько.
- планировщик
- Зоны памяти
- Распределитель системы друзей
- IDT
- SoftIRQs
- Дата и время
- Распределитель плиты
- Создать процесс 1 (
/sbin/init)
Полный «список» доступен в источниках на linux / init / main.c
В этом
Init запускает весь необходимый пользовательский процесс, чтобы привести систему в нужное состояние, эта процедура сильно зависит от распределения и вызванного уровня запуска.
Введите runlevelв консоль, это даст вам текущий уровень выполнения вашей системы.
Посмотрите на /etc/rcX.d/(или /etc/rc.d/rcX.d/), заменив X вашим уровнем запуска.
Это символические ссылки, упорядоченные по приоритету выполнения. S01....означает, что эти сценарии запускаются очень рано, а S99....запускаются в самом конце процесса загрузки. В KXX....симлинке сделать то же , но для последовательности останова.
Как правило, эти сценарии обрабатывают диски, сети, ведение журналов, управление устройствами, специальные драйверы, среду и многие другие необходимые последовательности.