Portál AbcLinuxu, 1. května 2025 06:59
Hip hip hurá! Už je to tady! Po čtrnácti dnech neustálého kompilování jádra, zjišťování komponent a vyrábění initramdisků jsem konečně zjistil, proč ten krám na bedně jede a na notebooku ne.
Abyste byli v obraze: zhruba před 2 týdny jsem se rozhodl rozchodit na svém notebooku bootsplash. Díky supr článku na linux.ic.cz jsem si ověřil, že opravdu vybírám všechny potřebné součásti jádra, aby to šlapalo (autoři se totiž v návodu omezili pouze na jádra 2.4.x a tak při kompilaci 2.6.x jádra marně hledám např. "Use splash screen instead of boot logo"...). Jádro jsem si zkompiloval prvně na bedně (Slackware 10.1, resp. Fedora 1). Vše se tvářilo v pohodě. Začal jsem tedy laborovat s konfigurací bootsplashe. Než jsem zjistil, proč mi nejede progressbar, chvíli to trvalo. Jde o to, že během startu musí "něco" posílat číselné údaje do /proc/splash
, čímž se nastaví aktuální hodnota progressbaru. Nepřipadá mi to jako příliš rozumné řešení, už proto, že na začátku některého ze skriptů, které se provádí při startu systému, se musí připsat funkce, která to bude provozovat, a pak je také nutné "zaprasit" jednotlivé startovací skripty řádky s názvem funkce a aktuální číselnou hodnotou... Navíc tím odpadá možnost nastavovat prbar plynule a před předáním řízení ramdisku, resp. initu.
Nastala vhodná chvíle, zkompilovat jádro pro můj notebook (FC3). Stalo se, jádro naběhlo a tak jsem zadal splash -s -f bootsplash.conf >> /boot/initrd.splash
. Předtím jsem zkopíroval původní initramdisk na /boot/initrd.splash. A jaký byl výsledek? Při dalším startu nenaběhl initramdisk a jádro mi chladnokrevně sdělilo, že: VFS: Cannot open root device "/dev/hda2" or unknown-block(3,2)
. Paradoxně tuto hlášku zná strýček Google i na stránkách v mém rodném jazyce, ale nikde není rozumné vysvětlení problému. Kdekdo tvrdí, že nemám načtený modul pro ext3, ale to je blbost, protože ho mám zakompilovaný přímo v jádře. A pointa: Může za to bootsplash!
Průběžně jsem kompiloval jádro s podporou různých zařízaní a filesystémů v domnění, že jsem na něco zapomněl. Nicméně až opětovné testování na bedně, kde vše jelo i s novými jádry a ramdisky, mě přivedlo na záludnou myšlenku: "A je ten ramdisk na té bedně vůbec nutný?" Odpověď zní ne. Zatímco na mém notebooku vytváří obsah adresáře /dev udev, na bedně je již vytvořený. Co z toho plyne? Bootsplash připojením svých obrázků zprzní initramdisk, takže pak nejde spustit. Na bedně to nevadí, protože tam jsou zařízení jako /dev/hda2, /dev/console
apod. už vytvořená. Na notebooku je ale vytváří udev, který je spuštěn po načtení ramdisku. Jenže když ten ramdisk nelze přečíst, tak nelze spustit udev a pak chybí /dev/hda2 a těžko ho pak přimountujeme, že...
Tedy poučení pro příště: Nevěřte, že po připojení obrázků bootsplashe příkazem splash -s -f config >> /boot/initrd bude initrd použitelný. Neplatí to ani pro gzipovaný cpio archiv (FC3) ani pro klasický gzipovaný ext2 (FC1).
Poznámka na okraj: Kdo se chce v FC3 podívat do distribučního ramdisku, ať udělá: mkdir /tmp/ramdisk; cd /tmp/ramdisk; gunzip - < /boot/initrd | cpio -iv
a kdo chce initrd vytvořit z aktuálního adresáře, nechť udělá find ./ | cpio -co | gzip - > /boot/initrd
Až se vzpamatuju z tohoto zážitku a přestanu ze spaní drmolit "make menuconfig, make, teďka chvilu pauza, pak překopírovat jádro, vytvořit initrd a nabootovat -- a sakra, vono to furt nejede", hodím sem odkaz na nějaký pěkný splash-obrázek... Hledám něco fenomenálního, co by dostatečně provokovalo všechny Windowsáky sedící v přednáškovém sále za mnou
Tiskni
Sdílej:
teďka chvilu pauzaProč? Pomodlíš se?
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.