Hlavní navigace

Přechod na Linux Kernel 2.6

29. 12. 2003
Doba čtení: 8 minut

Sdílet

Tento článek popisuje, jak za použití nejmenšího násilí přejít na Linux kernel 2.6.0.

Protože jsem strávil jedno odpoledne pokusy s nakonec, zdá se úspěšným, přechodem na kernel 2.6 na mém RH9, pokusím se ulehčit ostatním tento proces popsáním svých trablů.

Při psaní tohoto návodu jsem vycházel především z Migrating to Linux Kernel 2.6, HowTo Upgrade To The 2.6 Kernel na kerneltrap.orga dalších informací nalezených na internetu.

Základní rozdíly

Popis všech novinek najdete v jiných článcích např. na linuxzone. Zde se budu věnovat pouze základním rozdílům, které mě zasáhly.

Kompilace kernelu

Kernel 2.6.0 má o poznání uživatelsky příjemnější kompilaci než řada 2.4, tedy alespoň mě k tomuto směrovala přímo nápověda kernelu. Sekce konfigurace kernelu jsou myslím mnohem lépe rozděleny a parametry se snáze hledají. Po konfiguraci stačí pouze napsat make a zkompiluje se vše, bez nutnosti zvlášť dělat dependencies, bzImage a moduly, navíc je textový výstup kompilace uhlazen a vypisují se vskutku jen podstatné údaje – co se provádí (CC comilace, LD linkování, [M] při kompilaci modulu atp.) a která část se zpracovává.

Záludnosti kompilace

Při konfigurování kernelu (osobně používám make menuconfig) je třeba vzít v úvahu několik novinek kernelu. Tou nejzákladnější je, že kernel nevyžaduje klávesnici ani myš. Pokud je správně nenakofigurujete v sekci Input devices, máte o zábavu postaráno. Tedy pro správnou funkci klávesnice bylo v mém případě potřeba povolit nejen Keyboard a AT keyboard, ale i řadič klávesnice I8042. Dobrý nápad je zakompilovat i podporu sériového portu. Větší problémy nastaly s myší, ale o tom až později. Trochu nelogicky je v sekci Input devices i podpora pro PC Speaker, a to v sekci Misc, takže pokud chcete beepat, nezapomeňte na nej. Taktéž nezbytné je povolit podporu Hotplug. Proč, o tom v sekci o hotplugu.

Vlasní instalaci modulů stejně jako dříve provedete pomocí make modules_install a komprimovaný obraz kernelu najdete pod příslušnou architekturou jako bzImage (např. arch/i386/boot/bzI­mage), zkopírujete do boot, modifikujete lilo.conf nebo grub.conf a můžete rebootovat. S velmi podobně nakofigurovaným kernelem je rozdíl velikosti bzImage cca 200kB (2.4.23 913kB, 2.6.0 1197kB), není vyloučeno, že jsem tam ještě zapomněl něco „na vyhození“.

RPM a některé další programy

Po upgrade na 2.6.0 mají těžkosti některé programy. Nefunkčnost základního nástroje rpm z RH9 může být zvláště nepříjemná:

rpm

rpmdb: unable to join the environment
error: db4 error(11) from dbenv->open: Resource temporarily unavailable
error: cannot open Packages index using db3 - Resource temporarily unavailable (11)
error: cannot open Packages database in /var/lib/rpm
no packages 

Tento problém se dá odstranit pomocí:

export LD_ASSUME_KERNEL=2.2.5 

Lepší je ale stáhnout novější balík rpm a nainstalovat jej ještě se starým kernelem. Poslední rpm v. 4.2–1 mi funguje bez problémů.

Problémy s některými dalšími aplikacemi lze vyřešit updatem glibc, který byste tak jako tak měli provést, pokud systém aspoň trochu udržujete:

Originální RH9 glibc nebyla bez problémů, updatovaná RH9 glibc je bez problémů:

glibc-2.3.2-27.9.i386.rpm 

Potřebujete též:

glibc-common-2.3.2-27.9.i386.rpm
glibc-devel-2.3.2-27.9.i386.rpm
glibc-utils-2.3.2-27.9.i386.rpm 

Pokud pravidelně updatejete, neměl by být problém. Před samotným rpm -Fvh doporučuji zkontrolovat, že updatujete glibc pro stejnou architekturu, jinak se můžete dobrat podobných problémů jako následující člověk:

I tried rpm -Uvh glibc*, but it was not a pain-free process, as rpm
choked halfway through. I had to rpm -e the old one and rpm -Uvh --force
the new one. That got it working. 

