Site Navigation:
 
 

8. Kernel Linux

Questa sezione concerne cambiamenti ed importanti informazioni riguardanti il kernel basato sulla versione 2.6.18 in Fedora Core 6. Il kernel 2.6.18 include:

8.1. Versione

Fedora Core può includere patches aggiuntive al kernel per miglioramenti, correzione di errori, o caratteristiche aggiuntive. Per questa ragione, il kernel potrebbe non essere linea-per-linea equivalente al cosidetto vanilla kernel proveniente dal sito web di kernel.org:

http://www.kernel.org/

Per ottenere una lista di queste patches, scaricare il pacchetto RPM sorgente ed eseguire il seguente comando su di esso:

rpm -qpl kernel-<version>.src.rpm

8.2. Changelog

Per ottenere una lista dei cambiamenti del pacchetto, eseguire il seguente comando:

rpm -q --changelog kernel-<version>

Se si ha bisogno di una versione più amichevole di changelog fare rifermento a http://wiki.kernelnewbies.org/LinuxChanges. Un breve e completo diff del kernel è disponibile su http://kernel.org/git. La versione Fedora è basata sull'albero di Linus.

Le personalizzazioni fatte per la versione Fedora sono disponibili su http://cvs.fedora.redhat.com .

8.3. Tipi di Kernel

Fedora Core 6 include i seguenti kernel compilati:

  • Kernel nativo, per l'uso in molti sistemi. I sorgenti configurati sono disponibili nel pacchetto kernel-devel-<version>.<arch>.rpm.

  • kernel-PAE, per l'uso sui sistemi a 32-bit x86 con > 4GB di RAM, o con CPUs che hanno una caratteristica 'NX (No eXecute)'. Questo kernel supporta sia sistemi uniprocessore che multi-processore.

  • Kernel virtuale guest per l'uso con il pacchetto emulatore Xen. I sorgenti configurati sono disponibili nel pacchetto kernel-xen-devel-<version>.<arch>.rpm

  • Kernel kdump per l'uso delle caratteristiche kexec/kdump. I sorgenti configurati sono disponibili nel pacchetto kernel-kdump-devel-<version>.<arch>.rpm.

E' possibile installare i kernel headers per tutti i tipi di kernel allo stesso momento. I files saranno installati nell'albero /usr/src/kernels/<version>-[xen|kdump]-<arch>/. Usare il seguente comando:

su -c 'yum install kernel-{PAE,xen,kdump}-devel'

Selezionare uno o più di questi tipi, separati da virgola e senza spazi, appropriatamente. Immettere la password di root quando richiesta.

[Nota]Il kernel predefinito fornisce SMP

Non è disponibile un kernel SMP separato per Fedora Core 6 su i386, x86_64 and ppc64. Il supporto multiprocessore è fornito dal kernel nativo.

[Nota]Supporto kernel PowerPC

Non c'è supporto per Xen o kdump per l'architettura PowerPC in Fedora Core 6. I PowerPC a 32-bit hanno ancora un kernel SMP separato.

8.4. Segnalare gli errori

Fare riferimento a http://kernel.org/pub/linux/docs/lkml/reporting-bugs.html per informazioni sulla segnalazione di errori nel kernel di Linux. E' possibile inoltre utilizzare http://bugzilla.redhat.com per inviare quelle segnalazioni d'errore che sono specifiche per Fedora.

8.5. Seguire libri di testo generici

Molti dei tutorial, esempi, e libri di testo sullo sviluppo del kernel Linux assumono che i sorgenti del kernel siano installati sotto la directory /usr/src/linux/. Se si fa un link simbolico, come mostrato sotto, si sarà in grado si usare quel materiale d'apprendimento con i pacchetti di Fedora Core. Installare gli appropriati sorgenti del kernel, come mostrato prima, quindi eseguire il seguente comando:

su -c 'ln -s /usr/src/kernels/<version>.<release>-<arch> /usr/src/linux'

Immettere la password di root quando richiesta.

8.6. Preparazione allo sviluppo del Kernel

Fedora Core 6 non include il pacchetto kernel-source fornito nelle vecchie versioni poiché è necessario il solo pacchetto kernel-devel per compilare moduli esterni. Sono disponibili sorgenti configurati come descritto nella sezione Tipi di kernel.

[Nota]Queste istruzioni fanno riferimento al Kernel corrente

Per semplificare le seguenti direttive, assumiamo che si voglia configurare i sorgenti del kernel che combaciano con la versione del kernel in esecuzione. Nei prossimi passi, la parola <version> si riferisce alla versione del kernel mostrata dal comando: uname -r.

