2013-03-16 8 views
3

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

Пожалуйста, объясните мне в простейшим образом:

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

Q2: Что такое ramdisk? Почему и где нам это нужно?

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

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

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

Благодаря Phogat

ответ

7

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

Подробные сведения о initrd и initramfs далее.

В простых терминах, как initrd и initramfs относится к ранней стадии root filesystem (пользовательское пространство ака rootfs), который позволит вам работать очень минимальную файловую систему в памяти.

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

Что такое initrd?

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

Загрузочный загрузчик загружает изображение ядра в адрес памяти, изображение 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.

UPDATE:

Просто случилось наткнуться на a similar question

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

+0

Ну, я знаю общую идею позади этих начальных дисков RAM и зачем они нужны. Подводя итог, необходимо загрузить модули. Теперь это единственная причина? Также использует ли ядро ​​вспомогательные скрипты пользователя (из этой временной файловой системы) для загрузки модулей? Как управление передается из этой временной файловой системы в мою фактическую файловую систему? После всего изображения самой файловой системы (или может быть) просто обычный cpio-архив немного похудел. Думаю, в нем нет никакого интеллекта. Поэтому этот интеллект должен быть выгружен в ядро, я полагаю. Не могли бы вы уточнить? – HighOnMeat

+0

* «ramdisk ... реализован с использованием ramfs» * - Это неверно и противоречит самой документации Linux, о которой вы упоминаете. На протяжении всего вашего сообщения вы неправильно присваиваете ramdisk (или rd) рампами. – sawdust

 Смежные вопросы

  • Нет связанных вопросов^_^