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

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

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

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

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

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

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

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

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 учетом аппаратного обеспечения и настройки целевой машины. Все это требуется из-за дикого разнообразия устройств и конфигураций «Персональных компьютеров».

  • Почему CONFIG_NO_HZ не установлен по умолчанию
  • Когда понадобится initrd?
  • Запуск Linux в swap обратно в память
  • BSD Kernel Vs. Ядро Linux?
  • VGA и DVI, установите консоль ядра по умолчанию на один
  • требует ли второе ядро ​​kexec
  • Как определить словосочетание в программировании ядра Linux?
  • Ядро 3.14.1 ошибки компиляции
  • Как вызвать сброс сторожевого таймера моего встроенного Linux-устройства
  • Какой файл в / proc считывается ядром во время процесса загрузки?
  • Debian + Linux kernel 3.12.22: опция «Загрузка модуля ядра» недоступна
  • Sata hotplug не работает
  • Linux и Unix - лучшая ОС в мире.