LKN: Bibliografia: differenze tra le versioni

Vai alla navigazione Vai alla ricerca
→‎Tool: git trees lo considero intraducibile
(Versione completa in bozza - necessita revisione)
(→‎Tool: git trees lo considero intraducibile)
Riga 1: Riga 1:
''Inserire qui la traduzione di [http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appb.pdf questo] capitolo.''
''Torna all'indice: [[Linux Kernel in a Nutshell]]''
__TOC__
 
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 ''target''. Questo capitolo dettaglia questi target, e per cosa possono venir utilizzati.
 
* Nota di prima traduzione: nel testo, target � 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:
 
<pre>
$ make mrproper xconfig
</pre>
 
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:
 
<pre>
$ make help
</pre>
 
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 script per determinare la versione del kernel che si sta per compilare.
 
''Tabella 10-1. Target informativi''
 
<table border="1">
<tr>
  <td width="50%">'''Target'''</td>
  <td>'''Descrizione'''</td>
</tr>
<tr>
  <td width="50%">kernelrelease</td> 
  <td width="50%">Visualizza la versione corrente del kernel, la stessa determinata dal sistema di compilazione.</td>
</tr>
<tr>
  <td width="50%">kernelversion</td> 
  <td width="50%">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''.</td>
</tr>
</table>
 
 
== Target di pulizia ==
 
La tabella 10-2 mostra i target che semplicemente rimuovono i file delle compilazioni precedenti. Il loro uso � vivamente consigliato 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''
 
<table border="1">
<tr>
  <td width="50%">'''Target'''</td>
  <td width="50%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="50%">clean</td>
  <td width="50%">Rimuove la maggior parte dei file generati dal sistema di compilazione del kernel, ma mantiene la configurazione del kernel.</td>
</tr>
<tr>
  <td width="50%">mrproper</td>
  <td width="50%">Rimuove tutti i file generati dal sistema di compilazione del kernel, inclusa la configurazione e alcuni file di backup.</td>
</tr>
<tr>
  <td width="50%">distclean</td>
  <td width="50%">Fa tutto ci&ograve; che mrproper fa e rimuove alcuni editor backup e file patch abbandonate.</td>
</tr>
</table>
 
 
== 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''
 
<table border="1">
<tr>
  <td width="50%">'''Target'''</td>
  <td width="50%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="50%">config</td>
  <td width="50%">Aggiorna la configurazione corrente del kernel usando il programma a riga di comando.</td>
</tr>
<tr>
  <td width="50%">menuconfig</td>
  <td width="50%">Aggiorna la configurazione corrente del kernel usando un programma a menu testuale.</td>
</tr>
<tr>
  <td width="50%">xconfig</td>
  <td width="50%">Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie QT.</td>
</tr>
<tr>
  <td width="50%">gconfig</td>
  <td width="50%">Aggiorna la configurazione corrente del kernel usando un programma grafico basato su librerie GTK+.</td>
</tr>
<tr>
  <td width="50%">oldconfig</td>
  <td width="50%">Aggiorna la configurazione corrente del kernel usando il file .config corrente e chiedendo conferma per ogni nuova opzione che aggiunta al kernel.</td>
</tr>
<tr>
  <td width="50%">silentoldconfig</td>
  <td width="50%">Come oldconfig, ma non stampa nulla su schermo tranne quando una questione ha bisogno di una risposta.</td>
</tr>
<tr>
  <td width="50%">randconfig</td>
  <td width="50%">Genera una nuova configurazione di kernel con risposte casuali a tutte le differenti opzioni.</td>
</tr>
<tr>
  <td width="50%">defconfig</td>
  <td width="50%">Genera una nuova configurazione del kernel che usa le risposte predefinite per tutte le ozioni. I valori predefiniti sono presi da un file situato in ''arch/$ARCH/defconfig, dove $ARCH si riferisce alla specifica architettura per il quale il kernel viene compilato.</td>
</tr>
<tr>
  <td width="50%">allmodconfig</td>
  <td width="50%">Genera una nuova configurazione del kernel nel quale i moduli sono attivati dove possibile.</td>
</tr>
<tr>
  <td width="50%">allyesconfig</td>
  <td width="50%">Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a ''yes''.</td>
</tr>
<tr>
  <td width="50%">allnoconfig</td>
  <td width="50%">Genera una nuova configurazione del kernel nel quale tutte le opzioni sono impostate a ''no''.</td>
</tr>
</table>
 
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:
 
<pre>
$ cat ~/linux/must_be_set
CONFIG_SWAP=y
CONFIG_DEBUG_FS=y
</pre>
 
