Dimensione: 249
Commento:
|
Dimensione: 12768
Commento: modificato il comando per compilare, spero dia meno grattacapi alla gente...
|
Le cancellazioni sono segnalate in questo modo. | Le aggiunte sono segnalate in questo modo. |
Linea 1: | Linea 1: |
## page was renamed from CompilazioneKernel ## ecco il thread sul forum http://forum.ubuntu-it.org/index.php/topic,51517.0.html #format wiki #LANGUAGE it [[BR]] ||<tablestyle="float:right; font-size: 0.9em; width:35%; background:#F1F1ED; margin: 0 0 1em 1em;" style="padding:0.5em;">'''Indice'''[[BR]] [[TableOfContents(2)]]|| |
|
Linea 2: | Linea 8: |
Prima di tutto, scarica il pacchetto del kernel di cui hai bisogno da [http://www.kernel.org kernel.org] o dai repositories di Ubuntu. Se vuoi il kernel ufficiale del Team Ubuntu, ti basterà eseguire: {{{ sudo apt-get install linux-tree |
= Introduzione = In informatica, il '''kernel''' costituisce il nucleo di un sistema operativo. Si tratta di un software con il compito di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato all'hardware e una porzione di tempo-macchina ([http://it.wikipedia.org/wiki/Multitasking multitasking]). Compilare il codice sorgente del kernel, anziché installare uno dei pacchetti precompilati, assicura alcuni vantaggi, tra cui: ##In realtà i moduli sono comunque caricabili dinamicamente, quindi non è vero che il kernel precompilato carica moduli inutili, come sembra dire la frase qui sotto.Forse è l'assenza dell'initrd che fa avviare il pc più velocemente(non ne sono sicuro). * un avvio più veloce, dato che i moduli da caricare sono solo quelli propri del computer in uso e non ve ne sono di inutili. * un sistema operativo più veloce perché potete ottimizzare il codice sul vostro processore. * la possibilità di attivare opzioni che non sono presenti nei kernel precompilati. ||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5%>[[Immagine(Icone/Grandi/info.png,,center)]] ||<style="padding:0.5em; border:none;">Non è necessario compilare un kernel nei casi in cui l'hardware non funzioni alla perfezione o le periferiche non vengano completamente riconosciute. A volte per far riconoscere correttamente al sistema una data periferica basta caricare i moduli necessari con le dovute opzioni. È utile ricompilare il kernel solo se tali moduli non sono presenti o se si è certi che i driver della periferica sono presenti solo in una nuova versione successiva a quella attualmente in uso. Inoltre, l'aumento di prestazioni avviene in gran parte solo nella fase di avvio. || È bene tener presente che compilare un nuovo kernel significa, nella sostanza, cambiare sistema operativo, in quanto esso ne costituisce il ''motore''; inoltre è richiesta un buona conoscenza del proprio hardware. = Preparativi = == Installare le dipendenze == Il processo di compilazione richiede l'[:AmministrazioneSistema/InstallareProgrammi:installazione] dei seguenti pacchetti: * ''build-essential'' * ''bin86'' * ''fakeroot'' * ''kernel-package'' Inoltre, se si desidera usare un'interfaccia grafica per configurare il kernel, è necessario installare uno dei seguenti pacchetti: * ''libglade2-dev'', se si usa Ubuntu. * ''libqt3-mt-dev'', se si usa Kubuntu. * ''libncurses5-dev'', per avere una interfaccia grafica direttamente dentro il terminale e spostarsi tra i menu usando la sola tastiera (utile per computer poco potenti o senza server grafico). == Scaricare l'archivio dei sorgenti del kernel == * Se si desidera usare l'ultima versione stabile del kernel Linux ufficiale (la cosiddetta versione ''vanilla''), scaricare il pacchetto da [http://www.kernel.org questo] indirizzo. * Se si desidera usare la versione del kernel Linux modificata dagli sviluppatori di Ubuntu, è possibile prelevarla dai [:Repository:repository], installando il pacchetto ''linux-source''. Questa versione ha il vantaggio di contenere driver e componenti aggiuntivi che gli sviluppatori di Ubuntu hanno ritenuto di integrare nel kernel, ma per contro potrebbe non essere sempre aggiornata rispetto all'ultima versione del kernel Linux ufficiale. [[Anchor(estrarre)]] == Estrarre i sorgenti == Sebbene non sia strettamente necessario, la policy Debian consiglia di usare la directory `/usr/src` per compilare il kernel. Il gruppo proprietario della cartella `/usr/src` è il gruppo '''src'''. Per inserire il proprio utente nel gruppo '''src''' è sufficiente digitare il seguente comando in una finestra di terminale, sostituendo alla dicitura «nomeutente» il proprio nome utente: {{{ sudo adduser nomeutente src |
Linea 6: | Linea 54: |
La modifica verrà applicata all'accesso successivo. Qualora il gruppo '''src''' non avesse più i diritti di scrittura sulla cartella `/usr/src`, questi dovranno essere ripristinati con il seguente comando: {{{ sudo chmod -R g+wr /usr/src }}} Scompattare e spostare i sorgenti nella cartella di destinazione: {{{ tar -xjf linux-[VERSIONE_SCARICATA].tar.bz2 mv linux-[VERSIONE_SCARICATA] /usr/src/ }}} = Compilazione e installazione = Entrare nella directory dei sorgenti del kernel appena scaricati: {{{ cd /usr/src/linux-[VERSIONE_SCARICATA] }}} == Applicare le patch == A questo punto, se necessario, sarà possibile applicare una o più ''patch'' al kernel. Tra le più diffuse si possono trovare quelle di: * [http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/ Con Kolivas] * [ftp://ftp.kernel.org/pub/linux/kernel/people/alan/ Alan Cox] * [ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/ Andrew Morton] Di solito le ''patch'' vengono applicate utilizzando l'insieme di due comandi: '''patch''' e '''cat''' (o anche '''bzcat''' se il file ha estensione {{{.bz2}}}). Copiare la ''patch'' nella directory dei sorgenti del kernel e digitare il seguente comando: {{{ bzcat [NOME_DELLA_PATCH].bz2 | patch -p1 --dry-run }}} L'opzione '''--dry-run''' permette di simulare l'applicazione della ''patch'' senza modificare realmente i file. Se non vengono visualizzati errori, si può procedere con l'applicazione della stessa rieseguendo il comando precedente senza l'opzione '''--dry-run'''. Se il procedimento non dovesse andare a buon fine, sarà necessario verificare di aver scaricato la versione corretta della ''patch'' e ripetere il procedimento. == Configurazione == Per personalizzare la configurazione, ci sono diverse modalità: * grafica su Ubuntu (usando le librerie gtk) {{{ make gconfig }}} * grafica su Kubuntu (usando le librerie qt){{{ make xconfig }}} * pseudo-grafica nel terminale (usando le librerie ncurses): {{{ make menuconfig }}} * a linea di comando: {{{ make config }}} Potrete cercare le varie opzioni di configurazione di ogni versione del kernel in questo utilissimo sito: [http://kernel.xc.net/ Linux Kernel Configuration Archive] ||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5%>[[Immagine(Icone/Piccole/warning.png,,center)]] ||<style="padding:0.5em; border:none;">'''L'errata configurazione di un semplice modulo può compromettere l'intero sistema. Per cercare di ridurre al minimo gli errori, usare il comando «lshw» per visualizzare il proprio hardware.''' || È possibile importare la configurazione di un altro kernel e partire da questa per effettuare ulteriori personalizzazioni. I file di configurazione per i kernel attualmente installati nel sistema si trovano nella directory `/boot` e sono chiamati `config-2.6*`, ma è possibile importare un qualunque file di configurazione valido. ||<tablestyle="text-align: justify; width:100%; " style="border:none;" 5%>[[Immagine(Icone/Grandi/info.png,,center)]] ||<style="padding:0.5em; border:none;">Lo stesso risultato è possibile raggiungerlo copiando a mano un file di configurazione per il kernel all'interno della directory con i sorgenti e rinominando il file in `.config`, dopodichè si avvia il programma di configurazione; oppure se non si vuole usare l'interfaccia grafica, `make oldconfig` importa direttamente la configurazione del kernel attualmente in esecuzione sul computer, e con un'interfaccia a linea di comando propone una ad una tutte le opzioni presenti nel nuovo sorgente. || Alla fine la configurazione viene salvata all'interno del file `.config` presente nella cartella del kernel. È consigliato farne una copia, se si è soddisfatti del lavoro svolto. === Impostazioni consigliate === Seguire quanto descritto per evitare spiacevoli inconvenienti: 1. In «'''General Setup'''» attivare: * -Support for paging of anonymous memory (swap) * --Support for prefetching swapped memory 1. In «'''Processor type and features'''»: * In «'''Processor family'''» scegliere il modello del processore. * Attivare '''Preemption Model-> Voluntary Kernel Preemption''' (Desktop) * In «'''High Memory Support'''» scegliere: * '''off''' se si possiede meno di 1 GB di RAM * '''1GB Low Memory Support''' se si possiede 1GB di RAM * '''4GB''' se si possiede più di 1GB di RAM * In «'''Timer frequency'''» abilitare: '''1000 Hz''' 1. In «'''Block layer -> IO Schedulers'''» lasciare solo «'''CFQ I/O scheduler'''», otterrete una migliore performance. 1. In «'''Kernel hacking'''» deselezionare «'''Kernel debugging'''». 1. In «'''Device Drivers -> Character devices'''» selezionare «'''Virtual terminal'''». == Compilare == Finita la fase di personalizzazione, si passa alla compilazione. Nel caso in cui si possiede un sistema multiprocessore è possibile impostare la variabile ''CONCURRENCY_LEVEL'' affinché vengano eseguite più compilazioni in parallelo. Ad esempio per un processore con 2 core è possibile impostare tale valore a 2: {{{ export CONCURRENCY_LEVEL=2 }}} Se i sorgenti sono già stati compilati in passato, bisogna prima ripulirli: {{{ make-kpkg --rootcmd fakeroot clean }}} Il comando consigliato per compilare il kernel è: {{{ make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers modules_image }}} L'opzione «'''--rootcmd'''» è necessaria perchè alcuni passaggi nella creazione del pacchetto richiedono un ambiente di root, che fakeroot simula. L'opzione «'''--initrd'''» serve a creare un file immagine di una partizione speciale (initial ram disk), che all'avvio del sistema verrà caricata completamente nella ram, montata temporaneamente come directory root e usata per caricare i moduli necessari al sistema, prima di venire sostituita dalla reale partizione contenente il sistema. Per poter fare a meno di questa opzione è necessario compilare nel kernel sia il modulo relativo al chipset della propria scheda madre, sia il modulo relativo al filesystem usato nella partizione di root (in questo modo l'avvio risulterà anche un po' più veloce). L'immagine initrd è usata soprattutto nei kernel ufficiali, che devono supportare un gran numero di chipset, file system, dischi fissi ecc... e perciò caricano tutti questi moduli nell'initrd. Serve anche nel caso si desideri avere un bootsplash. Perché l'initrd funzioni, è necessario che l' opzione 'RAM disk support' nella sezione 'Block Device' della configurazione del kernel sia abilitata. L'opzione «'''--append-to-version'''», facoltativa, serve a definire un suffisso personalizzato per il proprio kernel, visualizzabile attraverso il comando: {{{ uname -r }}} Si può scrivere ciò che si vuole, basta che sia scritto in minuscolo, senza punti e senza caratteri extra. I target specificano quali pacchetti '''deb''' verranno creati: * Il target '''kernel_image''' compila il kernel e tutti i moduli scelti nella configurazione, e ne crea un pacchetto `.deb`. * Il target '''kernel_headers''' crea un pacchetto `.deb` con una serie di file e script che consentono di compilare moduli esterni in un secondo momento. Non è necessario, in quanto gli stessi sorgenti del kernel servono già allo scopo, ma se si desidera eliminare in seguito i sorgenti del kernel (magari per liberare spazio su disco) è bene specificare anche questo target. * Il target '''modules_image''' compila i sorgenti dei moduli esterni scaricati a parte e posizionati in `/usr/src/modules` (come i moduli per i driver video proprietari). Se non ce ne fossero, non serve aggiungere questo parametro. == Installare == Entrare nella cartella superiore: {{{ cd .. }}} E installare i pacchetti appena creati. Da terminale digitare: {{{ sudo dpkg -i kernel-image-[VERSIONE_DEL_KERNEL].deb sudo dpkg -i linux-headers-[VERSIONE_DEL_KERNEL].deb }}} Il boot loader [:AmministrazioneSistema/Grub:GRUB] verrà aggiornato automaticamente. Riavviare il computer e quindi scegliere il nuovo kernel installato. Se ci sono problemi, riavviare la macchina e utilizzare il vecchio kernel. = Ulteriori risorse = * [http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di Greg Kroah-Hartman, disponibile nei termini della licenza Creative Commons Attribution-Share Alike 2.5 * [http://massimo.solira.org/pcikl/index.html Progetto Configurazione italiana del Kernel Linux] ---- CategoryDaRevisionare CategoryAmministrazione CategoryProgrammazione |
IndiceBR TableOfContents(2) |
Introduzione
In informatica, il kernel costituisce il nucleo di un sistema operativo. Si tratta di un software con il compito di fornire ai processi in esecuzione sull'elaboratore un accesso sicuro e controllato all'hardware e una porzione di tempo-macchina ([http://it.wikipedia.org/wiki/Multitasking multitasking]).
Compilare il codice sorgente del kernel, anziché installare uno dei pacchetti precompilati, assicura alcuni vantaggi, tra cui:
- un avvio più veloce, dato che i moduli da caricare sono solo quelli propri del computer in uso e non ve ne sono di inutili.
- un sistema operativo più veloce perché potete ottimizzare il codice sul vostro processore.
- la possibilità di attivare opzioni che non sono presenti nei kernel precompilati.
Non è necessario compilare un kernel nei casi in cui l'hardware non funzioni alla perfezione o le periferiche non vengano completamente riconosciute. A volte per far riconoscere correttamente al sistema una data periferica basta caricare i moduli necessari con le dovute opzioni. È utile ricompilare il kernel solo se tali moduli non sono presenti o se si è certi che i driver della periferica sono presenti solo in una nuova versione successiva a quella attualmente in uso. Inoltre, l'aumento di prestazioni avviene in gran parte solo nella fase di avvio. |
È bene tener presente che compilare un nuovo kernel significa, nella sostanza, cambiare sistema operativo, in quanto esso ne costituisce il motore; inoltre è richiesta un buona conoscenza del proprio hardware.
Preparativi
Installare le dipendenze
Il processo di compilazione richiede l'[:AmministrazioneSistema/InstallareProgrammi:installazione] dei seguenti pacchetti:
build-essential
bin86
fakeroot
kernel-package
Inoltre, se si desidera usare un'interfaccia grafica per configurare il kernel, è necessario installare uno dei seguenti pacchetti:
libglade2-dev, se si usa Ubuntu.
libqt3-mt-dev, se si usa Kubuntu.
libncurses5-dev, per avere una interfaccia grafica direttamente dentro il terminale e spostarsi tra i menu usando la sola tastiera (utile per computer poco potenti o senza server grafico).
Scaricare l'archivio dei sorgenti del kernel
Se si desidera usare l'ultima versione stabile del kernel Linux ufficiale (la cosiddetta versione vanilla), scaricare il pacchetto da [http://www.kernel.org questo] indirizzo.
Se si desidera usare la versione del kernel Linux modificata dagli sviluppatori di Ubuntu, è possibile prelevarla dai [:Repository:repository], installando il pacchetto linux-source. Questa versione ha il vantaggio di contenere driver e componenti aggiuntivi che gli sviluppatori di Ubuntu hanno ritenuto di integrare nel kernel, ma per contro potrebbe non essere sempre aggiornata rispetto all'ultima versione del kernel Linux ufficiale.
Estrarre i sorgenti
Sebbene non sia strettamente necessario, la policy Debian consiglia di usare la directory /usr/src per compilare il kernel.
Il gruppo proprietario della cartella /usr/src è il gruppo src. Per inserire il proprio utente nel gruppo src è sufficiente digitare il seguente comando in una finestra di terminale, sostituendo alla dicitura «nomeutente» il proprio nome utente:
sudo adduser nomeutente src
La modifica verrà applicata all'accesso successivo.
Qualora il gruppo src non avesse più i diritti di scrittura sulla cartella /usr/src, questi dovranno essere ripristinati con il seguente comando:
sudo chmod -R g+wr /usr/src
Scompattare e spostare i sorgenti nella cartella di destinazione:
tar -xjf linux-[VERSIONE_SCARICATA].tar.bz2 mv linux-[VERSIONE_SCARICATA] /usr/src/
Compilazione e installazione
Entrare nella directory dei sorgenti del kernel appena scaricati:
cd /usr/src/linux-[VERSIONE_SCARICATA]
Applicare le patch
A questo punto, se necessario, sarà possibile applicare una o più patch al kernel.
Tra le più diffuse si possono trovare quelle di:
[http://www.kernel.org/pub/linux/kernel/people/ck/patches/2.6/ Con Kolivas]
[ftp://ftp.kernel.org/pub/linux/kernel/people/alan/ Alan Cox]
[ftp://ftp.kernel.org/pub/linux/kernel/people/akpm/ Andrew Morton]
Di solito le patch vengono applicate utilizzando l'insieme di due comandi: patch e cat (o anche bzcat se il file ha estensione .bz2).
Copiare la patch nella directory dei sorgenti del kernel e digitare il seguente comando:
bzcat [NOME_DELLA_PATCH].bz2 | patch -p1 --dry-run
L'opzione --dry-run permette di simulare l'applicazione della patch senza modificare realmente i file. Se non vengono visualizzati errori, si può procedere con l'applicazione della stessa rieseguendo il comando precedente senza l'opzione --dry-run.
Se il procedimento non dovesse andare a buon fine, sarà necessario verificare di aver scaricato la versione corretta della patch e ripetere il procedimento.
Configurazione
Per personalizzare la configurazione, ci sono diverse modalità:
grafica su Ubuntu (usando le librerie gtk)
make gconfig
grafica su Kubuntu (usando le librerie qt)
make xconfig
pseudo-grafica nel terminale (usando le librerie ncurses):
make menuconfig
a linea di comando:
make config
Potrete cercare le varie opzioni di configurazione di ogni versione del kernel in questo utilissimo sito: [http://kernel.xc.net/ Linux Kernel Configuration Archive]
L'errata configurazione di un semplice modulo può compromettere l'intero sistema. Per cercare di ridurre al minimo gli errori, usare il comando «lshw» per visualizzare il proprio hardware. |
È possibile importare la configurazione di un altro kernel e partire da questa per effettuare ulteriori personalizzazioni. I file di configurazione per i kernel attualmente installati nel sistema si trovano nella directory /boot e sono chiamati config-2.6*, ma è possibile importare un qualunque file di configurazione valido.
Lo stesso risultato è possibile raggiungerlo copiando a mano un file di configurazione per il kernel all'interno della directory con i sorgenti e rinominando il file in .config, dopodichè si avvia il programma di configurazione; oppure se non si vuole usare l'interfaccia grafica, make oldconfig importa direttamente la configurazione del kernel attualmente in esecuzione sul computer, e con un'interfaccia a linea di comando propone una ad una tutte le opzioni presenti nel nuovo sorgente. |
Alla fine la configurazione viene salvata all'interno del file .config presente nella cartella del kernel. È consigliato farne una copia, se si è soddisfatti del lavoro svolto.
Impostazioni consigliate
Seguire quanto descritto per evitare spiacevoli inconvenienti:
In «General Setup» attivare:
- -Support for paging of anonymous memory (swap)
- --Support for prefetching swapped memory
- -Support for paging of anonymous memory (swap)
In «Processor type and features»:
In «Processor family» scegliere il modello del processore.
Attivare Preemption Model-> Voluntary Kernel Preemption (Desktop)
In «High Memory Support» scegliere:
off se si possiede meno di 1 GB di RAM
1GB Low Memory Support se si possiede 1GB di RAM
4GB se si possiede più di 1GB di RAM
In «Timer frequency» abilitare: 1000 Hz
In «Block layer -> IO Schedulers» lasciare solo «CFQ I/O scheduler», otterrete una migliore performance.
In «Kernel hacking» deselezionare «Kernel debugging».
In «Device Drivers -> Character devices» selezionare «Virtual terminal».
Compilare
Finita la fase di personalizzazione, si passa alla compilazione.
Nel caso in cui si possiede un sistema multiprocessore è possibile impostare la variabile CONCURRENCY_LEVEL affinché vengano eseguite più compilazioni in parallelo. Ad esempio per un processore con 2 core è possibile impostare tale valore a 2:
export CONCURRENCY_LEVEL=2
Se i sorgenti sono già stati compilati in passato, bisogna prima ripulirli:
make-kpkg --rootcmd fakeroot clean
Il comando consigliato per compilare il kernel è:
make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers modules_image
L'opzione «--rootcmd» è necessaria perchè alcuni passaggi nella creazione del pacchetto richiedono un ambiente di root, che fakeroot simula.
L'opzione «--initrd» serve a creare un file immagine di una partizione speciale (initial ram disk), che all'avvio del sistema verrà caricata completamente nella ram, montata temporaneamente come directory root e usata per caricare i moduli necessari al sistema, prima di venire sostituita dalla reale partizione contenente il sistema. Per poter fare a meno di questa opzione è necessario compilare nel kernel sia il modulo relativo al chipset della propria scheda madre, sia il modulo relativo al filesystem usato nella partizione di root (in questo modo l'avvio risulterà anche un po' più veloce). L'immagine initrd è usata soprattutto nei kernel ufficiali, che devono supportare un gran numero di chipset, file system, dischi fissi ecc... e perciò caricano tutti questi moduli nell'initrd. Serve anche nel caso si desideri avere un bootsplash. Perché l'initrd funzioni, è necessario che l' opzione 'RAM disk support' nella sezione 'Block Device' della configurazione del kernel sia abilitata.
L'opzione «--append-to-version», facoltativa, serve a definire un suffisso personalizzato per il proprio kernel, visualizzabile attraverso il comando:
uname -r
Si può scrivere ciò che si vuole, basta che sia scritto in minuscolo, senza punti e senza caratteri extra.
I target specificano quali pacchetti deb verranno creati:
Il target kernel_image compila il kernel e tutti i moduli scelti nella configurazione, e ne crea un pacchetto .deb.
Il target kernel_headers crea un pacchetto .deb con una serie di file e script che consentono di compilare moduli esterni in un secondo momento. Non è necessario, in quanto gli stessi sorgenti del kernel servono già allo scopo, ma se si desidera eliminare in seguito i sorgenti del kernel (magari per liberare spazio su disco) è bene specificare anche questo target.
Il target modules_image compila i sorgenti dei moduli esterni scaricati a parte e posizionati in /usr/src/modules (come i moduli per i driver video proprietari). Se non ce ne fossero, non serve aggiungere questo parametro.
Installare
Entrare nella cartella superiore:
cd ..
E installare i pacchetti appena creati. Da terminale digitare:
sudo dpkg -i kernel-image-[VERSIONE_DEL_KERNEL].deb sudo dpkg -i linux-headers-[VERSIONE_DEL_KERNEL].deb
Il boot loader [:AmministrazioneSistema/Grub:GRUB] verrà aggiornato automaticamente.
Riavviare il computer e quindi scegliere il nuovo kernel installato.
Se ci sono problemi, riavviare la macchina e utilizzare il vecchio kernel.
Ulteriori risorse
[http://www.kroah.com/lkn/ Linux Kernel in a Nutshell] di Greg Kroah-Hartman, disponibile nei termini della licenza Creative Commons Attribution-Share Alike 2.5
[http://massimo.solira.org/pcikl/index.html Progetto Configurazione italiana del Kernel Linux]
CategoryDaRevisionare CategoryAmministrazione CategoryProgrammazione