Gli utenti che necessiteranno dell'accesso ai sorgenti originali del kernel di Fedora Core possono trovarli nel pacchetto kernel .src.rpm. Per creare un albero di sorgenti esploso da questo file, si seguano i seguenti passi:

[Nota]Non compilate i pacchetti come Super-user (root)

La compilazione dei pacchetti come superuser è pericolosa e non è necessaria, anche per il kernel. Queste istruzioni permettono di installare i sorgenti del kernel come utente normale. Molti siti di informazione generale fanno riferimento a /usr/src/linux nelle loro istruzioni sul kernel, si sostituisca semplicemente ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>.

  1. Si prepari un ambiente di compilazione di pacchetti RPM nella home directory utente. Eseguire i seguenti comandi:

    su -c 'yum install rpmdevtools yum-utils' 
    rpmdev-setuptree
  2. Immettere la password di root quando richiesta.

  3. Scaricare il file kernel-<version>.src.rpm. Abilitare qualsiasi repositorio di sorgenti appropriato, come Core, Updates, o Testing, con lo switch -e:

    yumdownloader -e core-source -e updates-source --source kernel
  4. Immettere la password di root quando richiesta.

  5. Installare kernel-<version>.src.rpm usando il comando:

    rpm -Uvh kernel-<version>.src.rpm
  6. Questo comando scrive i contenuti dell'RPM in ${HOME}/rpmbuild/SOURCES e ${HOME}/rpmbuild/SPECS, dove ${HOME} è la home directory.

    [Nota]Spazio richiesto

    Il completo processo di compilazione del kernel può richiedere diversi gigabytes di spazio extra sul file system contenente la home directory.

  7. Preparare i sorgenti del kernel usando i comandi:

    cd ~/rpmbuild/SPECS 
    rpmbuild -bp --target $(uname -m) kernel-2.6.spec
  8. L'albero dei sorgenti del kernel è locato nella directory ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>.

    Le configurazioni per i kernel specifici distribuiti in Fedora Core 6 sono nella directory ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/configs. Per esempio, il file di configurazione i686 SMP è denominato ~/rpmbuild/BUILD/kernel-<version>/linux-<version>.<arch>/configs/kernel-<version>-i686.config. Lanciare il seguente comando per porre il file di configurazione desiderato nel posto giusto per la compilazione:

    cp configs/<desired-config-file> .config
  9. Ogni kernel prende un nome basandosi sul numero della sua versione. Questo è il valore mostrato dal comando uname -r. Il nome del kernel è definito dalle prime quattro linee del kernel Makefile. Il Makefile è stato cambiato per generare un kernel con un nome differente da quello in esecuzione. Per essere accettato dal kernel in esecuzione, un modulo deve essere compilato per il kernel con il nome corretto. Per fare questo, si deve editare il kernel Makefile.

    Per esempio, se uname -r restituisce la stringa 2.6.17-1.2345_FC6, si cambi la definizione EXTRAVERSION da questo:

    EXTRAVERSION = -prep 

    a questo:

    EXTRAVERSION = -1.2345_FC6

    Che sarà, sostituito in ogni parte d'ora in poi.

  10. Impartire il seguente comando:

    make oldconfig

    Quindi si potrà procedere come al solito.

[Nota]Compilare gli RPM binari del kernel

Normalmente, i kernels per Fedora sono compilati usando l'utilità rpmbuild ed uno specfile. I risultati potranno variare se si è utilizzato il comando del kernel built-in make rpm destinazione.

8.7. Compilare solo i moduli del kernel

Non è necessario un albero dei sorgenti del esploso per compilare un modulo del kernel, come un driver di periferica, per il kernel in uso. Solo il pacchetto kernel-devel è necessario alla compilazione di moduli esterni. Se non lo si seleziona durante l'installazione, si usi Pirut per installarlo, andando su ApplicazioniAggiungi/Rimuovi software o usando yum per installarlo. Eseguire i seguenti comandi per installare il pacchetto kernel-devel usando yum.

su -c 'yum install kernel-devel' 

Per esempio, per compilare il modulo foo.ko, si crei il seguente Makefile nella directory contenente il file foo.c:

obj-m := foo.o 

KDIR  := /lib/modules/$(shell uname -r)/build
PWD   := $(shell pwd)

default:
    $(MAKE) -C $(KDIR) M=$(PWD) modules

Impartire il comando make per compilare il modulo foo.ko.