LKN: Guida di Riferimento dei Parametri di Compilazione del Kernel

Da Guide@Debianizzati.Org.
Versione del 24 mar 2007 alle 18:30 di TheNoise (discussione | contributi) (link indice)
Vai alla navigazione Vai alla ricerca

Torna all'indice: Linux Kernel in a Nutshell

Come discusso nel Capitolo 4, lo strumento che unisce insieme il kernel è make, al quale si passa un target che specifica cosa si vuole compilare. Il capitolo 4 è andato oltre gli obiettivi base necessari alla corretta compilazione del kernel, ma il sistema di compilazione del kernel ha anche una larga scala di altri targets. Questo capitolo dettaglia questi targets, e per cosa possono venir utilizzati.

  • Nota di prima traduzione: nel testo, targets è stato tradotto a volte come obiettivi, anche se forse sarebbe meglio parlare di etichette dal momento che in un Makefile si chiamano così, la maggior parte delle volte inceve si è preferito lasciare la parola in lingua originale italianizzandola in target senza s.

Tutti questi target vengono passati al programma make a linea di comando, e un numero di questi può venir raggruppato insieme se lo si desidera. Per esempio:

$ make mrproper xconfig

I target sono suddivisi sotto per differenti tipi nelle sezioni seguenti.

Si può avere un sommario della maggior parte di essi eseguendo nella directory di compilazione:

$ make help

Questo target mostra molti dei target comuni di make che vengono descritti nel resto del capitolo.


Target Informativi

La tabella 10-1 mostra i target che stampano la versione del kernel, basato su un numero di opzioni differenti. Sono solitamente usati da scripts per determinare la versione del kernel che si sta per compilare.

Tabella 10-1. Target informativi

Target Descrizione
kernelrelease Visualizza la versione corrente del kernel, la stessa determinata dal sistema di compilazione.
kernelversion Visualizza la versione corrente del kernel, come detto dal Makefile principale. Questa differisce da kernelrelease dal fatto che non usa altre informazioni di versione aggiuntive basate su opzioni di configurazione o file localversion.


Target di pulizia

La tabella 10-2 mostra i target che semplicemente rimuovono i file delle compilazioni precedenti. Il loro uso è caldamente raccomandato per essere sicuri di non contaminare le nuove compilazioni con file abbandonati che possono essere stati compilati con opzioni differenti. Differiscono da quanto eliminano; a volte si preferisce mantenere file che si è cambiati.

Table 10-2. Target di pulizia

Target Descrizione
clean Rimuove la maggior parte dei file generati dal sistema di compilazione del kernel, ma mantiene la configurazione del kernel.
mrproper Rimuove tutti i file generati dal sistema di compilazione del kernel, inclusa la configurazione e alcuni file di backup.
distclean Fa tutto cio' che mrproper fa e rimuove alcuni editor backup e file patch abbandonate.


Target di configurazione

La tabella 10-3 mostra i target che permettono al kernel di essere configurato in un largo campo di modi differenti.

Tabella 10-3. Target di configurazione

Target Descrizione
config Aggiorna la configurazione corrente del kernel usando il programma a linea di comando.
menuconfig Aggiorna la configurazione corrente del kernel usando un programma a menu testuale.
xconfig Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie QT.
gconfig Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie GTK+.
oldconfig Aggiorna la configurazione corrente del kernel usando il file .config corrente e chiedendo conferma per ogni nuova opzione che aggiunta al kernel.
silentoldconfig Come oldconfig, ma non stampa nulla su schermo tranne quando una questione ha bisogno di una risposta.
randconfig Genera una nuova configurazione di kernel con risposte casuali a tutte le differenti opzioni.
defconfig Genera una nuova configurazione del kernel che usa le risposte di default per tutte le ozioni. I valori di default sono presi da un file situato in arch/$ARCH/defconfig, dove $ARCH si riferisce alla specifica architettura per il quale il kernel viene compilato.
allmodconfig Genera una nuova configurazione del kernel nel quale i moduli sono attivati dove possibile.
allyesconfig Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a yes.
allnoconfig Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a no.

