Passare dal kernel 2.4 al 2.6

Contenuti:

1.Introduzione

In questa tips ho cercato di riunire alcune informazione spulciate qua e là dai vari forum di Gentoo e non, per passare in modo indolore da un kernel della serie 2.4 ad un kernel della serie 2.6. Il kernel testato in questa tips e' il 2.4.6-test4. Se alcune informazioni non sono corrette o avete altre info che potrebbero migliorare questo doc, vi prego di farmele sapere scrivendo a gentoo-dev@gentoo.it.

2.Installazione e prerequisiti

Prima di installare il nuovo kernel avete bisogno di un pacchetto che si chiama module-init-tools. Basilarmente questo pacchetto installa nuovi gestori di moduli (come lsmod) nella directory /sbin e rinomina i vecchi comandi aggiungendo loro il suffisso .old (avrete così /sbin/lsmod.old, /sbin/modprobe.old, ecc.). Questi nuovi gestori sono in grado di individuare il kernel che state usando al boot (sia esso della serie 2.4, 2.5 o 2.6) e ridirigerlo al gestore di moduli appropriato in modo del tutto trasparente all'utente, in modo tale che possiate far convivere i vari kernel senza dover cambiare nessuna configurazione.

Esempio 1: Installazione module-init-tools

    # emerge module-init-tools
    

Una volta che avete installato i module-init-tools, passate al kernel

Esempio 2: Installazione dei sorgenti del kernel 2.6

    # emerge development-sources
    

3.Metodi per la configurazione del kernel

Uno dei primi cambiamenti che potrete notare è la nuova interfaccia per la configurazione del kernel. Il 'vecchio' xconfig in Tcl/Tk è stato sostituito con un nuovo xconfig basato sulle librerie QT. Per coloro ai quali non piacciono le QT c'è anche una nuova interfaccia basata sulle GTK chiamata gconfig.

I modi per configurare il kernel 2.6 includono:

# make config

Questo metodo è identico alla serie 2.4 e rimane il metodo più semplicistico di configurazione. Chiede semplicemente l'opzione per ogni configurazione, un passo alla volta. E' richiesta la bash shell.

# make menuconfig

Anche questo è identico al menuconfig della serie 2.4. Un semplice metodo basato sulle curses.

# make xconfig

Questo nuovo metodo grafico usa le librerie QT. Trovo che sia abbastanza funzionale e facile da usare.

# make gconfig

Questa opzione è un clone del nuovo xconfig, ma fa uso delle librerie GTK al posto delle QT. Sfortunatamente, nei brevi test che ho fatto crasha abbastanza spesso e sputa diversi errori.

# make oldconfig

Troverete questa opzione estremamente utile per aggiornare la serie 2.6 del kernel. A prima vista sembra identico al 'make config', comunque 'oldconfig' legge i settaggi contenuti nel file .config e automaticamente fa delle richieste basandosi su questa configurazione solo se nel nuovo kernel sono state aggiunte ulteriori voci. Per usarlo, copiate nella directory del nuovo kernel il .config che avevate nel kernel precedente e date 'make oldconfig'.

4.Configurazione del kernel

Durante la configurazione del kernel fate attenzione ad abilitare alcune opzioni direttamente nel kernel e non come moduli. Avrete bisogno di abilitare le seguenti opzioni:

Esempio 3: Opzioni da abilitare di default

    Code maturity level option --> 
        [*] Prompt for development and/or incomplete code/drivers 
    

Nella sezione "File System" accertatevi di abilitare il supporto per il filesystem /dev e per il /dev/pts, mentre non avrete bisogno del supporto per il file system /dev/dsp. Avrete anche bisogno del supporto per il "Virtual Memory Filesystem".

Esempio 4: Sezione File systems

    File systems  --->
        Pseudo filesystems  --->
                [*] /dev file system support (EXPERIMENTAL)  
                [*]   Automatically mount at boot
                [ ]   Debug devfs  
                [*] /dev/pts file system for Unix98 PTYs
                [ ]   /dev/pts Extended Attributes
                [*] Virtual memory file system support (former shm fs)
    

Ricordate di abilitare "ReiserFS" se avete partizioni ReiserFS. Stessa cosa per "Ext3". Se state usando XFS, abilitate l'ozione "XFS filesystem support". E' sempre una buona idea lasciare abilitato il supporto per ext2 anche se non lo usate.

