LKN: Configurare e Compilare: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
m
categoria
(aggiunto immagini)
m (categoria)
Riga 1: Riga 1:
__TOC__
Questa � una traduzione italiana del [http://live.debian.net/wiki/ wiki ufficiale] del progetto [http://debian-live.alioth.debian.org/ Debian Live].


Ora che avete scaricato i sorgenti della versione del kernel che avete scelto e che li avete installati in una cartella locale, è giunto il momento di compilare il codice. Il primo passo è di configurare il kernel con le opzioni appropriate; in seguito il kernel potrà essere compilato. Entrambe le operazioni sono portate a termine attraverso lo strumento standard ''make''.
A causa della natura dinamica del wiki � sempre possibile che nella versione originale siano state inserite notizie aggiuntive che non sono ancora state tradotte. Per questo motivo, se qui non trovate risposta alle vostre domande, prima di chiedere aiuto, controllate che le informazioni che cercate non siano presenti in lingua inglese, e in caso affermativo vi prego di segnalare la cosa (nell'apposita pagina di discussione o nel forum), in modo che si possa provvedere prontamente. Grazie ;-).


== '''Creare una Configurazione''' ==


La configurazione del kernel risiede in un file chiamato ''.config'' nella cartella principale dell'albero dei sorgenti del kernel. Se avete appena estratto il codice sorgente del kernel, non vi sarà alcun file ''.config'', quindi dovrà essere creato. Il file può essere creato da zero, creato partendo dalla "configurazione predefinita", preso da una versione funzionante del kernel, o preso da quello rilasciato da una distribuzione. Copriremo i primi due metodi adesso, gli ultimi due metodi nel [[LKN:_Personalizzare_un_Kernel|Capitolo 7]].
{{ Warningbox | Per evitare di creare dei link a pagine gi� esistenti (se non � la cosa voluta), o di occupare il titolo di una futura voce di glossario, � necessario, quando si creano dei link a nuove pagine, specificare il nome della pagina a cui punta il link, sostituendo gli spazi con "_" (underscore), ed aggiungendo il prefisso "DLP:_", in questo modo: <nowiki>[[DLP:_Nuova_pagina|Nuova pagina]]</nowiki>. }}


==='''Configurare dall'inizio'''===
Il modo più spartano per configurare un kernel è usare il metodo ''make config'':
<pre>$ cd linux-2.6.17.10
  $ make config
make config
scripts/kconfig/conf arch/i386/Kconfig
*
* Linux Kernel Configuration
*
*
* Code maturity level option
*
Prompt for development and/or incomplete code/drivers (EXPERIMENTAL) [Y/n/?]
Y


*
==Introduzione==
* General setup
Questo � un wiki collaborativo pensato per raccogliere le informazioni e discutere le tecnologie rivolte a costruire una complessa struttura in grado di produrre i sistemi Debian Live ufficiali, usando, per quanto possibile, pacchetti ufficiali Debian, e, per l'installazione opzionale su hard disk, il Debian Installer.
*
Local version - append to kernel release (LOCALVERSION) []
Automatically append version information to the version string
(LOCALVERSION_AUTO) [Y/n/?] Y
...</pre>
Il programma di configurazione del kernel procederà attraverso ogni opzione di configurazione e chiederà se la si vuole abilitare o meno. Tipicamente, le possibilità per ogni opzione sono presentate nella forma <tt>[Y/m/n/?]</tt>. La lettera maiuscola è la scelta predefinita, e può essere selezionata semplicemente premendo il tasto Invio. Le quattro scelte sono:
* <tt>Y</tt>  Compilare direttamente nel kernel.
* <tt>n</tt>  Lasciare completamente al di fuori del kernel.
* <tt>m</tt>  Compilare come modulo, da caricare se necessario.
* <tt>?</tt>  Stampa un breve messaggio descrittivo e ripropone il quesito.
Il kernel contiene quasi duemila opzioni di configurazioni differenti, quindi rispondere ad una domanda su ognuna di esse richiede un notevole dispendio di tempo. Fortunatamente, vi è un modo più facile di configurare un kernel: basare la configurazione su di un'altra precostituita.


==='''Opzioni della Configurazione predefinita'''===
Un sistema Debian Live � un sistema operativo [http://www.debian.org Debian] in qualche modo preinstallato, che non necessita di un classico installatore per essere usato. Risiede su supporti come un cdrom o uno stick usb, oppure viene avviato via rete.
Ogni versione del kernel ha una configurazione "predefinita". Questa configurazione è in parte basata sulle scelte che il responsabile di quella architettura crede siano le opzioni migliori da essere usate. In alcuni casi, è la configurazione usata dal responsabile stesso sulle proprie macchine. Questo è vero per l'architettura i386, dove la configurazione predefinita corrisponde strettamente a quella che Linus Torvalds usa per la sua macchina di sviluppo principale.


Per creare questa configurazione predefinita, eseguite:
In azione, avr� bisogno di un processo di boot appositamente studiato e di un sistema di rilevamento hardware (esattamente come il Debian Installer), per poi avviarsi in un filesystem di root preinstallato.
<pre>$ cd linux-2.6.17.10
$ make defconfig</pre>
Un'enorme quantità di opzioni di configurazione scorrerà velocemente sullo schermo, e un file ''.config'' sarà creato e piazzato nella cartella del kernel. Il kernel è ora correttamente configurato, ma dovrebbe essere adattato alla vostra macchina per assicurarsi che funzioni correttamente.


==='''Modificare la configurazione'''===
Il processo di sviluppo richiede di definire le tecnologie chiave per implementare la generazione del kernel, del rootfs e dell'intera immagine ([http://live.debian.net/wiki/make-live#procedure procedura]).
Ora che abbiamo un file di configurazione di base, dovrebbe essere modificato per supportare l'hardware presente nel vostro sistema. Per ulteriori dettagli su come individuare quali opzioni siano necessarie per ottenere ciò, potete leggere il [[LKN:_Personalizzare_un_Kernel|Capitolo 7]]. Qui mostreremo come selezionare le opzioni che potreste voler cambiare.


Ci sono tre differenti strumenti interattivi per la configurazione del kernel: uno basato su terminale chiamato ''menuconfig'', uno grafico basato sulle GTK+ chiamato ''gconfig'', e un altro grafico basato sulle QT chiamato ''xconfig''.
Le tecnologie chiave discusse fin'ora forniscono un pacchetto [http://live.debian.net/wiki/casper casper] (di Ubuntu) modificato per implementare la generazione dell'initramfs e la configurazione durante il boot dei rootfs in sola lettura (ext2 per l'initramfs, squashfs per il rootfs), resi scrivibili tramite unione (con unionfs) con un ramdisk o un filesystem scrivibile personalizzato.


==='''Configurazione tramite Terminale'''===
Altre risorse del progetto sono disponibili su http://live.debian.net/, e per discutere c'� il wiki (naturalmente si intende l'originale in lingua inglese N.d.T.), il canale IRC #debian-live su oftc ( irc://irc.oftc.net/#debian-live/ ) e la [http://lists.alioth.debian.org/mailman/listinfo/debian-live-devel mailing list]
Il metodo chiamato '''menuconfig''' per configurare un kernel è un programma per terminale che dà modo di muoversi nella configurazione del kernel usando i tasti freccia della tastiera. Per avviare questa modailtà di configurazione, digitate:
<pre>$ make menuconfig</pre>
Vi apparirà una schermata molto simile a quella di figura 4-1.


[[Immagine:Menuconfig_1.png|frame|''Figura 4-1. Schermata iniziale di menuconfig'']]


== User ==


Le istruzioni per navigare attraverso il programma, e i significati dei diversi caratteri, sono mostrati in cima allo schermo. Il resto dello schermo contiene le diverse opzioni di configurazine.
*[[DLP:_Download|Download]]
*[[DLP:_FAQ|FAQ]]
*[[DLP:_ISO_Howto|ISO Howto]]
*[[DLP:_ISO_Howto_(multiarch)|ISO Howto (multiarch)]]
*[[DLP:_ISO_per_multimedia_Howto|ISO per Multimedia Howto]]
*[[DLP:_Tips|Tips]]
*[[DLP:_Installare_un_Mirror_Debian_(piccolo_howto)|Installare un Mirror Debian (piccolo howto)]]


La configurazione del kernel è divisa in sezioni. Ogni sezione contiene opzioni che corrispondo ad argomenti specifici. Al loro interno possono esserci sottosezioni per vari argomenti specifici. Per esempio tutti i driver per le periferiche possono essere trovati sotto l'opzione del menu principale <tt>Device Drivers ---></tt>. [[Immagine:Menuconfig_2.png|frame|''Figura 4-2. Selezione dell'opzione Device Drivers'']]
== Sviluppo ==
Per aprire questo menu, premete la freccia in basso nove volte, finché la linea <tt>Device Drivers ---></tt> non è sottolineata, come mostrato in figura 4-2.


Premete poi il tasto Invio. Vi porterà nel sotto-menu <tt>Device Drivers</tt> e lo mostrerà come mostrato nella figura 4-3.
*[[DLP:_Bootloader|Bootloader]]
*[[DLP:_Casper|Casper]]
*[[DLP:_live-package|live-package]]
*[[DLP:_Wishlist|Wishlist]]


[[Immagine:Menuconfig_3.png|frame|''Figura 4-3. Sottomenu Device Drivers'']]
== Progetto ==
*[[DLP:_Linee_guida|Linee guida]]
*[[DLP:_Il_Team|Il Team]]
*[[DLP:_Altre_risorse|Altre risorse]]
*[[DLP:_Perch�_Debian_Live|Perch� Debian Live]]


== Altro (non supportato) ==


Potete continuare a muovervi nella gerarchia dei menu allo stesso modo. Per visualizzare il sotto-menu <tt>Generic Driver Options</tt> premete Invio di nuovo, e vedrete se tre opzioni mostrate in figura 4-4.
*[[DLP:_Installer|Installer]]
Opzionalmente, installa Debian su hard disk o stick USB usando Debian Live
*[[DLP:_Fromhd|fromhd]] Fare il boot di un'immagine compressa su un hard disk


[[Immagine:Menuconfig_4.png|frame|''Figura 4-4. Sottomenu Generic Driver Options'']]
[[Categoria:Live]]
 
 
Le prime due opzioni hanno un simbolo <tt>[*]</tt> vicino a esse. Questo significa che quest'opzione è selezionata (perché il simbolo <tt>*</tt> sta al centro dei due caratteri <tt>[]</tt>), e che questa è un'opzione del tipo sì-o-no. La terza opzione ha un segno <tt>< ></tt>, che mostra che questa opzione può essere inserita nel kernel (<tt>Y</tt>), compilata come modulo (<tt>M</tt>), o esclusa del tutto (<tt>N</tt>).
 
Se l'opzione è selezionata con <tt>Y</tt>, le parentesi ad angolo conterranno un <tt>*</tt>. Se è selezionata come modulo con una <tt>M</tt>, conterranno una lettera <tt>M</tt>. Se è disabilitata con <tt>N</tt>, mostreranno solo uno spazio bianco.
 
Così, se desiderate cambiare queste tre opzioni per selezionare solo driver che non necessitano di firmware esterno in tempo di compilazione, disabilitate l'opzione per impedire che il firmware sia compilato, e compilate il caricatore del firmware in spazio utente come modulo, digitando <tt>Y</tt> per la prima opzione, <tt>N</tt> per la seconda e <tt>M</tt> per la terza, rendendo la schermata come quella in figura 4-5.
 
[[Immagine:Menuconfig_5.png|frame|''Figura 4-5. Sottomenu Generic Driver Options cambiato'']]
 
 
Quando avete completato le vostre modifiche in questa schermata, premete il tasto Esc o la freccia destra seguita dal tasto Invio per lasciare questo sottomenu. Tutte le opzioni del kernel possono essere esplorate in questa maniera.
 
Quando avete finito di fare tutte le modifiche che desideriate apportare alla configurazione del kernel, uscite dal programma premendo il tasto Esc quando siete nel menu principale.
[[Immagine:Menuconfig_6.png|frame|''Figura 4-6. Salvare le opzioni del kernel'']]
Vi sarà mostrata la schermata in figura 4-6, che vi chiede se desiderate salvare la vostra modificata configurazione.
 
Premete Invio per salvare la configurazione, o, se volete eliminare ogni modifica fatta, digitate la freccia destra per selezionare la voce <tt>< No ></tt> e premete Invio.
 
 
 
==='''Metodi grafici di configurazione'''===
I metodi di configurazione del kernel ''gconfig'' e ''xconfig'' usano un programma grafico per permettervi di modificare la configurazione. I due metodi sono pressoché identici, l'unica differenza risiedendo nei diversi strumenti grafici attraverso i quali sono scritti. ''gconfig'' è scritto usando il toolkit GTK+ e ha uno schermo diviso in due regioni, come mostrato in figura 4-7.
 
[[Immagine:Gconfig_1.png|740px|thumb|''Figura 4-7. Schermata di make gconfig'']]
 
 
Il metodo ''xconfig'' è scritto usando il toolkit QT e ha uno schermo diviso in tre regioni, come in figura 4-8.
 
[[Immagine:Xconfig_1.png|740px|thumb|''Figura 4-8. Schermata di make xconfig'']]
 
 
Usate il mouse per navigare nei sottomenu e selezionare le opzioni. Per esempio, nella figura 4-8 potreste usarlo per selezionare il sottomenu <tt>Generic Driver Options</tt> del menu <tt>Device Drivers</tt>. Questo cambierà la schermata di ''xconfig'' e la farà diventare quella dell'immagine 4-9.
 
[[Immagine:Xconfig_2.png|740px|thumb|''Figura 4-9. Generic Driver Options in make xconfig'']]
 
La corrispondente immagine di ''gconfig'' è in figura 4-10.
 
[[Immagine:Gconfig_2.png|740px|thumb|''Figura 4-10. Generic Driver Options in make gconfig'']]
 
Modificare questo sottomenu per disabilitare la seconda opzione e rendere la terza opzione compilata come modulo genera le schermate apparire come nelle figure 4-11 e 4-12.
 
[[Immagine:Xconfig_3.png|740px|thumb|''Figura 4-11. Generic Driver Options in make xconfig, modificato'']]
[[Immagine:gconfig_3.png|740px|thumb|''Figura 4-12. Generic Driver Options in make gconfig, modificato'']]
Notate che nel metodo ''gconfig'' un riquadro con il segno di visto significa che l'opzione sarà compilata nel kernel, laddove una linea nel riquadro significa che l'opzione sarà compilata come modulo. Nel metodo ''xconfig'' un'opzione compilata come modulo sarà mostrata con un punto nel riquadro.
 
Entrambi questi metodi vi chiedono di salvare la configurazione quando uscite dal programma, e offrono la possibilità di scrivere quella configurazione in un altro file. Potete così creare molteplici, distinte configurazioni.
 
 
=='''Compilazione del Kernel'''==
Ora che avete creato la configurazione che intendete usare, dovete compilare il kernel. Questo è semplice come digitare un comando di un parola:
<pre>$ make
CHK include/linux/version.h
UPD include/linux/version.h
SYMLINK include/asm -> include/asm-i386
SPLIT include/linux/autoconf.h -> include/config/*
CC arch/i386/kernel/asm-offsets.s
GEN include/asm-i386/asm-offsets.h
CC scripts/mod/empty.o
HOSTCC scripts/mod/mk_elfconfig
MKELF scripts/mod/elfconfig.h
HOSTCC scripts/mod/file2alias.o
HOSTCC scripts/mod/modpost.o
HOSTCC scripts/mod/sumversion.o
HOSTLD scripts/mod/modpost.o
HOSTCC scripts/kallsyms
HOSTCC scripts/conmakehash
HOSTCC scripts/bin2c
CC init/main.o
CHK include/linux/compile.h
UPD include/linux/compile.h
CC init/version.o
CC init/do_mounts.o
...</pre>
 
Eseguire ''make'' fa sì che il sistema di compilazione del kernel usi il file di configurazione che avete selezionato per compilare un kernel e tutti i moduli necessari per supportare tale configurazione. Mentre il kernel è in compilazione, ''make'' mostra cosa sta correntemente succedendo ai singoli file, insieme a tutti gli avvertimenti ("warnings", N.d.T.) e gli errori di compilazioni.
 
Se la compilazione del kernel termina senza errori, avete creato con successo l'immagine di un kernel. Comunque deve essere propriamente installata prima che proviate ad avviarla. Leggete il [[LKN:_Installare_ed_Avviare_con_un_Kernel|Capitolo 5]] per sapere come fare.
 
È molto raro avere errori di compilaizone quando state compilando una versione del kernel rilasciata. Se vi capita, riportateli agli sviluppatori del kernel Linux cosicché possano essere corretti.
 
nota: Versioni del kernel più vecchie, precedenti al rilascio 2.6 richiedevano l'ulteriore passo ''make modules'' per compilare tutti i moduli necessari. Questo non è più necessario.
 
=='''Opzioni di Compialzione avanzate'''==
Il sistema di compilazione del kernel consente di fare molte altre cose, oltre a compilare l'intero kernel e i relativi moduli. Il Capitolo 10 contiene l'intero elenco delle opzioni che il sistema di compilazione fornisce. In questa sezione discuteremo alcune di queste opzioni avanzate. Per avere una descrizione completa di come usare altre opzioni avanzate, fate riferimento alla documentazione dentro il kernel stesso, che può essere trovata nella cartella ''Documentation/kbuild'' nei sorgenti.
 
==='''Velocizzare la Compilazione in Macchine Multiprocessore'''===
Il sistema di compilazione del kernel lavora molto bene come operazione che può essere divisa in pezzi più piccoli e assegnati a diversi processori. Facendo questo, potete usare la piena potenza di una macchina multiprocessore e ridurre considerevolmente il tempo di compilazione del kernel.
 
Per compilare un kernel in modo parallelo, usate l'opzione ''-j'' del comando ''make''. È meglio dare un numero all'opzione ''-j'' che corrisoponda al doppio del numero di processori nel sistema. Quindi, per macchine con due processori, usate:
<pre>$ make -j4</pre>
e per macchine con quattro processori, usate:
<pre>$ make -j8</pre>
Se non passate un numero all'opzione ''-j'':
<pre>$ make -j</pre>
il sistema di compilazione creerà un nuovo filo ("thread", N.d.T.) per ogni sottocartella nell'albero delle cartelle del kernel, che può facilmente rendere la vostra macchina non in grado di rispondere ai comandi, e impiegare molto più tempo per completare la compilazione. Per questo si raccomanda di passare sempre un valore numerico all'opzione ''-j''.
 
==='''Compilare solo una parte del kernel'''===
Quando ci si dedica allo sviluppo del kernel, a volte si desidera compilare solo una specifica sottocartella, o un singolo file dell'intero albero del kernel. Il sistema di compilazione lo consente agevolmente. Per compilare selettivamente una sottocartella, specificatela nel comando di compilazione. Per esempio, per compilare i file nella cartella '''drivers/usb/serial''', inserite: <pre>$ make drivers/usb/serial</pre>
Usando questa sintassi, comunque, non si compilerà l'immagine finale del modulo in quella cartella. Per fare questo, potete usare l'opzione <tt>M=</tt>argomento:<pre>$ make M=drivers/usb/serial</pre>che compilerà tutti i file necessari in quella cartella e collegherà le immagini finali dei moduli.
 
Quando si compila una singola cartella in uno dei modi mostrati, l'immagine finale del kernel non viene ricollegata. Comunque ogni cambiamento che era stato effettuato alle sottocartelle non influenzerà l'immagine finale del kernel, che probabilmente non è quello che desiderate. Eseguite alla fine un:<pre>$ make</pre> perché il sistema di compilazione controlli tutti i file oggetto cambiati e colleghi in modo proprio l'immagine finale del kernel.
 
Per compilare un solo specifico file nell'albero del kernel, semplicemente passatelo come parametro a ''make''. Per esempio, se desiderate compilare il modulo ''drivers/usb/serial/visor.ko'', inserite:<pre>$ make drivers/usb/serial/visor.ko</pre>
Il sistema di compilazione compilerà tutti i file necessari per il modulo visor.ko, e farà il collegamento finale per creare il modulo.
 
==='''Sorgente in un posto, Destinazione in un altro'''===
Alle volte è più semplice avere i sorgendi del kernel in un posto accessibile in sola lettura (come un CD-ROM, o in un sistema di controllo del codice sorgene), e collocare l'output della compilazione altrove, così da non alterare l'albero originale del sorgente. Il sistema di compilazione lo realizza facilmente, richiedendo il solo argomento <tt>O=</tt> per specificare dove collocare l'output della compilazione. Per esempio se i sorgenti del kernel sono in un CD-ROM montato in ''/mnt/cdrom/'' e desiderate mettere i file compilati nella vostra cartella locale, inserite:<pre>$ cd /mnt/cdrom/linux-2.6.17.11
$ make O=~/linux/linux-2.6.17.11</pre>
Tutti i file compilati saranno creati nella cartella ''~/linux/linux-2.6.17.11''. Notate che questa opzione <tt>O=</tt> dovrebbe essere passata anche alle opzioni di configurazione della compilazione cosicché la configurazione sia correttamente collocata nella cartella di destinazione e non in quella contenente il codice sorgente.
 
==='''Architetture differenti'''===
Una caratteristica molto utile è la costruzione di un kernel in una compilazione incrociata, per permettere a una macchina più potente di compilare un kernel per una sistema integrato più piccolo, o anche solo per controllare una compilazione per un'architettura diversa per assicurare che a un cambiamento nel codice sorgente non rompa qualcosa di inaspettato. Il sistema di compilazione del kernel consente di specificare un'architettura diversa da quella della macchina corrente con il parametro <tt>ARCH=</tt>argomento. Il sistema di compilazione consente, inoltre, di specificare il compilatore che si desidera usare con il parametro <tt>CC=</tt>argomento o uno stumento per concatenare ("toolchain", N.d.T.) la compilazione incrociata con <tt>CROSS_COMPILE</tt> argomento.
 
Per esempio, per avere la configurazione predefinita dell'architettura x86_64, si può inserire:<pre>$ make ARCH=x86_64 defconfig</pre>
Per compilare l'intero kernel con uno strumento per concatenare la compilazione situato in ''/usr/local/bin'', si può inserire:<pre>$ make ARCH=arm CROSS_COMPILE=/usr/local/bin/arm-linux-</pre>
È utile anche per i kernel non ottenuti con compilazione incrociata cambiare ciò il sistema di costruzione del kernel usa per il compilatore. Esempi di questo sono l'utilizzo dei programmi ''distcc'' o ''ccache'', i quali riducono notevolmente il tempo di compilazione di un kernel. Per usare il programma ''ccache'' come parte del sistema di costruzione del kerne, digitate:<pre>$ make CC="ccache gcc"</pre>.
Per usare entrambi i ''distcc'' e ''ccache'' insieme, inserite:<pre>$ make CC="ccache distcc"</pre>
[[Immagine:Example.jpg]]
1 760

contributi

Menu di navigazione