e si inserisce ''make allnoconfig'' con l'appropriata variabile d'ambiente KCONFIG_ALLCONFIG attiva:
 
<pre>
$ KCONFIG_ALLCONFIG=../must_be_set make allnoconfig
$ grep CONFIG_SWAP .config
CONFIG_SWAP=y
</pre>
 
quindi i risultati includono:
 
<pre>
$ grep CONFIG_DEBUG_FS .config
CONFIG_DEBUG_FS=y
</pre>
 
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 con nome:
 
* ''allmod.config''
 
* ''allno.config''
 
* ''allrandom.config''
 
* ''allyes.config''
 
Se qualsiasi di questi file � presente, la compilazione li 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 test per le situazioni che lo necessitano.
 
 
== Target di compilazione ==


__TOC__


Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. Questo � il miglior posto dove mettere informazioni su come compilare e installare il kernel ed � usualmente aggiornato quando la procedura di compilazione subisce dei cambiamenti.
La tabella 10-4 mostra i target che compilano il kernel stesso in una molteciplit� di metodi.


== Libri ==
''Table 10-4. Target di compilazione''
Sono disponibili molti ottimi libri relativi alla programmazione del kernel di Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco una lista di libri che ho trovato utili.


=== Libri generici su Linux ===
<table border="1">
<tr>
  <td width="50%">'''Target'''</td>
  <td width="50%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="50%">all</td>
  <td width="50%">Compila tutti i differenti target necessari al kernel per venir usato. Ci� include sia i moduli che le porzioni statiche del kernel.</td>
</tr>
<tr>
  <td width="50%">vmlinux</td>
  <td width="50%">Compila solo la parte statica del kernel, nessun modulo caricabile.</td>
</tr>
<tr>
  <td width="50%">modules</td>
  <td width="50%">Compila tutti i moduli caricabili del kernel per questa configurazione.</td>
</tr>
<tr>
  <td width="50%">module_install</td>
  <td width="50%">Installa tutti i moduli nella specifica locazione. Se nessuna posizione � specificata con la variabile d'ambiente INSTALL_MODULE_PATH, vengono installati nella directory root predefinita della macchina.</td>
</tr>
<tr>
  <td width="50%">dir/</td>
  <td width="50%">Compila tutti i file nella directory specificata e in tutte le sottodirectory sotto questa.</td>
</tr>
<tr>
  <td width="50%">dir/file.[o|i|s]</td>
  <td width="50%">Compila solo i file specificati.</td>
</tr>
<tr>
  <td width="50%">dir/file.ko</td>
  <td width="50%">Compila tutti i file necessari e li unisce per formare il modulo specificato.</td>
</tr>
<tr>
  <td width="50%">tags</td>
  <td width="50%">Compila tutti i tag necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.</td>
</tr>
<tr>
  <td width="50%">TAGS</td>
  <td width="50%">Compila tutti i tag necessari che la maggior parte degli editor di testo possono usare mentre modificano il codice sorgente.</td>
</tr>
<tr>
  <td width="50%">cscope</td>
  <td width="50%">Compila un'immagine ''cscope'', utile nel sorgente treesearches, dell'albero sorgente per l'architettura specificata dal file di configurazione (non tutti i file sorgenti del kernel).</td>
</tr>
</table>


* Ellen Siever,Aaron Weber,Stephen Figgins,Robert Love,and Arnold Robbins. ''Linux in a Nutshell'' (O�Reilly), 2005.<br/>Questo libro comprende una delle pi� complete e autorevoli guide ai comandi per Linux. Essa copre praticamente ogni singolo comando di cui potreste mai aver bisogno.
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.


* Yaghmour, Karim. ''Building Embedded Linux Systems'' (O�Reilly), 2003.<br/>This book,although mainly oriented toward the embedded Linux developer, has a great section on how to build up a cross-compiler toolchain and kernel. It is highly recommended for that section,as well as for other portions of the book that are valuable to people wishing to learn more about how to customize a Linux kernel and the rest of the system.
''Tabella 10-5. Variabili d'ambiente''


=== Libri sul kernel di Linux ===
<table border="1">
<tr>
  <td width="33%">'''Variabile'''</td>
  <td width="33%">'''Valore'''</td>
  <td width="33%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="10%">V</td>
  <td width="10%">0</td>
  <td width="80%">Questa dice al sistema di compilazione di funzionare in maniera silenziosa, mostrando solo il file in compilazione, e non il comando intero che sta girando ai fini di compilare il file. Questa � l'opzione predefinita per il sistema di compilazione.</td>
