Как мне загрузить Linux с rootfs в оперативной памяти?

16

Rootfs - это образ squashfs, и мой загрузчик загружает его по некоторому адресу в SDRAM. Какие параметры мне нужно передать ядру, чтобы он мог оттуда смонтировать rootfs? Поддержка Squashfs встроена, и она уже работает с

root=/dev/mtdblock2 rootfstype=squashfs  

для загрузки с флешки.

РЕДАКТИРОВАТЬ: Это встроенное устройство на основе MIPS, используя пользовательский загрузчик. Обычно загрузчик извлекает сжатое ядро ​​из флэш-памяти в SDRAM, а затем ядро ​​монтирует / dev / mtdblock2 в качестве rootfs. Я пытаюсь улучшить загрузчик, чтобы он мог загружать образ в оперативную память и загружаться без записи во флэш-память.

Я не могу понять, как заставить Linux монтировать образ файловой системы в ОЗУ в качестве rootfs.

Атилла Филиз
источник
Пожалуйста, опишите лучше, чего вы пытаетесь достичь, если вы уже знаете, что работает squashfs. Откуда ты знаешь, что это работает? Что происходит? И самое главное, что не работает так, как вы хотите?
rozcietrzewiacz
1
Кроме того, какой загрузчик использует устройство?
rozcietrzewiacz
Я думаю, что если вы используете memdisk (из SYSLINUX) в качестве ядра, он загружает весь образ в память, а затем загружается с него
golimar

Ответы:

10

Я бы использовал initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Многие дистрибутивы Linux используют initramfs (не путать с initrd, они разные) во время процесса загрузки, в основном, чтобы иметь возможность запускать программы пользовательского пространства очень рано в процессе загрузки. Тем не менее, вы можете использовать его для чего угодно.

Преимущество initramfs перед initrd состоит в том, что initramfs использует файловую систему tmpfs, в то время как initrd использует блочное устройство. Ключевое отличие здесь состоит в том, что для initrd вы должны предварительно выделить все пространство для файловой системы, даже если вы не собираетесь использовать все это пространство. Поэтому, если вы не используете пространство файловой системы, вы теряете оперативную память, которая на встроенном устройстве часто является дефицитным ресурсом. Tmpfs - это файловая система, в которой заканчивается оперативная память, но используется только столько оперативной памяти, сколько используется в настоящее время в файловой системе. Так что, если вы удалите файл из tmpfs, этот оперативный диск будет немедленно освобожден.

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

Патрик
источник
Так что я на самом деле пытался настроить систему, которая работает «из initramfs на неопределенный срок». Система работает по большей части, но у меня были некоторые проблемы - мне интересно, сможете ли вы пролить свет? Вопрос размещен здесь
dtmland
0

phramДля этой цели я использую драйвер: он эмулирует MTD-устройство с использованием физической памяти, а это означает, что вы можете использовать для тестирования / разработки точно такой же образ rootfs, который позже вы собираетесь записать на настоящую флэш-память. Необходимая магия в командной строке ядра будет что-то вроде

phram.phram=rootfs,0x100000,9Mi root=/dev/mtdblock0 memmap=9M\$100000

Обратите внимание, что вам также нужен memmapаргумент, чтобы убедиться, что ядро ​​не пытается использовать эту память для себя. 9MB - насколько велик мой rootfs (или был). \ Before $ необходим в моем загрузчике, может не быть в вашем. Адрес, который я выбрал, является произвольным, потому что я не знаю, как распределяется физическая память на вашем устройстве, поэтому выберите тот, который имеет смысл для вас. Я предполагаю, что вы ранее использовали tftp или что-то для загрузки ваших rootfs по этому адресу

telent
источник