Як у мене завантажуватися Linux з rootfs в оперативній пам’яті?


16

Корінь - це зображення squashfs, і мій завантажувач завантажує його на якусь адресу в SDRAM. Які параметри мені потрібно передати ядру, щоб воно могло звідти монтувати корені? Підтримка Squashfs вбудована, і вона вже працює

root=/dev/mtdblock2 rootfstype=squashfs  

для завантаження зі спалаху.

РЕДАКТУВАННЯ: Це вбудований пристрій на базі MIPS із використанням користувальницького завантажувача. Зазвичай завантажувач завантажує стиснене ядро ​​зі спалаху в SDRAM, а потім ядро ​​монтує / dev / mtdblock2 як rootfs. Я намагаюся вдосконалити завантажувач, щоб він міг завантажувати зображення на свою оперативну пам’ять і завантажуватися, не записуючи на спалах.

Я не можу зрозуміти, як змусити Linux монтувати зображення файлової системи в оперативній пам'яті як rootfs.


Опишіть, будь ласка, краще, чого ви намагаєтесь досягти, якщо ви вже знаєте, що працює сквош. Звідки ти знаєш, що це працює? Що сталося? І найголовніше, що працює не так, як вам хочеться?
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аргумент, щоб переконатися, що ядро ​​не намагається використовувати цю пам'ять для себе. 9 Мб - наскільки великі мої кореневі файли (або були). \, Перш ніж $ потрібен у моєму завантажувачі, може бути не у вашому. Адреса, яку я вибрав там, є довільною, тому що я не знаю, як фізична пам'ять розміщена на вашому пристрої, тому виберіть ту, яка має сенс для вас. Я припускаю, що ви раніше використовували tftp або щось для завантаження ваших rootfs за цією адресою

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.