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