</tr>
<tr>
  <td width="10%">V</td>
  <td width="10%">1</td>
  <td width="80%">Questo dice al sistema di compilazione di operare in modalit� prolissa, mostrando il comando completo che si sta usando per generare ognuno dei file specifici.</td>
</tr>
<tr>
  <td width="10%">O</td>
  <td width="10%">dir</td>
  <td width="80%">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 di compilare il kernel da un filesystem in sola lettura e avere l'output posto in un'altra posizione.</td>
</tr>
<tr>
  <td width="10%">C</td>
  <td width="10%">1</td>
  <td width="80%">Questo ''checksall'' i file C che verranno compilati con lo strumento ''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''. Snapshot giornalieri possono essere trovati a ''http://www.codemonkey.org.uk/projects/git-snapshots/sparse/''. Maggiori informazioni su come usare ''sparse'' possono essere reperite nel file Documentation/sparse.txt nell'albero dei sorgenti del kernel.</td>
</tr>
<tr>
  <td width="10%">C</td>
  <td width="10%">2</td>
  <td width="80%">Questa ''forcesall'' i file C da controllare con lo strumento ''sparse'', anche se essi non devono essere compilati.</td>
</tr>
</table>


Molti di questi libri sono indirizzati ai programmatori interessati ad apprendere come programmare all'interno del kernel. Sono generalmente molto tecnici rispetto a questo libro, ma sono un ottimo punto di partenza se desiderate imparare e capire il codice che controlla il kernel.


*Jonathan Corbet,Alessandro Rubini,and Greg Kroah-Hartman. ''Linux Device Drivers'' (O�Reilly), 2005.<br/>Questo libro illusrra come differenti ''device driver'' operano e fornisce parecchi esempi applicatici di driver funzionanti. E' raccomandato a chiunque vuole programmare driver per il kernel. E' disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/
== Target di pacchettizzazione ==


* Love, Robert. ''Linux Kernel Development'' (Novell Press Publishing), 2005.<br/> Questo libro copre quasi tutti gli aspetti relativi al kernel di Linux, illustrando come tutto opera insieme. Ottimo punto di partenza per iniziare a capire e conoscere le diverse componenti del kernel.


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


== Tool ==
''Tabella 10-6. Packaging target''


In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento una lista dei siti dove � possibile reperire e scaricare tali strumenti.
<table border="1">
<tr>
  <td width="30%">'''Target'''</td>
  <td width="70%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="30%">rpm</td>
  <td width="70%">Compila il kernel e poi lo impacchetta in un pacchetto RPM che pu� essere installato.</td>
</tr>
<tr>
  <td width="30%">rpm-pkg</td>
  <td width="70%">Crea un pacchetto RPM sorgente che contiene un kernel di base.</td>
</tr>
<tr>
  <td width="30%">binrpmpkg</td>
  <td width="70%">Crea un pacchetto RPM che contiene un kernel compilato e i moduli.</td>
</tr>
<tr>
  <td width="30%">deb-pkg</td>
  <td width="70%">Crea un pacchetto Debian che contiene un kernel compilato e i moduli.</td>
</tr>
<tr>
  <td width="30%">tar-pkg</td>
  <td width="70%">Crea un tarball che contiene un kernel compilato e i moduli.</td>
</tr>
<tr>
  <td width="30%">targz-pkg</td>
  <td width="70%">Crea un tarball compresso con ''gzip'' che contiene il kernel compilato e i moduli.</td>
</tr>
<tr>
  <td width="30%">tarbz2-pkg</td>
  <td width="70%">Crea un tarball compresso con ''bzip2'' che contiene il kernel compilato e i moduli.</td>
</tr>
</table>


* ''Linux kernel''<br/> http://www.kernel.org and ftp://ftp.kernel.org contiene tutte le versioni del sorgente del kernel. http://www.kernel.org/git/ contiene una lista di tutti i '''git trees''' utilizzati dai diversi sviluppatori del kernel.


* ''gcc''<br>http://gcc.gnu.org/ sito principale per tutto ci� che concerne il compilatore GNU C.
== Target di documentazione ==


* ''binutils''<br/>http://www.gnu.org/software/binutils/ il sito principale dove trovare tutte le informazioni su binutils.


* ''make''<br/>http://www.gnu.org/software/make/ � il sito principale dove trovare tutte le informazioni su make.
La tabella 10-7 mostra target che costruiscono la documentazione interna del kernel in molteplici formati.