Esempio 5: Abilitare il supporto per i vari filesystem

    File systems  --->
    supporto ext2
        <*> Second extended fs support 
    supporto ext3
        <*> Ext3 journalling file system support   
            [*]   Ext3 extended attributes  
    supporto reiserfs
        <*> Reiserfs support
    supporto XFS
        <*> XFS filesystem support
    

Per coloro che usano hard disk IDE, abilitate l'opzione "USE DMA by default" altrimenti i vostri dischi IDE avranno prestazioni veramente scandalose. Naturalmente ricordate di abilitare il supporto per "IDE disk", altrimenti il vostro kernel non vedrà i vostri dischi IDE.

Esempio 6: Per dischi IDE

     ATA/ATAPI/MFM/RLL support  --->
        <*> ATA/ATAPI/MFM/RLL support 
        .
        .
        <*> Include IDE/ATA-2 DISK support
        .
        .
        [*] Use PCI DMA by default when available
    

Se state usando RAID hardware avrete bisogno di abilitare un paio di opzioni: per controller Highpoint RAID selezionate il supporto per il chipset hpt366, il supporto per controller IDE RAID e Highpoint 370 software RAID. Per controller Promise RAID selezionate il supporto PROMISE PDC202{46|62|65|67|68|69|70}, il supporto per controller IDE RAID e il Support Promise software RAID (Fasttrak(tm)).

Se usate PPPoE per la connessione a Internet, avrete bisogno delle seguenti opzioni nel kernel (interne o preferibilmente come modulo): "PPP (point-to-point protocol) support", "PPP support for async serial ports", "PPP support for sync tty ports". Le due opzione relative alla compressione non fanno male a nessuno ma non sono necessarie come non lo è "PPP over Ethernet" che potrebbe essere usata solo da rp-pppoe.

Esempio 7: Per connessioni PPPoE

    Networking support  --->
        .
        .
        <*>  PPP (point-to-point protocol) support
        <*>  PPP support for async serial ports (NEW)
        <*>  PPP support for sync tty ports (NEW)
    

Dovrete anche compilare il supporto per input devices ("Input device support->Input devices"), i virtual terminal ("Character Devices->Virtual terminal"), la vga_console ("Graphics Support->Console...->VGA text console"), e la vt_console ("Character Devices->Support for console..."), altrimenti potreste avere l'errore "Uncompressing the Kernel ewarn ".

Esempio 8: Altri supporti da includere

    

Nota: Le seguenti opzioni sono abilitate di default. Non sono visibili con "make menuconfig", mentre con "make xconfig" vengono mostrate se selezionate dal menu "Option" -> "Show All Options".

supporto per input devices Input device support ---> [*] Input devices (needed for keyboard, mouse,...) . . supporto per virtual terminal e vt_console Character devices ---> [*] Virtual terminal [*] Support for console on virtual terminal [*] HW_CONSOLE . . support per la vga_console Graphic support ---> Console display driver support ---> [*] VGA text console (NEW) . .

Se avete un masterizzatore IDE, avrete bisogno di abilitare l'emulazione SCSI. Abilitate l'"ATA/IDE/MFM/RLL support" --> "IDE, ATA and ATAPI Block devices" --> "SCSI emulation support" ( generalmente come modulo), quindi sotto "SCSI support", abilitate "SCSI CD-ROM support" e "SCSI generic support" (anche qusti come moduli). Se avete scelto di usare le suddette opzioni come moduli, date il comando echo -e "ide-scsi\nsg\nsr_mod" >> /etc/modules.autoload.d/kernel-2.6 per caricarle automaticamente al boot.

Esempio 9: Per masterizzatori IDE

     ATA/ATAPI/MFM/RLL support  --->
        <*>   Enhanced IDE/MFM/RLL disk/cdrom/tape/floppy support
        .
        .
        <M>     SCSI emulation support 
        .
        .
     SCSI device support  --->
        <M>   SCSI CDROM support
        [*]          Enable vendor-specific extensions (for SCSI CDROM)
        <M>   SCSI generic support
    

Per l'abilitazione della scheda audio, date un'occhiata anche al capitolo relativo ad ALSA.

