Initrd, Ramdisk, Initramfs, uclinux

Я работаю над переносом uclinux на плату coldfire M5272C3. Прямо сейчас у меня есть ядро, работающее из оперативной памяти с romfs в качестве моей корневой файловой системы. Я не понимаю несколько терминов, что они означают и когда их использовать....

Пожалуйста, объясните мне максимально простым способом:

Q1: Что такое initrd? Зачем нам это нужно?

Q2: Что такое виртуальный диск? Зачем и где это нужно?

Q3: что такое initramfs? Почему и где мы это используем?

Q4: Что такое ramfs? Почему и где мы это используем?

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

Спасибо, Фогат.


person Phogat Ashish    schedule 16.03.2013    source источник


Ответы (1)


ramdisk просто относится к образу диска в памяти. Он реализован с помощью драйвера ramfs VFS в ядре. Содержимое виртуального диска будет стерто при следующей перезагрузке или выключении питания.

Далее я расскажу вам подробности о initrd и initramfs.

Проще говоря, и initrd, и initramfs относятся к пользовательскому пространству ранней стадии root filesystem (также известному как rootfs), которое позволит вам запускать очень минимальную файловую систему в памяти.

Документация представлена ​​в Documentation/filesystems/ramfs-rootfs-initramfs.txt части ядра Linux. исходное дерево, которое также даст вам подробное описание того, что это такое.

Что такое initrd ?

Одним из распространенных случаев, когда требуется такая файловая система на ранней стадии, является загрузка модулей драйверов для контроллеров жестких дисков. Если драйверы присутствовали на жестком диске, это становится проблемой курицы и яйца. Наличие этих драйверов в составе rootfs на ранней стадии помогает ядру загружать драйверы для любых обнаруженных контроллеров жестких дисков, прежде чем оно сможет смонтировать реальную корневую файловую систему с жесткого диска. Другим решением этой проблемы может быть включение всех модулей драйверов в ядро, но таким образом вы увеличите размер двоичного файла ядра. Такой образ файловой системы обычно называют initrd. Это реализовано с использованием либо ramfs, либо tmpfs. Он эмулируется с помощью блочного устройства обратной петли.

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

Чем тогда он отличается от initramfs?

initramfs — файловая система еще более ранней стадии по сравнению с initrd, которая встроена в ядро ​​(конечно, контролируется конфигурацией ядра).

Насколько я знаю, и initrd, и initramfs контролируются этой единственной конфигурацией ядра, но она могла быть изменена в последних ядрах.

config BLK_DEV_INITRD

Я не буду углубляться в то, как создавать ваши собственные initramfs, но могу сказать вам, что он просто использует формат cpio для хранения файлов и может быть настроен с использованием usr/Kconfig при сборке ядра. Даже если вы не указали свой собственный образ initramfs, но включили поддержку initramfs, ядро ​​​​автоматически встраивает очень простой initramfs, содержащий /dev/console, /root и некоторые другие файлы/каталоги.

Кроме того, существует более новая файловая система tmpfs, которая обычно используется для реализации файловых систем в памяти. На самом деле более новые ядра реализуют initrd, используя tmpfs вместо ramfs.

ОБНОВЛЕНИЕ:

Просто случайно наткнулся на похожий вопрос

Это также может быть полезно

person Tuxdude    schedule 16.03.2013
comment
Что ж, я знаю общую идею этих первоначальных RAM-дисков и зачем они нужны. Подводя итог, необходимо загрузить модули. Теперь это единственная причина? Также использует ли ядро ​​вспомогательные сценарии пользовательского пространства (из этой временной файловой системы) для загрузки модулей? Как управление переносится из этой временной файловой системы в мою реальную файловую систему? В конце концов, сам образ файловой системы является (или может быть) просто обычным архивом cpio, немного утонченным. У него самого нет никакого разума, я считаю. Так что я полагаю, что этот интеллект должен быть выгружен в ядро. Не могли бы вы уточнить? - person HighOnMeat; 02.05.2015
comment
Виртуальный диск... реализован с использованием ramfs. Это неверно и противоречит той самой документации Linux, которую вы упомянули. На протяжении всего своего поста вы неправильно приравниваете ramdisk (или rd) к ramfs. - person sawdust; 04.12.2015