Přechod na Linux Kernel 2.6

Autor: Covex <covex_at_lowlevel.cz>
Poslední změna: 23.12.2003

Úvod

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 mý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.org a 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ákladnim 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 alepsoň 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í atp.; [M] přikompilaci modulu; a informace co za část se spracovává).

Záludnosti kompilace

Při konfigurovaní kernelu (osobně používám "make menuconfig") je třeba vzít v úvahu několik novinek kernelu. Ta 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 ne jen "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 nastali s myší, ale o tom až pozdějí. 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 postaru provedete "make modules_install" a komprimovaný obraz kernelu najdete pod příslušnou architekturou jako bzImage (např. arch/i386/boot/bzImage), zkopírujete do boot, modifikujete lilo.conf nebo grub 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 sem tam ještě zapoměl něco "navyhozeni".

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:

Originalni RH9 glibc nebyla bez problemu, updateovana RH9 glibc je bez problemu:

ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-2.3.2-27.9.i386.rpm

Potrebujete tez:

ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-common-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-devel-2.3.2-27.9.i386.rpm
ftp://ftp.rpmfind.net/linux/redhat/updates/9/en/os/i386/glibc-utils-2.3.2-27.9.i386.rpm

Pokud pravidelne updateujete nemel by byt problem. Pred samotnym rpm -Fvh doporucuji zkontrolovat ze updateujete glibc pro stejnou architekturu jinak se muzete dobrat podobnych poblemu jako nasledujici clovek: 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.conf script 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 automaticke zavádění modulů, protože všechny 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ě com máte jako modul nebude fungovat. Dotazů na toto téma je na internetu spousta, odpověď na otázku "Jak sprovoznit 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/kallsyms'' 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 manualně zavést modul mousedev nejlépe asi v /etc/rc.sysinit apod.
Bez toho vám myš prostě fungovat nebude.

Sys file system

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

1:

Vytovřte /sys.


2:

Za:

mount -f /proc
v /etc/rc.sysinit přidejte na další řádek:
mount -f /sys

3:

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

4:

Přidejte:

none    /sys  sysfs   defaults  0 0
do /etc/fstab.
5:

Ve funkci halt_get_remaining v souboru /etc/init.d/halt 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ů je 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/modprobe.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 v modprobe.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 měl jsem problémy s poweroff, kdy se počítač vypl 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é. Ne jen že kernel obsahuje pouze malé množství modulů pro sensory oproti původnímu balíku, ale dokonce neexistují jěš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, mě 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ěli 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řízeni. Bohužel změny v chováni pozorovat lze. Taktéž jsem četl, že chování cdrecordu které dříve vyžadovalo scsi emulaci nebylo zcela korektní, a tak si s touto změnou ještě určitě neco užijeme.

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.