Notare che allyesconfig, allmodconfig, allnoconfig, e randconfig target prendono anche vantaggio della variabile d'ambiente KCONFIG_ALLCONFIG. Se quella variabile punta a un file, quel file verrà usato come lista di valori di configurazione che si richiede essere imposti a uno specifico valore. In altre parole, il file scavalca il comportamento normale di make target.

Per esempio, se il file ~/linux/must_be_set contiene le seguenti variabili:

$ cat ~/linux/must_be_set
CONFIG_SWAP=y
CONFIG_DEBUG_FS=y

e si inserisce make allnoconfig con l'appropriata variabile d'ambiente KCONFIG_ALLCONFIG attiva:

$ KCONFIG_ALLCONFIG=../must_be_set make allnoconfig
$ grep CONFIG_SWAP .config
CONFIG_SWAP=y

quindi i risultati includono:

$ grep CONFIG_DEBUG_FS .config
CONFIG_DEBUG_FS=y

Questa variabile non sarebbe stata impostata a y altrimenti.

Se la variabile KCONFIG_ALLCONFIG non è impostata, il sistema di compilazione controlla i file nella directory di compilazione a più alto livello nominata:

  • allmod.config
  • allno.config
  • allrandom.config
  • allyes.config

Se qualsiasi di questi file è presente, la compilazione lo usa come lista di valori di configurazione che devono essere forzati ai valori specificati. Se nessuno di questi file viene trovato, il sistema di compilazione alla fine cerca un file chiamato all.config per una lista di valori di configurazione forzati.

Si possono usare questi file differenti per impostare una buona configurazione di base che funzionerà sempre. In seguito le altre opzioni di configurazione possono essere usate per generare differenti configurazioni di testing per le situazioni che lo necessitano.


Target di compilazione

La tabella 10-4 mostra i target che compilano il kernel stesso in una molteciplità di metodi.

Table 10-4. Target di compilazione

Target Descrizione
all Compila tutti i differenti target necessari al kernel per venir usato. Ciò include sia i moduli che le porzioni statiche del kernel.
vmlinux Compila solo la parte statica del kernel, nesusn modulo caricabile.
modules Compila tutti i moduli caricabili del kernel per questa configurazione.
module_install Installa tutti i moduli nella specifica locazione. Se nessuna locazione è specificata con la variabile d'ambiente INSTALL_MODULE_PATH, vengono installati nella directory root di default della macchina.
dir/ Compila tutti i file nella directory specificata e in tutte le sottodirectory sotto questa.
dir/file.[o|i|s] Compila solo i file specificati.
dir/file.ko Compila tutti i file necessari e li unisce insieme per formare il modulo specificato.
tags Compila tutti i tags necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.
TAGS Compila tutti i tags necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.
cscope Compila una immagine cscope, utile nel sorgente treesearches, dell'albero sorgente per l'architettura specificata dal file di configurazione (non tutti i file sorgenti del kernel).

Potete anche passare un numero di variabili d'ambiente a make che cambierà la compilazione. Queste possono essere specificate per quasi ogni target, come mostrato nella tabella 10-5.

Tabella 10-5. Variabili d'ambiente

Variabile Valore Descrizione
V 0 Questa dice al sistema di compilazione di girare in maniera silenziosa, mostrando solo il file correntemente in compilazione, e non il comando intero che sta girando ai fini di compilare il file. Questa è l'opzione di default per il sistema di compilazione.
V 1 Questo dice al sistema di compilazione di operare in modalità verbose, mostrando il comando completo che si sta usando per generare ognuno dei file specifici.
O dir Questo dice al sistema di compilazione di mettere tutti i file di output nella directory dir, inclusi i file di configurazione del kernel. Questo permette al kernel di venir compilato da un filesystem in sola lettura e avere l'output posto in un altra locazione.
C 1 Questo checksall i file C che verranno compilati con il tool sparse, che scova gli errori comuni di configurazione nei file sorgenti del kernel. sparse può essere scaricato usando git da git://git.kernel.org/pub/scm/devel/sparse/sparse.git. Snapshots nottetempo possono essere trovati a http://www.codemonkey.org.uk/projects/git-snapshots/sparse/. Maggiori informazioni su come usare sparse possono venir trovate nel file Documentation/sparse.txt nell'albero dei sorgenti del kernel.
C 2 Questa forcesall i file C da controllare con il tool sparse, anche se essi non devono essere compilati.


