Загружено ли все ядро ​​в память при загрузке?

Я прочитал этот популярный документ IBM (я вижу, что он довольно часто упоминается в Интернете), объясняя функцию исходного RAM-диска.

Я ударил стену в концептуализации того, как это работает.

В документе говорится:

Загрузочный загрузчик, такой как GRUB, идентифицирует ядро, которое должно быть загружено, и копирует этот образ ядра и любой связанный initrd в память

Я уже смущен: копирует ли это все ядро ​​в память или только часть его? Если все ядро ​​находится в памяти, то зачем нам даже нужен начальный RAM-диск?

Я думал, что цель initrd – иметь небольшой обобщенный образ ядра, а initrd будет устанавливать в нем правильные модули до загрузки образа ядра. Но если все ядро ​​уже в памяти, зачем нам нужно initrd?

Это также вызывает другое, что меня смущает – где модули, которые загружаются в ядро? Все модули ядра хранятся внутри initrd?

  • RHEL: не может использовать утилиту ipset с ошибкой: не удается открыть сеанс для ядра
  • Полная система UEFI, Self-скомпилированная + Clover 2 Grub 2, установка Debian kFreeBSD?
  • Заголовки ядра для инструментов VMware
  • Debian: получить имя пакета для установленного файла
  • Изучение того, как создать собственное ядро ​​Linux
  • Являются ли множественные сигналы, передаваемые процессу, обслуживаемому последовательно, или их обработчик сигналов может каскадироваться?
  • Будут ли компилировать модули make-kpkg?
  • USB-диск не работает на новом ядре
  • 3 Solutions collect form web for “Загружено ли все ядро ​​в память при загрузке?”

    Все ядро ​​загружается в память при загрузке, как правило, вместе с initramfs настоящее время. (По-прежнему можно настроить систему для загрузки без initramfs но это необычно на настольных компьютерах и серверах.)

    initramfs заключается в предоставлении функциональности, необходимой для монтирования «реальных» файловых систем и продолжения загрузки системы. Это включает в себя модули ядра, а также различные двоичные файлы: вам нужно как минимум udev , возможно, некоторые сети и kmod которые загружают модули.

    Модули могут быть загружены в ядро ​​позже, чем просто загрузка, поэтому нет никакой специальной подготовки ядра initramfs . Они могут храниться где угодно: initramfs , /lib/modules в реальной файловой системе, в дереве разработки, если вы разрабатываете модуль … В initramfs должны быть только модули, необходимые для монтирования корневой файловой системы (которая содержит остальные).

    Все ядро ​​(но не его модули) будет загружено в память. Если есть модули, которые нужны ядру до того, как будут доступны какие-либо файловые системы (это обычно означает драйверы для файловых систем и их устройств), тогда эти модули будут в initramfs (в памяти), и ядро ​​загрузит их оттуда. Другие модули могут быть загружены позже из файловой системы.

    Ядро в современных установках Linux в значительной степени основано на модуле, т. Е. Собственно ядро ​​(загруженное при загрузке в ОЗУ) включает в себя только минимальную функциональность, все остальное скомпилировано как модули (загружаемые во время выполнения). Чтобы сделать эту работу, даже если, например, устройства или файловые системы, необходимые для загрузки, являются модулями, initramfs загружается с ядром (как следует из названия, это область RAM с простой файловой системой, установленной при загрузке). Эта временная файловая система монтируется в / , и содержит программы запуска и необходимые модули. Как только initramfs , Linux выполняет pivot_root(8) , создавая реальное / и бросая содержимое initramfs .

    Дело в том, что, например, дистрибутив может скомпилировать одно ядро (минимальное ядро ​​и полный набор модулей), а при установке ядра создать initramfs учетом аппаратного обеспечения и настройки целевой машины. Все это требуется из-за дикого разнообразия устройств и конфигураций «Персональных компьютеров».

    Interesting Posts

    CentOS подключен к Интернету, но не обновляет

    Изменение цвета фона терминала GNOME на лету

    Передайте переменную окружения из текущей оболочки в системный блок

    Как удалить команду из завершения bash?

    Почему пользователь sudo может использовать sched_setscheduler SCHED_RR, а root не может?

    Solaris / bin / sh поиск файла ведет себя иначе, чем выполнение файла. Зачем?

    Как принудительно обновлять файл, если оставить его без изменений через 55 минут?

    Запрос удаленного почтового сервера POP3 с использованием BASH

    LVM-зеркало создает большую нагрузку время от времени, как снизить эти эффекты?

    Как можно вычесть 2 поплавки, которые были извлечены из 2 других файлов с помощью BASH

    Проверить через Shell-скрипт, если сервер в настоящее время передает через dlna

    Почему я должен дважды вставить USB-накопитель для его установки?

    Установите umask для блока systemd

    Как изменить владельца / разрешения автоматического монтирования на встроенный linaro linux

    Почему `sort <(ls -l)` работает, но `sort <(ls -l)` fail?

    Linux и Unix - лучшая ОС в мире.