Embedded Linux - boot z initramfs
Pavel Troller
patrol na sinus.cz
Čtvrtek Březen 26 06:29:10 CET 2015
Zdravím,
tak už to chodí.
Trik je následující: Pokud se má spustit initramfs, postupuje se ODLIŠNĚ
v případě, kdy je block layer instalován, a kdy není.
Pokud block layer není, provádí se v initramfs hledání programu init na
mnoha místech - /sbin/init, /bin/init, /init, /bin/sh (pokud init není) a
teprve když se nic z toho nenajde, systém to vzdá.
Pokud block layer je, hledá v initramfs init jiná rutina a ta to fláká -
kouká na jediné místo, a to /init. Pokud tam žádný nenajde, prohlásí
initramfs za neplatný a jde hledat root device.
Já jsem vytvářel initramfs tak, že jsem odstranil skutečný init z /sbin
(protože ho tam nechci, chci rovnou shell) a nahradil jej odkazem na shell.
To stačilo v případě nepřítomnosti block layer, ale nestačilo v tom druhém.
Takže, samozřejmě, byla to moje chyba. O tom, že v initramfs by měl být
/init se píše, ale když mi to bootovalo v případě bez block layer,
nepřikládal jsem tomu takovou pozornost, jak jsem měl.
Inu, normálně na velkých strojích ve své distribuci initramfs nepoužívám,
tak holt jsem se musel i po těch letech zase něco naučit :-).
Omlouvám se za šum, ale třeba se to někomu bude taky hodit...
Zdraví Pavel
> Zdravím,
> mám tu problém, se kterým si, ač Linux dělám už docela dlouho, nevím
> zatím rady.
> Mám takovou krabičku s Blackfinem a v ní běží Linux. Jediným mass storage
> v krabičce je NAND Flash + malá SPI Flash na bootloader.
> V první partici NAND je kernel, který v sobě má přibalený initramfs.
> Pokud v kernelu není zakompilovaná podpora Block Devices (tj. NAND není
> přístupná jako mtdblock<x>), vše funguje, kernel bootne a dostanu shell z
> initramfs. S NAND však nemohu pracovat (formátovat, vytvořit root fs).
> Pokud v kernelu popdora Block Devices zakompilovaná je, tak mi kernel hodí
> panic s typickou hláskou, že nemůže namountovat root filesystem - bodejť by
> mohl, když ta NAND dosud nebyla ani zformátovaná, natož aby v ní ten root fs
> byl. Potřebuji boot z initramfs, kde mám připravené formátovací a jiné
> utility. Zdá se však, že initramfs je v tomto případě ignorován.
> Kernel mi stále vnucuje ideu použít vhodný parametr root=. Netušíte, jak
> jej nastavit ? Většina různých tutoriálů pracuje s initrd, ten se pak uvádí
> jako parametr initrd=<path>, ale u interního initramfs přibaleného v jádře
> jako cpio archiv to nikdo neřeší.
> Nesetkali jste se s tím náhodou ?
> Zdraví Pavel
Další informace o konferenci Hw-list