5.Compilazione del kernel

Una volta che avete salvato la vostra configurazione e siete tornati al prompt, potete iniziare la compilazione.

Per compilare la serie 2.6 del kernel avrete bisogno solo di due comandi:

Esempio 10: Compilazione del kernel

    # make && make modules_install
    

Noterete l'output ridotto prodotto dalla compilazione, in paragone con i kernel precedenti. I suddetti comandi creano il nuovo kernel (bzImage) in /usr/src/linux-beta/arch/i386/boot (per architetture x86) come quelli precedenti.

6.Installazione del kernel

Nota: Ricordate di montare /boot prima di installare il nuovo kernel

Ecco un esempio di installazione del nuovo kernel:

Esempio 11: Installazione del kernel

    #  pwd
    /usr/src/linux-2.6.0-test4
    # mv arch/i386/boot/bzImage /boot/bzImage-2.6.0-test4
    # mv System.map /boot/System.map-2.6.0-test4 
    # cd /boot
    # rm System.map
    # ln -s System.map-2.6.0-test4 System.map
    

Se non volete eseguire i suddetti comandi a mano potete anche dare il seguente comando:

Esempio 12: Installazione automatica del kernel

    # make install
    

Usando questo comando, viene installato il nuovo kernel in /boot con un nome univoco del tipo vmlinuz-2.6.0-test4. Se esiste già un kernel della stessa serie, viene rinominato apponendo al nome il suffisso .old.

Dovrete ora modificare il vostro bootloader (GRUB o LILO) per aggiungere una voce che permetta la scelta del nuovo kernel.

Nota: Il nuovo kernel ha bisogno di una directory /sys che dovrete creare prima di fare il reboot.

.

7.ALSA

Per molti che fanno l'aggiornamento dal kernel 2.4 al 2.6, potrebbe essere la prima volta che usano l'Advanced Linux Sound Architecture (ALSA) che ha preso il posto di OSS. Sebbene sia possibile semplicemente abilitare l'ormai in disuso OSS e far funzionare le cose come prima, è probabilmente il momento di passare ad ALSA (nello spirito di Gentoo ;-)). Grazie alle OSS API Emulation di ALSA non è una cosa estremamente difficile. Durante la configurazione del kernel, ricordate di abilitare le opzione per la OSS Emulation (SND_OSSEMUL, SND_MIXER_OSS e SND_PCM_OSS):

Esempio 13: Abiltazione dell'OSS Emulation

    <*> Sound card support
        Advanced Linux Sound Architecture  ---> 
            [*]   OSS API emulation   
            <*>  OSS Mixer API
            <*>  OSS PCM (digital audio) API
    

Ricordate inoltre di abilitare il driver appropriato per la vostra scheda audio in PCI devices.

Ed infine, installate le ultime versioni di alsa-lib e alsa-utils.

Nota: Potrebbe essere utile inserire in /etc/make.conf la variabile ALSA_CARDS assegnandogli il nome della vostra scheda audio. Io ho ALSA_CARDS="intel8x0".

Esempio 14: Installazione di ALSA

    # emerge alsa-lib alsa-utils
    

Nota: Se avete abilitato il driver della scheda audio come modulo, potete fare in modo che venga caricato al boot, inserendone il nome in /etc/modules.autoload.d/kernel-2.6.

Nota: Se dopo il riavvio non riuscite a sentire niente e chiaramente non avete avuto errori durante il boot e il relativo caricamento dei moduli della vostra scheda audio, avrete probabilmente bisogno di usare alsamixer per abilitare i vari canali audio.

Nota: Per avere un'idea del buon funzionamento della scheda audio, o perlomeno per essere sicuri che sia stata riconosciuta, potete dare il comando cat /proc/asound/cards che dovrebbe mostrarvi alcuni dati sulla vostra scheda.

8.Touchpad

Soluzione 1, testata 

Io, come tanti, ho avuto qualche problema a fare vedere a X il mouse touchpad del mio portatile. Mentre con la serie 2.4 del kernel, potevo avere un mouse PS/2 e il touchpad funzionanti nello stesso momento, non è così per la serie 2.6 dove sembra che il mouse PS/2 abbia la priorità sul touchpad.