Packaging Target

Questi target impacchettano un kernel compilato in un pacchetto autonomo che può essere installato su una larga varietà di macchine differenti, come mostrato nella tabella 10-6.

Tabella 10-6. Packaging target

Target Descrizione
rpm Compila il kernel e poi lo impacchetta in un pacchetto RPM che può venir installato.
rpm-pkg Costruisce un pacchetto RPM sorgente che contiene un kernel di base.
binrpmpkg Costruisce un pacchetto RPM che contiene un kernel compilato e i moduli.
deb-pkg Costruisce un pacchetto Debian che contiene un kernel compilato e i moduli.
tar-pkg Costruisce un tarball che contiene un kernel compilato e i moduli.
targz-pkg Costruisce un tarball compresso con gzip che contiene il kernel compilato e i moduli.
tarbz2-pkg Costruisce un tarball compresso con bzip2 che contiene il kernel compilato e i moduli.


Target di Documentazione

La tabella 10-7 mostra traget che costruiscono la documentazione interna del kernel in una molteciplità di formati differenti.

Tabella 10-7 target di documentazione

Target Descrizione
xmldocs Costruisce la documentazione del kernel come XML DocBook file.
psdocs Costruisce la documentazione del kernel come Postscript file.
pdfdocs Costruisce la documentazione del kernel come PDF file.
htmldocs Costruisce la documentazione del kernel come HTML file.
mandocs Costruisce la documentazione del kernel come un set di manpages, che possono venir installate con install-mandocs target.


Target su Architetture specifiche

Ogni architettura kernel ha un set di target specifici unici a se stessi. La tabella 10-8 mostra i target disponibili per l'architettura Intel a 32-bit.

Tabella 10-8. Target specifici per architettura 32-bit Intel

Target Descrizione
bzImage Crea una immagine compressa del kernel e la pone nel file arch/i386/boot/bzImage. Questo è il target di default per i kernel i386.
install Installa l'immagine del kernel usando il programma specifico di distribuzione /sbin/installkernel. Notare che questo non installa i moduli del kernel; ciò deve essere fatto con il target module_install.
bzdisk Crea una immagine di boot per floppy e la scrive sul device /dev/fd0.
fdimage Crea una immagine di boot per floppy e la mette nel file arch/i386/boot/fdimage. Il pacchetto mtools deve essere presente sul vostro sistema affinché questo funzioni propriamente.
isoimage Crea una immagine di boot CD-ROM e la pone nel file arch/i386/boot/image.iso. Il pacchetto syslinux deve essere presente nel vostro sistema affiché questo funzioni propriamente.


Target di analisi

La tabella 10-9 mostra i target che sono d'aiuto per trovare problemi nel codice del kernel. E' una buona idea creare una lista degli spazi di stack quando si crea del nuovo codice per determinare che i vostri cambiamenti non stiano prendendo troppo spazio di stack del kernel. Il target namespacecheck è utile per determinare se i vostri cambiamenti possono in sicurezza aggiungere i propri simboli al namespace globale del kernel.

Tabella 10-9. Targets di analisi

Target Descrizione
checkstat Genera una lista di funzioni che usano la maggior parte dello spazio di stack del kernel.
namespace check Genera una lista di tutti i simboli del kernel e dei loro namespaces. Questa sarà una lunga lista.