почему не просто обычные файлы вместо initramfs или initrd? - PullRequest
1 голос
/ 16 января 2010

Ядро linux использует своего рода ram-диск для доступа к модулям на ранней стадии загрузки. Из любопытства хочу понять, у меня есть вопрос: Файл, содержащий initramfs / initrd, должен быть доступен для ядра на этом этапе. Это означает, что ядро ​​должно иметь поддержку соответствующей файловой системы. Так почему же содержимое initramfs не может находиться в той же файловой системе, что и обычные файлы?

Ответы [ 3 ]

6 голосов
/ 16 января 2010

Файл, содержащий initramfs / initrd, должен быть доступен для ядра на этом этапе.

Похоже, в этом суть вашего замешательства: не ядро ​​ 1006 * читает initramfs / initrd, а загрузчик 1008 *! Ядру не нужно знать, как получить доступ к initramfs / initrd. Вот и все балл упражнения!

загрузчик загружает initramfs / initrd в память, и существует четко определенный протокол связи, который позволяет загрузчику сообщать ядру, по какому адресу памяти он загрузил initramfs / initrd.

В случае initramfs образ (ы) initramfs также может быть добавлен к образу ядра.

1 голос
/ 19 января 2010

Сначала загрузчик (вероятно, LILO или Grub ) использует вызовы BIOS для чтения образа ядра с вашего загрузочного диска. Затем он передает управление ядру, которое он только что поместил в системную память.

Ядро не использует вызовы BIOS для доступа к дискам. Когда ядро ​​загружается, оно сканирует систему на наличие устройств и загружает модули драйверов устройств для каждого устройства в системе, монтирует корневую файловую систему и запускает первый пользовательский процесс.

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

Решение состоит в том, чтобы поместить все эти драйверы в начальный ramdisk (initrd); этот образ виртуального диска считывается загрузчиком и помещается в ОЗУ вместе с ядром, и это дает ядру набор драйверов, необходимый для доступа к корневой файловой системе.

Без этого вам понадобятся все драйверы, необходимые для доступа к корневой файловой системе, встроенной в ядро.

1 голос
/ 16 января 2010

Может быть. Образ initrd не нужен для загрузки, но большинство его используют. Однако это позволяет вам иметь различные настройки для ваших файловых систем. Например, initrd обычно требуется при использовании файловой системы non-ext2 (NFS? XFS?), При использовании RAID или при размещении корневой файловой системы на необычном устройстве (USB-накопитель? CDROM с unionfs?).

Этого, конечно, можно избежать, скомпилировав подходящую файловую систему или драйверы RAID в ваше ядро, но это увеличит ваше ядро.

...