Per far funzionare il touchpad sotto X occorre abilitare il supporto per l' "Event interface" ("Input device support ---> Event interface").

Esempio 15: Supporto per l'"Event interface"

    Input device support  --->
        .
        .
        <*> Event interface 
        .
        .
    

Questo supporto permette ai device di input di essere accessibili attraverso /dev/input/eventX, dove X sarà un numero che varia da macchina a macchina.

Una volta compilato il kernel e riavviata la macchina, dovreste avere in /dev/input alcune voci:

Esempio 16: /dev/input

    # ls /dev/input
    
    event0 event1 event2 mice mouse0
    

Quale di queste device corrisponde al touchpad? Basta dare il comando cat /dev/input/event0 e usare il touchpad per vedere comparire sullo schermo caratteri strani. Se ciò non accade, provate gli altri device event.

Occorre ora installare l'ultima versione del Synaptics touchpad driver, che trovate qui, estrarre l'archivio e copiare il driver synaptics_drv.o nella directory dei moduli di XFree, di solito /usr/X11R6/lib/modules/input/.

Esempio 17: Installazione driver Synaptics

     # wget http://w1.894.telia.com/~u89404340/touchpad/synaptics-0.11.3p11.tar.bz2
     # tar jxvf synaptics-0.11.3p11.tar.bz2
     # cd synaptics
     # cp synaptics_drv.o /usr/X11R6/lib/modules/input/
     

Occorre aggiungere ora in /etc/X11/XF86Config la voce Load "synaptics" nella sezione dei moduli e le seguenti righe nella sezione InputDevices:

Esempio 18: Modifiche a XF86Config

Section "InputDevice" 
 Driver    "synaptics" 
 Identifier  "touchpad" 
 Option    "Device"     "/dev/input/event1" 
 Option    "Protocol"    "auto-dev" 
 Option    "Edges"      "1900 5400 1800 3900" 
 Option    "Finger"     "25 30" 
 Option    "MaxTapTime"   "180" 
 Option    "MaxTapMove"   "220" 
 Option    "VertScrollDelta" "100" 
 Option    "MinSpeed"    "0.02" 
 Option    "MaxSpeed"    "0.18" 
 Option    "AccelFactor"   "0.0010" 
# Option    "Repeater"     "/dev/ps2mouse" 
# Option    "SHMConfig"    "on" 
EndSection
    

Nota: Modificate il Device in base a quello che avete trovato in precedenza

Con questa configurazione il touchpad funziona se nessun mouse PS/2 è collegato al portatile.

Soluzione 2, non testata 

Alcuni hanno dato una seconda soluzione che sfrutta il fatto di riuscire a mettere il touchpad in PS/2 compatibily mode.

Occorre naturalmente configurare il kernel col supporto psmouse.

Esempio 19: Abilitare il supporto per il psmouse

    Input device support  ---> 
        .
        .
        [*] Mice
        <*>   PS/2 mouse
        .
    

Se avete abilitato il supporto interno al kernel, ricordate di passare la seguente opzione al kernel psmouse_noext=1.

Esempio 20: Modifica grub.conf

    # vi /boot/grub/grub.conf
    
    kernel (hd0,0)/bootvmlinuz-2.6.0-beta5 root=/dev/hda3  psmouse_noext=1
    

Se invece avete scelto di abilitare psmouse come modulo, dovete caricare il modulo sempre con l'opzione psmouse_noext=1.

Dopo aver ricompilato il kernel e riavviato la macchina dovete modificare l'/etc/X11/XF86Config nella sezione "InputDevice":

Esempio 21: Modifiche all'XF86Config

Section "InputDevice" 
  Identifier "Mouse0" 
  Driver   "mouse" 
  Option   "Protocol" "auto" 
  Option   "Device"  "/dev/input/mouse" 
EndSection
    

Avendo attivi sia gpm che X entrambi i mouse dovrebbero funzionare contemporaneamente.

9.Framebuffer + bootsplash

Configurazione e compilazione del kernel 

Al momento della stesura di questa guida (kernel 2.6.0-test9), non sono riuscito a far andare il framebuffer e il bootsplash a meno di non applicare una patch al kernel della serie 2.6.

Una volta scaricata la patch occorre applicarla al kernel:

