Начиная с 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....
симлинке сделать то же , но для последовательности останова.
Как правило, эти сценарии обрабатывают диски, сети, ведение журналов, управление устройствами, специальные драйверы, среду и многие другие необходимые последовательности.