Я создал зацикленное устройство с использованием ядра версии 2.0.31, другие версии тоже должны работать, но они должны поддерживать все опции, перечисленные ниже.
Опции ядра, которые вам надо будет включить:
Поддержка электронных дисков (RAM disk support) (CONFIG_BLK_DEV_RAM).
Поддержка загрузочного электронного диска (Initial RAM disk (initrd) support) (CONFIG_BLK_DEV_INITRD).
Поддержка зацикленных устройств (Loop device support) (CONFIG_BLK_DEV_LOOP).
Поддержка файловой системы FAT (fat fs support) (CONFIG_FAT_FS).
Поддержка файловой системы MSDOS (msdos fs support) (CONFIG_MSDOS_FS).
Первые две опции - это сам электронный диск и загрузочный электронный диск. Следующая - это зацикленная файловая система. Последние две - это поддержка файловой системы msdos, которая необходима для подключения DOS-раздела.
Сборка ядра без модулей - это наиболее простой способ, но если вы все-таки решили использовать модули, это возможно, хотя я этого и не пробовал. Если вы используете модули, вы должны убедиться в том, что опции, используемые выше, встроены в ядро, а не собраны в виде модулей.
В зависимости от версии вашего ядра, вам, возможно, придется установить патч к ядру. Это очень простой патч, который разрешает использование зацикленной файловой системы в виде корневой.
Ядра версий до 2.0.0 - у меня нет информации по этому поводу.
Ядра версий 2.0.0 - 2.0.34 - вам придется использовать патч для ядер 2.0.х, приведенный ниже.
Ядра версий 2.0.35 - 2.0.x - патч не требуется.
Ядра версий 2.1.x - вам придется использовать патч для ядер 2.0.х или 2.2.х, приведенный ниже, в зависимости от конкретной версии ядра 2.1.x.
Ядра версий 2.2.0 - 2.2.10 - вам придется использовать патч для ядер 2.2.х, приведенный ниже.
Ядра версий 2.3.x - вам придется использовать патч для ядер 2.2.х, приведенный ниже.
Для ядер версий 2.0.x в файл /init/main.c надо добавить одну строку, в соответствии с уже измененной версией, приведенной ниже. В строке, которую надо добавить написано "loop", 0x0700.