Esempio 22: Patchare il kernel

# cd /usr/src/linux-beta
# patch -p1 < /percorso/bootsplash-3.1.2-2.6.0-test9.diff

Una volta patchato, passiamo alla configurazione.

Esempio 23: Preparazione del kernel al framebuffer

# make menuconfig
Code maturity level options  ---> 
    [*] Prompt for development and/or incomplete code/drivers 
Processor type and features  ---> 
    [*] MTRR (Memory Type Range Register) support 
Device Drivers -->
    Block devices -->
        [*] Loopback device support
        <*>RAM disk support
        (4096) Default RAM disk size
        [*] Initial RAM disk (initrd) support
    Graphics support -->
        [*] Support for frame buffer devices
        [*] VESA VGA graphics support
        
        Console display driver support -->
            [*] Video mode selection support
            <M> Framebuffer Console support
            [*] Select compiled-in fonts
            [*] VGA 8x16 font

        Bootsplash configuration -->
            [*] Bootup splash screen

Nota: Probabilmente la selezione di 'Framebuffer Console support' non serve, ma senza questa selezione, non è possibile entrare in 'Bootsplash configuration'

Compiliamo e installiamo il kernel.

Esempio 24: Compilazione e installazione del kernel

# make && make modules_install
# make install

Passi successivi 

Una volta messo a posto il kernel dobbiamo costruire l'immagine per l'installazione. Possiamo sia fare un emerge bootsplash, che scaricare il pacchetto che arriva da Suse, nel qual caso va decompresso e compilato.

Esempio 25: Decompressione e compilazione del bootsplash Suse

# tar ztvf bootsplash-3.0.7.tar.bz2
# cd bootsplash-3.0.7/Utilities
# make
# cp fbmngplay fbresolution fbtruetype splash /sbin

Dovreste avere anche un'immagine e un file di configurazione per il bootsplash. Se avete installato il pacchetto bootsplash con emerge, dovreste averne in /etc/bootsplash/gentoo/. Altrimenti potete scaricare questo set.

Prepariamo l'immagine:

Esempio 26: Preparazione dell'immagine

# /sbin/splash  -s -f /etc/bootsplash/default/config/bootsplash-1280x1024.cfg > /boot/initrd-1280x1024

oppure

# /sbin/splash -s -f /etc/bootsplash/temi/ilvostrotema/config/bootsplash-1024x768.cfg > /boot/initrd.splash

Configurazione del grub 

Passiamo alla configurazione del grub.

Esempio 27: Configurazione del grub

# vi /boot/grub/grub.conf

default 0 
timeout 10 
splashimage=(hd0,0)/boot/grub/splash.xpm.gz 

# Con framebuffer e bootsplash 
title=Gentoo GNU/Linux 1.4 (+fb +splash) 
root=(hd0,0) 
kernel=(hd0,0)/boot/vmlinuz root=/dev/hda3 video=vesa:ywrap,mtrr vga=0x31A 
initrd=/boot/initrd-1280x1024 

# Con framebuffer senza bootsplash 
title=Gentoo GNU/Linux 1.4 (+fb -splash) 
root=(hd0,0) 
kernel=(hd0,0)/boot/vmlinuz root=/dev/hda3 video=vesa:ywrap,mtrr vga=0x31A 

# Senza framebuffer e bootsplash 
title=Gentoo GNU/Linux 1.4 (-fb -splash) 
root=(hd0,0) 
kernel=(hd0,0)/boot/vmlinuz root=/dev/hda3

Nota: Naturalmente modificate i vari device affinché puntino alle vostre partizioni

.

Nota: Se al boot non vedete l'immagine, provate a modificare vga in vga=791.

Nota: Modificate initrd=/boot/initrd-1280x1024 in initrd=/boot/initrd.splash se avete usato il secondo esempio nella preparazione dell'immagine.

Riavviamo il computer e incrociamo le dita ;-))



Ultimo aggiorn.:
3 Dicembre 2003
Enrico Morelli
Traduttore

Sommario: Qualche dritta per passare in modo indolore (o quasi) da un kernel della serie 2.4 alla serie 2.6.
- 2002 Gentoo.it - Domande, commenti e/o correzioni? Email gentoo-dev@gentoo.it.