Modutils / module-init-tools

Nezbytný pro správnou práci s novými moduly je update modutils – tedy nové modprobe, insmod, rmmod atd. RPM můžete najít níže, já jsem ale raději použil přímo balík module-init-tools v poslední verzi.

./configure --prefix=/
make moveold
make
make install

Nezbytné je též vytvořit modprobe.conf, protože /etc/modules.conf se už zřejmě nepoužívá. Abyste vygenereovali /etc/modprobe.conf, použijte ./generate-modprobe.confscrip­t, který je v module-init-tools:

./generate-modprobe.conf /etc/modprobe.conf

Výsledek je radno prohlédnout a zkorigovat, v základu by měl stačit.

Hotplug – důležité

Ač jsem nad tím nejdříve mávl rukou, protože žádné hotplug zařízení nepoužívám, nenechte se názvem zmást a proveďte následující úpravu. Bez této úpravy vám nebude fungovat automatické zavádění modulů, protože všechna zařízení podle nové filozofie zavádějí moduly právě přes hotplug request. Tak se vám stane, že po bootu nebude zdánlivě fungovat vůbec nic – prostě co máte jako modul, nebude fungovat. Dotazů na toto téma je na internetu spousta, odpověď na otázku „Jak zprovoznit auto load modulu ve 2.6“ však asi žádná – nebo spíš jedna – tato.

Tedy v kernelu je pořeba zakompilovat CONFIG_HOTPLUG. Následně nahraďte všechny výskyty /proc/ksyms pomocí/proc/ka­llsyms v /etc/rc.sysinit.

Samostatnou kapitolu tvoří některá další zařízeni – především PS/2 myš. Jak jsem se dočetl v jakési konferenci, zařízení tohoto typu není v novém kernelu schopno samo zavádět moduly. Je tedy třeba manuálně zavést modul mousedev, nejlépe asi v /etc/rc.sysinit apod. Bez toho vám myš prostě fungovat nebude.

Sys file system

Další kapitolou je sysfs. Dohadů, proč k jeho vzniku došlo, bylo dost, faktem je, že prostě existuje, takže hurá do jeho zprovoznění.

  • Vytvořte /sys.

  • Za:

    mount -f /proc

    v /etc/rc.sysinit přidejte na další řádek:

    mount -f /sys
  • Najděte:

    action $"Mounting proc filesystem: " mount -n -t proc /proc /proc 

    v /etc/rc.sysinit a přidejte řádek:

    action $"Mounting sysfs filesystem: " mount -n -t sysfs /sys /sys 
  • Přidejte:

    none    /sys  sysfs   defaults  0 0

    do /etc/fstab.

  • Ve funkci halt_get_remaining v souboru /etc/init.d/hal­t změňte

    awk '$2 ~ /^\/$|^\/proc|^\/dev/{next}

    na

    awk '$2 ~ /^\/$|^\/proc|^\/sys|^\/dev/{next}

USB

USB jsem zatím více nezkoušel. Podle jednoho ze zdrojů se však změnila jména modulů pro USB. Změny naleznete v /etc/modprobe.conf

(hledejte usb-controller) a opět bude pořeba poopravit
/etc/rc.sysinit. Pokud používáte USB klávesnici nebo myš, budete
muset zřejmě nahradit keybdev pomocí usbkbd a
mousedev pomocí usbmouse. Také je potřeba přepsat cesty
/proc/bus/usb na /sys/bus/usb. (Což byste měli udělat i v

/etc/init.d/halt.)

V /etc/rc.sysinit hledejte needusbstorage a změňte asi následovně:

needusbstorage=
if [ $usb = "1" ]; then
    needusbstorage=`LC_ALL=C grep -e "^I.*Cls=08" /sys/bus/usb/devices 2>/dev/null`
    action $"Initializing USB HID interface: " modprobe hid 2> /dev/null
    action $"Initializing USB keyboard: " modprobe usbkbd 2> /dev/null
    action $"Initializing USB mouse: " modprobe usbmouse 2> /dev/null
fi 

Zvuk

Kernel 2.6.0 by měl používat ALSA driver. K jeho zprovoznění je potřeba něco podobného následujícímu v /etc/modpro­be.conf.

alias char-major-14 soundcore
alias sound-slot-0 snd-intel8x0
alias snd-card-0 snd-intel8x0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
install sound-slot-0 /sbin/modprobe --ignore-install sound-slot-0 && { /bin/aumix-minimal -f /etc/.aumixrc -L >/dev/null 2>&1; /bin/true;  }
remove sound-slot-0 { /bin/aumix-minimal -f /etc/.aumixrc -S >/dev/null 2>&1; /bin/true; }; /sbin/modprobe -r --ignore-remove sound-slot-0 

