Получив управление, ядро Linux инициализирует управление памятью, планирование, прерывания, встроенные драйверы, механизмы безопасности и другие основные подсистемы. Оно разбирает командную строку и готовится запустить первый процесс пространства пользователя.
Загрузка системы · Урок 4
Процесс загрузки: Ядро
Узнайте, как ядро инициализирует оборудование, запускает раннее пространство initramfs, достигает настоящего корня и запускает PID 1.
Зачем нужно раннее пространство пользователя
Простую корневую файловую систему иногда можно смонтировать драйверами, встроенными в ядро. Более сложным системам до доступа к настоящему корню нужны модули и инструменты. Например:
- модули контроллера хранения или файловой системы;
- разблокировка зашифрованного корня;
- сборка LVM или RAID;
- настройка сети для сетевого корня;
- обнаружение устройств и разрешение постоянных идентификаторов.
Initramfs упаковывает эти компоненты в раннюю среду пространства пользователя, передаваемую вместе с ядром.
Какую задачу обычно решает initramfs?
Initramfs и устаревший initrd
Современный initramfs обычно состоит из одного или нескольких, часто сжатых, архивов cpio, которые ядро распаковывает в начальную корневую файловую систему. Затем ядро выполняет раннюю программу /init из этой среды.
Устаревший initrd концептуально представляет образ файловой системы, загружаемый в блочное устройство в RAM и монтируемый оттуда. В именах файлов и командах загрузчика термины нередко смешиваются, поэтому проверяйте реальные инструменты и не выводите формат лишь из названия.
Initramfs должен соответствовать ядру и схеме загрузки. Отсутствующие модули, устаревшие идентификаторы устройств либо пропущенные средства шифрования и LVM могут сделать новое ядро незагружаемым, даже если его образ исправен.
В каком виде современный initramfs обычно передаётся ядру?
Переход к настоящему корню
Раннее пространство пользователя интерпретирует параметры вроде root=, ожидает нужные устройства, активирует слои хранения и монтирует заданную корневую файловую систему. Затем операция смены корня делает её новым / и по возможности освобождает временную раннюю среду.
Начальный параметр ro может поддерживать проверки целостности и контролируемый запуск, но точная последовательность зависит от дистрибутива. Проверки файловой системы выполняются в пространстве пользователя, а initramfs или более поздняя система инициализации может перемонтировать корень для чтения-записи, если это разрешает политика.
Что происходит после успешного монтирования нужного настоящего корня ранним пространством пользователя?
Запуск PID 1
Ядро выполняет настроенную программу init, обычно доступную по пути вроде /sbin/init или выбранную параметром init=. Она получает PID 1 и берёт на себя основную среду служб пространства пользователя.
Если выполнить пригодную программу init невозможно, ядро не может перейти к нормальной пользовательской системе и обычно сообщает об ошибке загрузки или panic. Ищите самый ранний сбойный уровень: ядро и командная строка, содержимое initramfs, обнаружение корня, его монтирование или выполнение PID 1.
Какова последняя крупная передача ядра на этом упрощённом этапе загрузки?
Урок завершён
Вы завершили Процесс загрузки: Ядро
Теперь вы умеете проследить загрузку ядра через раннее пространство пользователя до PID 1.
Отличать встроенную инициализацию ядра от загружаемых ранних модулей.
Связывать initramfs с временным корнем на основе cpio и
/init.Прослеживать сборку хранилища и переход к настоящему корню.
Определять выполнение PID 1 как передачу пространству пользователя.
Сохраните прогресс
Создайте бесплатный аккаунт, чтобы сохранить этот урок и продолжить на любом устройстве.
Создать бесплатный аккаунт