Guida alla compilazione del kernel 2.6.x - by phoenix

Premessa: questa guida è stata scritta per facilitare il passaggio dal kernel 2.4.x al kernel 2.6.x in modo più o meno indolore. Si suppone quindi che il lettore abbia una conoscenza minima del sistema operativo GNU/Linux e degli strumenti messi a disposizione da esso. Alla fine del testo linkerò alcuni testi interessanti riguardanti installazione e/o configurazione del kernel, molti dei quali hanno ispirato questo piccolo HOWTO. Have a nice day.

  • Requisiti di sistema.

    Parto subito con un consiglio personale, prendete un blocco note (non notepad di windows mi raccomando  e fate una breve "lista della spesa" della vostra configurazione hw, questo schemino vi semplificherà il compito:

    Processore: AMD Athlon XP
    Chipset Scheda Madre: nFORCE 2 Ultra DDR 400
    Hard disk: Seagate Barracuda 120GB SATA
    Scheda video: nVIDIA GeForce4MX 440 Agp 4x TvOUT
    Scheda audio:nVIDIA SoundStorm (onboard)
    Scheda di rete:nVIDIA MCP nFORCE2 Ethernet Controller (onboard) + SiS 900 Fast Ethernet su slot PCI
    Controller:2x USB 1.0 OHCI Controller, 1x USB 2.0 EHCI Controller, 1x IEEE1394(Firewire) Controller, Silicon Image Sil3112a Serial ATARaid controller
    Altre periferiche interne: Controller TV Philips SAA7134 (Terratec Cinergy 400)
    Periferiche di input: Mouse e tastiera standard ps/2
    Periferiche esterne: Stampante HP Deskjet 3320 USB, Scanner Boeder Sm@rtScan Slim Edition

    Naturalmente questa è la lista del mio pc, voi cercate di non dimenticarvi eventuali T.A. ISDN, modem interni/esterni ecc...

    Per rilevare tutti i componenti usate software come Everest Home Edition per Windows o gli strumenti messi a disposizione dal sistema (per esempio con Linux: lspci, lsusb, lsmod sono ottimi strumenti), nel caso di o.s. Open Source.

    Terminata questa fase, passiamo alla prossima

  • Scaricamento dei sorgenti e requisiti software

    Ci sono due strade per reperire i sorgenti del kernel Linux,la prima è reperire i pacchetti per la propria distribuzione, molte distribuzioni infatti ne forniscono una loro versione pacchettizata, in genere patchata a dovere per supportare più hw o per aumentarne la velocità/stabilità; la seconda è quella di scaricare il kernel "vanilla" direttamente dalla sua fonte ufficiale, The Linux Kernel Archives.
    Andando sul sito c'è la possibilità che il newbie si perda, visto il numero elevato di sigle e numeri presenti (a tal proposito rimando all'ottima guida scritta da xlinux, sulla numerazione dei kernel Linux, potete leggerla qui). Vi basterà scaricare "The latest stable version of the Linux kernel is:...." dal link contrassegnato con F(Full sources) presente sulla stessa riga. Non potete sbagliarvi, il file è un archivio .tar.bz2 di una trentina di mega chiamato linux-2.6.x.tar.bz2. (Al momento in cui scrivo l'ultimo kernel stabile è la 2.6.6).
    Una volta scaricato il file, bisogna decomprimerlo nella cartella adatta, tale cartella è /usr/src
    Se non ci troviamo in console, apriamone una, rendiamoci root se necessario e operiamo come segue:

    $ whoami
    roberto
    $ su
    Password:
    # cd /usr/src/
    # tar jxvf /path/to/kernel/linux-2.6.6.tar.bz2

dove /path/to/kernel è la directory dove avete scaricato il file. Una volta decompresso il sorgente, vi troverete la directory linux-2.6.6, bisognerà creare un link simbolico che faccia puntare il contenuto della cartella a /usr/src/linux, ecco come:

# pwd
/usr/src
# ls
linux-2.6.6.tar.bz2 linux-2.6.6
# ln -sf linux-2.6.6 linux
# ls
linux-2.6.6.tar.bz2 linux linux-2.6.6

Il kernel Linux, come ogni software, ha bisogno di risolvere alcune dipendenze software, cioè, ha bisogno di determinati programmi per funzionare. Per ottenere la lista (e per sapere come controllare le versioni installate e/o scaricarne delle nuove) andare a leggere il file /usr/src/linux/Documentation/Changes

  • Configurazione del kernel

    Siamo arrivati alla fase più noiosa, la configurazione del kernel vera e propria. A partire dal kernel 2.6.0 abbiamo a disposizione 4 modalità per selezione delle opzioni disponibili:

    # make config //modalità di configurazione testuale, sconsigliata
    # make menuconfig //modalità di configurazione grafico-testuale (ncurses based) IMHO consigliata
    # make xconfig //modalità di configurazione grafica basata su QT (solo su X)
    # make gconfig //modalità di configurazione grafica basata su GTK+ (solo su X)

  • a voi la scelta, il mio parere l'ho espresso. 

    Le opzioni di configurazione, dovete sceglierle in base alla "lista della spesa" fatta sopra, ora però vi fornirò alcuni elementi indispensabili al corretto boot del kernel.

    /*Abilitiamo il supporto ai driver sperimentali*/
    Code maturity level options --->
     
    [*] Prompt for development and/or incomplete code/drivers

    /*Selezioniamo il tipo d'architettura e il processore*/
    Processor type and features --->
     Subarchitecture Type (PC Compatible) --->
     (Change according to your system)
     Processor family (Athlon/Duron/K7) --->

    /*Abilitiamo i file system "virtuali"*/
    File systems --->
     Pseudo File Systems --->
       
    [*] /proc file system support
       
    [*] /dev/pts file system for Unix98 PTYs
       
    [*] Virtual memory file systems (former shm fs)
       
    /*Abilitiamo il file system DevFS solo se la nostra distro ne fà utilizzo (vedi Gentoo)*/
     
    [*] /dev file system support (EXPERIMENTAL)
     
    [*]   Automatically mount at boot

    /*Abilitiamo il supporto ai file system utilizzati*/
    File systems --->
     <*> Reiserfs support
     <*> Ext3 journalling file system support
     <*> JFS filesystem support
     <*> Second extended fs support
     <*> XFS filesystem support

    /*Abilitiamo il supporto per la lettura dei cdrom e dei dvd*/
    File systems --->
      CD-ROM/DVD Filesystems --->
          <*> ISO 9660 CDROM file system support
         
    [*]   Microsoft Joliet CDROM extensions
         
    [*]   Transparent decompression extension
          <*> UDF file system support  

    /*Abilitiamo il supporto ai filesystem Microsoft (utile in configurazione dual boot)*/
    File systems --->
      DOS/FAT/NT Filesystems --->
      <*> DOS FAT fs support
      <*>   MSDOS fs support
      <*>   VFAT (Windows-95) fs support
      <*> NTFS file system support
      [ ]   NTFS debugging support
     
    [*]   NTFS write support

    A questo punto visitate tutte le sottosezioni (facendo particolare attenzione alla sezione Device Drivers) e selezionate tutto ciò che può essere utile alla vostra macchina, non dimenticate il controller EIDE (o almeno quello da cui il vostro HD fà il boot), il supporto al PPP, i drivers sonori, ecc...
    Una volta scelte tutte le opzioni da attivare, uscite dal menù di configurazione avendo cura di rispondere sì alla domanda "Volete salvare la nuova configurazione?".

    Piccola nota riguardo la configurazione del kernel
    I simboli che avete visto in questa parte di guida, e che vedrete durante la configurazione sono i seguenti:
    [] <- Disattivato
    [*] <- Attivato
    < > <- Disattivato, ma attivabile come modulo
    <- Attivato come modulo
    <*> <- Attivato

    Personalmente, almeno finchè siete agli inizi, vi consiglio di compilare tutto staticamente, anche nel caso in cui è possibile compilare come modulo, vi risparmierà parecchi grattacapi. Soprattutto compilate staticamente il supporto al vostro controller di boot (EIDE,SCSI,ATARAID,SATA,ecc...) e al File System utilizzato su Linux (ext3 nel mio caso): in caso contrario il sistema non farà il boot, andando in kernel panic.

  • Compilazione
    A differenza dei precedenti major release, la compilazione del 2.6.x è molto semplice, basta dare in console il comando:

    # make && make modules_install

  • per trovarsi il kernel ed i relativi moduli compilati correttamente.

  • Installazione del kernel

    Preoccupiamoci ora di installare i file relativi al kernel nella directory /boot

    N.B. x = numero di versione scaricata.

    # cp System.map /boot/System.map-2.6.x
    # ln -sf /boot/System.map-2.6.x /boot/System.map
    # cp .config /boot/config-2.6.x
    # ln -sf /boot/config-2.6.x /boot/config
    # cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.x // leggi nota in blu sotto
    # ln -sf /boot/vmlinuz-2.6.x /boot/vmlinuz

  • I possessori di mac devono indicare ppc al posto di i386

    Ora non resta che editare il file relativo al nostro bootloader (/etc/lilo.conf per gli utilizzatori di LiLo,/boot/grub/menu.lst per quelli di grub), avendo cura di non eliminare il riferimento al kernel che state attualmente utilizzando, potrebbe sempre tornarvi utile nel caso il nuovo kernel non funzionasse.

    N.B. Non spiegherò qui come modificare i file relativi ad i bootloader in quanto sono in preparazione due guide, una su LiLo ed una su Grub. Aspettate di leggerli per avere il quadro completo della situazione.

  • Ritocchi finali

    Generazione del file modprobe.conf

    IL file /etc/modprobe.conf prende il posto dell'ormai "deprecato" file /etc/modules.conf, ovvero il file che fin'ora si è occupato di caricare al boot i moduli relativi alle periferiche. Per generare il file:

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

  • Creazione della directory per il SysFS
    A partire dal kernel 2.6.0, l'utente potrà accedere alle informazioni sulle periferiche attraverso il FileSystem virtuale SysFS, lasciando al deprecato File System ProcFS il compito di fornire le informazioni soltanto sui processi. Creiamo così la cartella necessaria al corretto funzionamento del filesystem

    # mkdir /sys

    ed aggiungiamo la seguente linea al file [i]/etc/fstab[i]:

    sys /sys sysfs defaults 0 0

    Salviamo il file, usciamo e rebootiamo il sistema. Incrociate le dita. 

  • Note

    Il seguente documento è stato scritto da V.Roberto Alfieri a.k.a. phoenix per il TaLUG!

    Fonti d'ispirazione per questo documento sono state:

    Kernel-Build-HOWTO

    The Gentoo HANDBOOK

    Usare il nuovo kernel 2.6 di Linux in poche mosse by parsEc per Software Zone


  • FLOSSnet

    Linux@Taranto FLOSSdev TaLUG! - Taranto GNU/Linux Users Group