Já jsem ALSA zatím na 2.6.0 neškádlil, protože moje předchozí zkušenosti s ALSA na 2.4.x nebyly nejlepší (především emulace OSS). V kernelu ale bez problémů můžete zaškrtnout při konfiguraci OSS jako moduly, takže původní OSS fukcnionalita by měla zůstat zachována bez problémů.

Update 23. 12.: Tak jsem se rozhodl sprovoznit ALSA. Zdá se, že s ALSA z kernelu nemám problémy s OSS emulací, jako jsem měl dříve, a vše funguje výborně. Trochu zabrat ovšem človeku dá správné ukládání mixeru. Záludnost spočívá jednak v nové syntaxi modprobe.conf, která nezná pre-install a post-remove, ale pouze install a remove. Zřejmě nejsprávnější zápis je takovýto:

install snd-emu10k1 /sbin/modprobe --ignore-install snd-emu10k1 &&
{ /usr/sbin/alsactl restore >/dev/null 2>&1 || :; }
remove snd-emu10k1 { /usr/sbin/alsactl store >/dev/null 2>&1 || :; }; /sbin/modprobe -r --ignore-remove snd-emu10k1 

ani tak ale nebyl mixer při ukončení systému ukládán (navíc se neuloží, ani když použijete rmmod, musíte jít přes modprobe -r) a nezbylo mi než vylepšit /etc/init.d/halt a upravit tento řádek

runcmd $"Saving mixer settings" /bin/aumix-minimal -f /etc/.aumixrc -S; /usr/sbin/alsactl store 

Pokud někdo jako já chce na svém SB Live! (když už ALSA) konečně i MIDI a sequencer, musí se do věci trochu opřít. Stručně jen doplním, že install vmodprobe.conf to chce vylepšit ještě o

sfxload /etc/midi/8MBGMSFX.SF2 

sxfload musíte najít na netu a 8MBGMSFX.SF2 najdete na svém CD ke kartě.

ACPI a APM

Již dříve jsem zkoušel ACPI, ale bohužel jsem měl problémy s poweroff, kdy se počítač vypnul tak, že už šel probudit jen vypínačem, takže jsem zůstal u APM, které dělalo, co jsem potřeboval. V rámci snížení množství problemů jsem tedy i u 2.6.0 zařadil do commadline parametr kernelu acpi=off a APM funguje, jak má.

Používám i CPUcool pro AMD, jak je popsán na internetu, a zdá se, že i ten funguje, jak má.

lm sensory

Již dlouho používám lm-sensors. Podle náznaků na internetu a v kernelu jsem se těšil na bezproblémový provoz lm sensorů přímo s kernelem. Bohužel v tomto směru bylo překvapení nepěkné. Nejen že kernel obsahuje pouze malé množství modulů pro sensory oproti původnímu balíku, ale dokonce neexistují ještě ani uživatelské programy z balíku lm sensors, kterými byste je mohli nakonfigurovat a používat. Na stránkách projektu lm sensors sice již píší, že balík 2.8.2 by měl mít utility pro kernel 2.6, mně se je ovšem nepodařilo zkompilovat. Jak se dočtete v README i2c, ani zbytek modulů pro sensory nelze pro 2.6 v tuto chvíli zkompilovat vůbec.

CD ROM/RW mechaniky

V jádře 2.6.0 by měly být vypalovačky použitelné a hlavně používané přímo přes IDE – není tedy třeba používat SCSI emulaci. Já ji pro jistotu zkompiloval jako modul. Zdá se ale, že vskutku nebude potřeba a stačí zařízení /dev/cdrom přelikovat na /dev/hdc a ve vašem vypalovacím software změnit používané zařízení. Bohužel změny v chování pozorovat lze. Taktéž jsem četl, že chování cdrecordu, který dříve vyžadoval SCSI emulaci, nebylo zcela korektní, a tak si s touto změnou ještě určitě něco užijeme.

root_podpora

SCSI emulaci jsem zkoušel také, příliš úspěchu jsem ovšem neslavil, takže jsem v tomto případě přešel na novější a doufejme lepší technologii.

RPMka

Zřejmě vývojová rpm kernelu 2.6 od někoho z RedHatu. Nezkoušel jsem.

Byl pro vás článek přínosný?