*''util-linux''<br/>http://www.kernel.org/pub/linux/utils/util-linux/ � la directory da dove possono essere scaricate tutte le versioni di util-linux.
''Tabella 10-7'' target di documentazione''


* ''module-init-tools''<br/>http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/ is the directory where all versions of module-init-tools can be downloaded.
<table border="1">
* ''e2fsprogs''<br/>http://e2fsprogs.sourceforge.net/ is the main project page for the e2fsprogs
<tr>
package.
  <td width="30%">'''Target'''</td>
  <td width="70%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="30%">xmldocs</td>
  <td width="70%">Crea la documentazione del kernel come file XML DocBook.</td>
</tr>
<tr>
  <td width="30%">psdocs</td>
  <td width="70%">Crea la documentazione del kernel come file Postscript.</td>
</tr>
<tr>
  <td width="30%">pdfdocs</td>
  <td width="70%">Crea la documentazione del kernel come file PDF.</td>
</tr>
<tr>
  <td width="30%">htmldocs</td>
  <td width="70%">Crea la documentazione del kernel come file HTML.</td>
</tr>
<tr>
  <td width="30%">mandocs</td>
  <td width="70%">Crea la documentazione del kernel come un insieme di pagine man, che possono essere installate con il target ''install-mandocs''.</td>
</tr>
</table>


* ''jfsutils''<br/>http://jfs.sourceforge.net/ is the main project page for the jfsutils package.


* ''reiserfsprogs''<br/>http://www.namesys.com/download.html is the main project page for the reiserfsprogs package.
== Target per architetture specifiche ==


* ''xfsprogs''<br/>http://oss.sgi.com/projects/xfs/ is the main project page for the xfsprogs
package.


* ''quota-tools''<br/>http://sourceforge.net/projects/linuxquota/ is the main project page for the quota-tools package.
Ogni architettura kernel ha un insieme di target specifici unici a se stessi. La tabella 10-8 mostra i target disponibili per l'architettura Intel a 32-bit.


* ''nfs-utils''<br/>http://nfs.sf.net/ is the main project page for the nfs-utils package.
''Tabella 10-8. Target specifici per architettura 32-bit Intel''


* ''udev''<br/>http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html is the directory
<table border="1">
where all versions of udev can be downloaded.
<tr>
  <td width="30%">'''Target'''</td>
  <td width="70%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="30%">bzImage</td>
  <td width="70%">Crea un'immagine compressa del kernel e la pone nel file ''arch/i386/boot/bzImage''. Questo � il target predefinito per i kernel i386.</td>
</tr>
<tr>
  <td width="30%">install</td>
  <td width="70%">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''.</td>
</tr>
<tr>
  <td width="30%">bzdisk</td>
  <td width="70%">Crea un'immagine di boot per floppy e la scrive sul dispositivo ''/dev/fd0''.</td>
</tr>
<tr>
  <td width="30%">fdimage</td>
  <td width="70%">Crea un'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 correttamente.</td>
</tr>
<tr>
  <td width="30%">isoimage</td>
  <td width="70%">Crea un'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 correttamente.</td>
</tr>
</table>


* ''procfs''<br/>http://procps.sourceforge.net/ is the main project page for the procfs package.


* ''patchutils''<br/>http://cyberelk.net/tim/patchutils is the location for all of the patchutils
== Target di analisi ==
releases.


* ''git''<br/>http://git.or.cz/ is the main site for the git project.


* ''ketchup''<br/>http://www.selenic.com/ketchup/ is the main project page for the ketchup program.
La tabella 10-9 mostra i target che sono d'aiuto per trovare problemi nel codice del kernel. &Egrave; 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.


* ''quilt''<br/>http://savannah.nongnu.org/projects/quilt is the main project page for the quilt
''Tabella 10-9. Targets di analisi''
program.


* ''distcc''<br/>http://distcc.samba.org/ is the main project page for the distcc program.
<table border="1">
<tr>
  <td width="30%">'''Target'''</td>
  <td width="70%">'''Descrizione'''</td>
</tr>
<tr>
  <td width="30%">checkstat</td>
  <td width="70%">Genera una lista di funzioni che usano la maggior parte dello spazio di stack del kernel.</td>
</tr>
<tr>
<td width="30%">namespace check</td>
<td width="70%">Genera una lista di tutti i simboli del kernel e dei loro namespace. Questa sar� una lunga lista.</td>
</tr>
</table>


* ''ccache''<br/>http://ccache.samba.org/ is the main project page for the ccache program.


----
----
27

contributi

Menu di navigazione