Jak mam uruchomić Linux z rootfem w pamięci RAM?


16

Rootfs jest obrazem squashfs, a mój program ładujący ładuje go na jakiś adres w pamięci SDRAM. Jakie parametry muszę przekazać do jądra, aby móc z niego zamontować rootfy? Obsługa Squashfs jest wbudowana i już działa

root=/dev/mtdblock2 rootfstype=squashfs  

do uruchamiania z pamięci flash.

EDYCJA: Jest to urządzenie osadzone oparte na MIPS, wykorzystujące niestandardowy program ładujący. Zwykle bootloader wypakowuje skompresowane jądro z pamięci flash do SDRAM, a następnie jądro montuje / dev / mtdblock2 jako rootfs. Próbuję ulepszyć program ładujący, aby mógł pobierać obraz do pamięci RAM i uruchamiać się bez zapisywania w pamięci flash.

Nie mogę wymyślić, jak zmusić Linuksa do zamontowania obrazu systemu plików w pamięci RAM jako rootfs.


Opisz lepiej, co próbujesz osiągnąć, jeśli już wiesz, że squashfs działa. Skąd wiesz, że to działa? Co się dzieje? A co najważniejsze, co nie działa tak, jak chcesz?
rozcietrzewiacz

1
Z jakiego bootloadera korzysta urządzenie?
rozcietrzewiacz

Myślę, że jeśli użyjesz memdisk (z SYSLINUX) jako jądra, ładuje on cały obraz do pamięci, a następnie uruchamia się z niego
golimar

Odpowiedzi:


10

Użyłbym initramfs. ( http://www.kernel.org/doc/Documentation/filesystems/ramfs-rootfs-initramfs.txt )

Wiele dystrybucji Linuksa korzysta z initramfs (nie mylić z initrd, są różne) podczas procesu rozruchu, głównie w celu umożliwienia uruchamiania programów przestrzeni użytkownika na bardzo wczesnym etapie procesu rozruchu. Możesz go jednak używać do wszystkiego, co chcesz.

Zaletą initramfs nad initrd jest to, że initramfs używa systemu plików tmpfs, podczas gdy initrd używa urządzenia z blokiem pamięci RAM. Kluczową różnicą tutaj jest to, że dla initrd musisz wstępnie przydzielić całą przestrzeń dla systemu plików, nawet jeśli nie zamierzasz użyć całej tej przestrzeni. Jeśli więc nie korzystasz z przestrzeni systemu plików, marnujesz pamięci RAM, która na urządzeniu osadzonym jest często rzadkim zasobem. Tmpfs to system plików, który kończy się pamięci RAM, ale wykorzystuje tylko tyle pamięci RAM, ile jest aktualnie w systemie plików. Więc jeśli usuniesz plik z tmpfs, ten ram zostanie natychmiast zwolniony.

Teraz zwykle initramfs jest tymczasowy, używany tylko do uruchamiania niektórych programów na bardzo wczesnym etapie procesu rozruchu. Po uruchomieniu tych programów kontrola jest przekazywana do rzeczywistego systemu plików działającego na dysku fizycznym. Nie musisz tego jednak robić. Nic nie stoi na przeszkodzie, aby zabrakło initramfs na czas nieokreślony.


Tak więc faktycznie próbowałem skonfigurować system, który będzie działał „bez końca z initramfs”. System w większości działa, ale miałem pewne problemy - zastanawiam się, czy możesz rzucić trochę światła? Pytanie opublikowane tutaj
dtmland


0

W phramtym celu używam sterownika: emuluje urządzenie MTD przy użyciu pamięci fizycznej, co oznacza, że ​​możesz użyć dokładnie tego samego obrazu rootfs do testowania / programowania, który później wypalisz do prawdziwej pamięci flash. Niezbędna magia w linii poleceń jądra byłaby podobna

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

Zauważ, że potrzebujesz również memmapargumentu, aby jądro nie próbowało używać tej pamięci dla siebie. 9 MB to, jak duży jest mój rootfs (lub był). \ Zanim $ jest potrzebne w moim bootloaderze, może nie być w twoim. Adres, który tam wybrałem, jest dowolny, ponieważ nie wiem, jak układa się pamięć fizyczna w twoim urządzeniu, więc wybierz taki, który ma dla ciebie sens. Zakładam, że wcześniej używałeś tftp lub czegoś do załadowania rootfów pod tym adresem

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.