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.
Odpowiedzi:
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.
źródło
Czy opcje rd_start i rd_size są wystarczające?
Wygląda na to, że port ARM może mieć składnię dla opcji initrd :
źródło
W
phram
tym 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 podobnaZauważ, że potrzebujesz również
memmap
argumentu, 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źródło