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:
Supporto leggero per l'ereditarietà della priorità in user space (http://lwn.net/Articles/178253/)
Uno strumento di debugging per il "lock validator" (http://lwn.net/Articles/185666/)
Una nuova policy di risparmio della potenza per i sistemi multicore, SMPnice (http://lwn.net/Articles/186438/)
Un layer SATA molto migliorato (http://lwn.net/Articles/183734/)
Migrazione paginazione swapless (http://lwn.net/Articles/160201/)
Contatori VM per-zona
Ritardo accounting per-task
Un nuovo controllo di accesso per-pacchetto per SELinux chiamato secmark (http://james-morris.livejournal.com/11010.html)
i386 vDSO randomizzato
Nuovi drivers e supporto aggiuntivo dei dispositivi per molti drivers esistenti
Molti bug fixes ed altri piccoli miglioramenti
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:
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.rpmPer 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 .
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/. Usare il seguente comando:<version>-[xen|kdump]-<arch>/
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.
![]() | 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. |
![]() | 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. |
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.
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.
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.
![]() | 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 |
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:
![]() | 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 |
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
Immettere la password di root quando richiesta.
Scaricare il file kernel-. Abilitare qualsiasi repositorio di sorgenti appropriato, come Core, Updates, o Testing, con lo switch <version>.src.rpm-e:
yumdownloader -e core-source -e updates-source --source kernel
Immettere la password di root quando richiesta.
Installare kernel- usando il comando:<version>.src.rpm
rpm -Uvh kernel-<version>.src.rpmQuesto comando scrive i contenuti dell'RPM in ${HOME}/rpmbuild/SOURCES e ${HOME}/rpmbuild/SPECS, dove ${HOME} è la home directory.
![]() | Spazio richiesto |
|---|---|
Il completo processo di compilazione del kernel può richiedere diversi gigabytes di spazio extra sul file system contenente la home directory. |
Preparare i sorgenti del kernel usando i comandi:
cd ~/rpmbuild/SPECS rpmbuild -bp --target $(uname -m) kernel-2.6.spec
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-. Per esempio, il file di configurazione i686 SMP è denominato <version>/linux-<version>.<arch>/configs~/rpmbuild/BUILD/kernel-. Lanciare il seguente comando per porre il file di configurazione desiderato nel posto giusto per la compilazione:<version>/linux-<version>.<arch>/configs/kernel-<version>-i686.config
cp configs/<desired-config-file> .configOgni 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.
Impartire il seguente comando:
make oldconfig
Quindi si potrà procedere come al solito.
![]() | Compilare gli RPM binari del kernel |
|---|---|
Normalmente, i kernels per Fedora sono compilati usando l'utilità |
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 Applicazioni → Aggiungi/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.