LKN: Bibliografia: differenze tra le versioni

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
(nuova categoria)
 
(21 versioni intermedie di 5 utenti non mostrate)
Riga 1: Riga 1:
''Torna all'indice: [[Linux Kernel in a Nutshell]]''
{{Template:LKN}}
__TOC__


Uno dei punti pi� delicati e difficili nella creazione della propria versione del kernel Linux � quello di determinare esattamente quali driver e quali opzioni di configurazione sono richiesti per il corretto funzionamento dalla macchina su cui viene installato.
Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. La documentazione è infatti il miglior posto dove trovare informazioni e riferimenti su come compilare e installare il kernel ed è normalmente tenuta aggiornata a seguito di cambiamenti nella procedura di compilazione.
Questo capitolo guider� il lettore attraverso questo processo di selezione e scelta dei driver corretti.


==Usare un kernel di una distribuzione==
== Libri ==
Sono disponibili molti ottimi libri relativi alla programmazione del kernel Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco un elenco di libri che ho trovato utili.


Uno dei metodi pi� semplici, per determinare quali moduli siano necessari, � quello di partire dalla configurazione che viene installata dal pacchetto del kernel della distribuzione che si sta usando. � infatti molto pi� semplice determinare di quali driver si ha bisogno basandosi su quelli installati in un sistema in funzione, in cui i driver corretti sono gi� associati all'hardware in utilizzo.
=== Libri generici su Linux ===


Se invece si sta personalizzando un kernel per una macchina sulla quale non � installata una distribuzione Linux, allora conviene partire dalla versione LiveCD di una distribuzione. Questo consente all'utente di far partire Linux sulla macchina in oggetto e di determinare in maniera semplice le opzioni di configurazione del kernel e che consentono il funzionamento ottimale della macchina stessa.
* Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e 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.


===Dove si trova la configurazione del kernel?===
* Yaghmour, Karim. ''Building Embedded Linux Systems'' (O’Reilly), 2003.<br/>Questo libro, sebben principalmente rivolto agli sviluppatori di sistemi Linux embedded, contiene un'ottima sezione relativa a come creare una ''toolchain'' e un kernel con compilazione incrociata. Oltre a questa sezione del libro, è consigliato anche in virtù di altre sezioni che forniscono interessanti informazioni per coloro che vogliono imparare come personalizzare il kernel e il resto del sistema.


Quasi tutte le distribuzioni forniscono il file di configurazione nello stesso pacchetto del kernel. Si consiglia di leggere la documentazione relativa alla distribuzione stessa per sapere dove viene installato il file di configurazione. Solitamente si trova da qualche parte in una sotto-directory di <tt>/usr/src/linux/</tt>.
=== Libri inerenti il kernel Linux ===


{{Box|Nota per Debian (NdT)|In debian il file di configurazione di ogni kernel installato si trova in <tt>/boot/</tt> ed ha come nome <tt>config-''versione''</tt>.}}
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 governa il kernel.


Se avete difficolt� a trovare la configurazione del kernel, allora guardate nel kernel stesso. I kernel di molte distribuzioni sono compilati in modo da includere il file di configurazione dentro il filesystem <tt>/proc</tt>. Per verificare se questo � il vostro caso, digitate:
*Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. ''Linux Device Drivers'' (O’Reilly), 2005.<br/>Questo libro illustra come differenti ''device driver'' operano e fornisce parecchi esempi applicatici di driver funzionanti. &Egrave; consigliato a chiunque vuole programmare driver per il kernel. &Egrave; disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/


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


Se il file ''/proc/config.gz'' � presente, allora copiatelo nella directory del sorgente kernel ed estraetelo:
* Bovet, Daniel P. e Cesate, Marco. ''Understanding the Linux Kernel'' (O’Reilly), 2005.<br/> Questo libro si addentra negli aspetti relativi la progettazione e implementazione del nucleo del kernel Linux. Un ottimo riferimento per apprendere e capire gli algoritmi utilizzati nelle diverse porzioni del kernel. Fortemente consigliato a coloro che vogliono comprendere nel dettaglio come funziona il kernel.


<pre>
== Strumenti ==
$ cp /proc/config.gz -/linux/
$ cd -/linux
$ gzip -dv config.gz
config.gz:      74.9% - - replaced with config
</pre>


Copiate questo file di configurazione nella vostra directory del kernel e rinominatelo in ''.config''.
In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti.
Ora potrete utilizzare questo file come base di partenza nella personalizzazione della configurazione del kernel cos� come descritto nel [[LKN:_Configurare_e_Compilare|Capitolo 4]].


Usando questo file di configurazione si dovrebbe ottenere sempre un file immagine del kernel (un ''kernel ricompilato'', NdT) funzionante sulla propria macchina.
* ''Linux kernel''<br/> http://www.kernel.org e 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.
Lo svantaggio di questa immagine � che verranno compilati quasi tutti i moduli e driver presenti nei sorgenti del kernel. Ci� non � quasi mai necessario per una singola macchina, quindi sarebbe meglio disabilitare tutti i driver e le opzioni non necessarie. Si raccomanda di disabilitare solo quelle opzioni che si � sicuri non serviranno, poich� ci sono parti del sistema che richiedono l'abilitazione di certe opzioni.


===Determinare quali moduli siano necessari===
* ''gcc''<br>http://gcc.gnu.org/ sito principale per tutto ciò che concerne il compilatore GNU C.  
Usando il file di configurazione fornito dalla vostra distribuzione il tempo richiesto per la compilazione del kernel � molto lungo poich� tutti i possibili driver vengono abilitati. Si dovrebbe cercare di abilitare solo i driver per l'hardware presente nel sistema, cos� da ridurre i tempi di compilazione del kernel. Inoltre, compilando ''staticamente'' (invece che come moduli) alcuni o tutti i driver necessari, si riduce la memoria utilizzata ed in alcune architetture si velocizza il funzionamento del sistema. Per escludere i driver dal kernel � necessario per� determinare quali moduli sono indispensabili per il funzionamento dell'hardware installato. Attraverso l'utilizzo di due esempi, cercheremo di spiegare come determinare quali driver siano indispensabili al controllo dell'hardware.


Le informazioni che mettono in relazione i dispositivi ai driver presenti nel kernel sono conservate in varie parti del sistema. Uno dei posti pi� importanti dove sono salvate queste informazioni � il filesystem virtuale ''sysfs''. All'avvio di Linux, ''sysfs'', dovrebbe essere montato dagli script di inizializzazione della vostra distribuzione nella directory ''/sys''. ''sysfs'' consente di dare un'occhiata a come le varie parti del kernel sono legate l'una a l'altra, questo lo si deduce grazie ai vari collegamenti simbolici (''symlink'' NdT) che puntano all'interno dell'intero filesystem.
* ''binutils''<br/>http://www.gnu.org/software/binutils/ è il sito principale dove trovare tutte le informazioni su binutils.


In tutti gli esempi di seguito, saranno riportati i veri percorsi (''path'' NdT) di ''sysfs'' corrispondenti ad hardware specifico. La vostra macchina sar� certamente diversa, ma la posizione  relativa delle informazioni sar� la stessa. Non ci si deve allarmare se i nomi di file nel ''sysfs'' non sono i medesimi, ci� � normale e prevedibile.
* ''make''<br/>http://www.gnu.org/software/make/ è il sito principale dove trovare tutte le informazioni su make.


Inoltre, la struttura interna del file di sistema ''sysfs'' subisce modifiche, a causa sia della riorganizzazione dei driver sia del fatto che gli sviluppatori del kernel trovano nuovi modi per meglio presentare in ''user space'' le strutture interne del kernel. A causa di questo, col tempo, alcuni dei ''symlink'', precedentemente menzionati in questo capitolo, possono non essere presenti. Tuttavia, le informazioni sono ancora tutte presenti, al massimo sono state un po' spostate.
*''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.


====Esempio: Come determinare il driver di rete====
* ''module-init-tools''<br/>http://www.kernel.org/pub/linux/utils/kernel/module-init-tools/ è la directory da dove possono essere scaricate tutte le versioni di module-init-tools.


Uno degli elementi pi� comuni ed importanti in un sistema � la scheda di rete. � essenziale capire quale driver la controlla ed attivarlo nella configurazione in maniera da consentire un corretto funzionamento delle connessioni di rete.
* ''e2fsprogs''<br/>http://e2fsprogs.sourceforge.net/ è la pagina principale del progetto e2fsprogs.


Primo: partendo dalle connessioni di rete si risale al device PCI
* ''jfsutils''<br/>http://jfs.sourceforge.net/ è la pagina principale del progetto jfsutils.
<pre>$ ls /sys/class/net/
eth0  eth1  eth2  lo</pre>


La directory ''lo'' rappresenta il dispositivo di rete loopback, ed non � dipendente da nessun dispositivo di rete realmente installato. Invece si dovrebbe riservare particolare attenzione alle directory ''eth0'', ''eth1'' e ''eth2'', dato che si riferiscono a dispositivi realmente esistenti
* ''reiserfsprogs''<br/>http://www.namesys.com/download.html è la pagina principale del progetto reiserfsprogs.


Per determinare di quali dispositivi ci si deve occupare, si utilizza il comando ''ifconfig'':
* ''xfsprogs''<br/>http://oss.sgi.com/projects/xfs/ è la pagina principale del progetto xfsprogs.


<pre>$ /sbin/ifconfig -a
* ''quota-tools''<br/>http://sourceforge.net/projects/linuxquota/ è la pagina principale del progetto quota-tools.
eth0 Link  encap:Ethernet  HWaddr 00:12:3F:65:7D:C2
inet  addr:192.168.0.13  Bcast:192.168.0.255  Mask:255.255.255.0
UP BROADCAST NOTRAILERS RUNNING MULTICAST  MTU:1500  Metric:1
RX packets:2720792 errors:0 dropped:0 overruns:0 frame:0
TX packets:1815488 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:3103826486 (2960.0 Mb) TX bytes:371424066 (354.2 Mb)
Base address:0xdcc0 Memory:dfee0000-dff00000
eth1 Link  encap:UNSPEC  HWaddr 80-65-00-12-7D-C2-3F-00-00-00-00-00-00-00-00
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
eth2 Link  encap:UNSPEC  HWaddr 00-02-3C-04-11-09-D2-BA-00-00-00-00-00-00-00
BROADCAST MULTICAST  MTU:1500  Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
lo Link  encap:Local Lookback
        inet addr:127.0.0.1  Mask:255.0.0.0
UP  LOOPBACK  RUNNING  MTU:16436  Metric:1
RX packets:60 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:13409 (13.0 Kb) TX bytes:13409 (13.0 Kb)</pre>


Da questo listato si pu� riconoscere nel dispositivo di rete <tt>eth0</tt>, quello attivo e funzionante, infatti nelle righe;
* ''nfs-utils''<br/>http://nfs.sf.net/ è la pagina principale del progetto nfs-utils.


<pre>eth0 Link  encap:Ethernet  HWaddr 00:12:3F:65:7D:C2
* ''udev''<br/>http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html è la directory da dove possono essere scaricate tutte le versioni di udev.
inet  addr:192.168.0.13  Bcast:192.168.0.255  Mask:255.255.255.0</pre>


Questo risultato dimostra che il dispositivo Ethernet si vede assegnato un indirizzo IP valido (<tt>inet</tt>).
* ''procfs''<br/>http://procps.sourceforge.net/ è la pagina principale del progetto procfs.


Ora, dopo che abbiamo individuato il dispositivo <tt>eth0</tt> e ci siamo accertati di volerlo abilitare nel nostro nuovo kernel, dobbiamo individuare quale driver lo controlla. Ci� si realizza con una semplice procedura, che � quella si seguire i link nel filesystem sysfs, basta digitare un comando di una sola riga:
* ''patchutils''<br/>http://cyberelk.net/tim/patchutils è la directory da dove possono essere scaricate tutte le versioni di patchutils.


<pre>$ basename `readlink /sys/class/net/eth0/device/driver/module`
* ''git''<br/>http://git.or.cz/ è il sito principale del progetto git.
e1000</pre>


Il risultato mostra che il modulo <tt>e1000</tt> controlla il dispositivo di rete <tt>eth0</tt>. Il comando ''basename'' racchiude in un'unica linea di comando i seguenti passaggi:
* ''ketchup''<br/>http://www.selenic.com/ketchup/ è la pagina principale del progetto ketchup.


: 1. Individua il symlink ''/sys/class/net/eth0/device'' contenuto all'interno della directory ''/sys/device/'', la quale contiene le informazioni relative al dispositivo che controlla ''eth0''. Fate attenzione al fatto che nelle nuove versioni del kernel la directory ''/sys/class/net/eth0'' potrebbe essere un symlink.  
* ''quilt''<br/>http://savannah.nongnu.org/projects/quilt è la pagina principale del progetto quilt.


: 2. All'interno della directory che descrive il dispositivo in sysfs, c'� un symlink che punta al driver relativo a questo dispositivo. Questo symlink � nominato ''driver'', pertanto si segue questo collegamento.
* ''distcc''<br/>http://distcc.samba.org/ è la pagina principale del progetto distcc.


: 3. All'interno della directory che descrive il driver in sysfs, c'� un symlink che punta al modulo che si trova all'interno del driver in oggetto. Questo symlink � chiamato <tt>module</tt>. Noi cerchiamo l'oggetto a cui punta questo symlink, per ottenerlo ci serviamo del comando ''readlink'', il quale produce un risultato simile a questo:
* ''ccache''<br/>http://ccache.samba.org/ è la pagina principale del progetto ccache.
:<pre>$ readlink /sys/class/net/eth0/device/driver/module </pre>
:<pre> ../../../../module/e1000</pre>


: 4. Dato che a noi interessa solo il nome del modulo e ci disinteressiamo del resto del risultato ottenuto con il comando ''readlink'', tenendo solo la parte pi a destra del risultato. Questo appunto ci che il comando ''basename'' realizza. Applicandolo direttamente all'intero percorso, questo comando ci ritorna quanto segue:
: <pre>$ basename ../../../../module/e1000</pre>
: <pre>e1000</pre>
Cos abbiamo inserito il lungo risultato del symlink, ottenuto da ''readlink'', quale parametro nel programma ''basemane'', permettendo cos l'intero processo di essere realizzato in una sola riga.
Ora che abbiamo identificato il nome del modulo, si dovrebbe trovare l'opzione della configurazione del kernel che lo controlla. Si pu cercare nei vari menu di configurazione dei dispositivi di rete oppure cercare nel codice sorgente del kernel stesso per essere sicuri di avere l'opzione giusta.
<pre>
$ cd ~/linux/linux-2.6.17.8
$ find -type f -name Makefile | xargs grep e1000
./drivers/net/Makefile:obj-$(CONFIG_E1000) += e1000/
./drivers/net/e1000/Makefile:obj-$(CONFIG_E1000) += e1000.o
./drivers/net/e1000/Makefile:e1000-objs := e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
</pre>
Si precisa che "e1000'', usato in questo esempio, deve essere sostituito con il nome del modulo che state analizzando.
La cosa che ci interessa nel risultato del precedente comando ''find'' sono le righe dove compaia il termine <tt>'''CONFIG_'''</tt>. Questa l'opzione di configurazione che il kernel deve aver attivato per poter compilare il modulo. Nell'esempio precedente l'opzione di configurazione che c'interessa pertanto <tt>CONFIG_E1000</tt>.
Adesso si dispone dell'informazione necessaria per poter configurare il kernel. Si esegue lo strumento menu di configurazione:
<pre>$ make menuconfig</pre>
Dopodich si prema il tasto / (slash) (che ha il compito di far partire una ricerca), e si digita l'opzione di configurazione, senza la parte di testo <tt>CONFIG_</tt>. Questo processo mostrato nella [[:Immagine:Config_search.png|figura 7-1]].
[[Immagine:Config_search.png|center|frame|''Figura 7-1. Ricerca in menuconfig.'']]
Il sistema di configurazione del kernel vi dir ora esattamente dove selezionare l'opzione per abilitare questo modulo. Vedi [[:Immagine:Config_search_found.png|figura 7-2]].
[[Immagine:Config_search_found.png|center|frame|''Figura 7-2. Risultato della ricerca in menuconfig.'']]
Il primo elemento nella schermata mostra l'opzione che stavate cercando. Le informazioni mostrate dalla schermata vi dicono che, per attivare il modulo <tt>E1000</tt> nel kernel,  la seguente opzione di configurazione deve essere abilitata:
  Device Drivers
      Network device support
      [*] Network device support
          Ethernet (1000 Mbit)
      [*] Intel(R) PRO/1000 Gigabit Ethernet support
Questo modo di procedere funziona per ogni tipo di dispositivo attivo nel kernel.
====Esempio: Un dispositivo USB====
Come secondo esempio, esaminiamo ora un convertitore USB-seriale che presente nel nostro sistema preso ad esempio. Attualmente il convertitore collegato alla porta ''/dev/ttyUSB0'', pertanto si deve prendere in esame la sezione tty del ''sysfs''.
<pre>$ ls /sys/class/tty/ | grep USB
ttyUSB0</pre>
Potete ora eseguire una ricerca di questo dispositivo nel ''sysfs'' allo scopo di trovare il modulo che lo gestisce, utilizzando la stessa procedura mostrata nella sezione precedente:
<pre>$ basename `readlink /sys/class/tty/ttyUSB0/device/driver/module`
pl2303</pre>
Dopodich, per poter individuare l'opzione di configurazione che si deve abilitare, si cerca nell'albero del codice sorgente del kernel:
<pre>$ cd ~/linux/linux-2.6.17.8
$ find -type f -name Makefile | xargs grep pl2303
./drivers/usb/serial/Makefile:obj-$(CONFIG_USB_SERIAL_PL2303) += pl2303.o</pre>
Si utilizzi lo strumento di configurazione del kernel, come indicato in [[:Immagine:Config_search_pl2303.png|figura 7-3]], per trovare l'opzione adeguata da abilitare relativa al settaggio dell'opzione CONFIG_USB_SERIAL_PL2303.
[[Immagine:Config_search_pl2303.png|center|frame|''Figura 7-3. Ricerca di USB_SERIAL_PL2303''.]]
Nel nostro caso il risultato mostrato nella [[:Immagine:Config_search_pl2303_found.png|figura 7-4]].
[[Immagine:Config_search_pl2303_found.png|center|frame|''Figura 7-4. Risultato della ricerca di USB_SERIAL_PL2303'']]
Ci mostra esattamente dove trovare l'opzione <tt>USB Profilic 2303 Single Port Serial Driver</tt> che necessaria alla corretta gestione di questo dispositivo.
====Riassunto: Alla scoperta del dispositivo====
Riassumendo, ecco i vari passaggi che servono per identificare il driver funzionante di un dispositivo ad esso collegato:
: 1. Trovate la corretta classe di dispositivi in ''sysfs'' relativa al dispositivo che ci interessa. I dispositivi di rete sono elencati in ''/sys/class/net'', mentre i dispositivi tty sono elencati in ''/sys/class/tty''. Gli altri vari dispositivi si trovano in altre sotto-directory di ''/sys/class'', a seconda del tipo.
: 2. Ricercate nell'albero di ''sysfs''  il nome del modulo che controlla il dispositivo in oggetto. Lo si trova in ''/sys/class/class_name/device_name/device/driver/module'', la ricerca agevolata se si utilizzano i comandi ''readlink'' e ''basename''.
:<pre>$ basename `readlink /sys/class/class_name/device_name/device/driver/module`</pre>
: 3. Ricercate nei file Makefile con ''find'' e ''grep'' le opzioni <tt>CONFIG_</tt> che abilitano il modulo
:<pre>$ find -type f -name Makefile | xargs grep ''module_name''</pre>
: 4. Ricercate l'opzione trovata nel sistema di configurazione del kernel, dopodich andate dove indicato dal menu per attivare il driver in oggetto.
====Lasciate che il kernel ci dica ci di cui abbiamo bisogno====
Dopo esserci infilati nel ''sysfs'' e aver seguito i sui symlinks per ricercare passo passo i nomi dei moduli, presentiamo un semplice script che far per noi tutto il lavoro in un modo leggermente diverso:
<pre>
#!/bin/bash
#
# find_all_modules.sh
#
for i in `find /sys/ -name modalias -exec cat {} \;`; do
    /sbin/modprobe --config /dev/null --show-depends $1 ;
done | rev | cut -f i -d '/' | rev | sort -u
</pre>
Si pu scaricare un file d'esempio, contenente questo script, dal sito web del libro, riportato nella sezione ''Come contattarci'' che si trova nella prefazione.
Questo script cerca nel ''sysfs'' tutti file chiamati ''modalias''. Il file ''modalias'' contiene gli alias dei moduli e comunica al comando ''modprobe'' quali moduli debbano essere caricati per ogni dispositivo. L'alias del modulo composto da una combinazione di: produttore del dispositivo, ID, tipo di classe ed altri identificativi univoci per il tipo di dispositivo in questione. Tutti i moduli del driver del kernel hanno una lista interna dei dispositivi che supportano, che generata automaticamente dalla lista dei dispositivi che il driver comunica al kernel di poter supportare. Il comando ''modprobe'' ricerca tutti i dispositivi nella lista di tutti i driver e cerca di trovare una corrispondenza confrontando l'alias. Se trova una corrispondenza, allora provvede al caricamento del modulo (questa procedura la stessa seguita dal caricamento automatico dei driver in Linux).
Lo script prevede l'arresto del programma ''modprobe'' prima di caricare il modulo, e visualizza a schermo solo le azioni che eseguirebbe. Questo ci d&agrave; una lista di tutti i moduli che sono necessari al controllo di tutti i dispositivi del sistema. Eseguendo una piccola pulizia della lista, ordinandola e selezionando i campi adeguati,
otteniamo il seguente risultato:
<pre>
$ find_all_modules.sh
8139cp.ko
8139too.koo
ehci-hcd.ko
fimware_vlass.ko
i2c-i801.ko
ieee80211.ko
ieee80211_crypt.ko
ipw2200.ko
mii.ko
mmc_core.ko
pcmcia_core.ko
rsrc_nonstatic.ko
sdhci.ko
snd-hda-codec.ko
snd-hda-intel.ko
snd-page-alloc.ko
snd-pmc.ko
snd-timer.ko
snd.ko
soundcore.ko
uhci-hcd.ko
usbcore.ko
yenta_socket.ko
</pre>
Questa la lista di tutti i moduli che sono necessari alla gestione dell'hardware della macchina.
Lo script mostrer probabilmente alcuni messaggi di errore che possono essere del tipo:
<pre>FATAL: Module pci:v00008086d00002592sv000010CFsd000012E0bc03sc00i00 not found.
FATAL: Module serio:ty01pr00id00ex00 not found.</pre>
Questo ci dice che non si trova un modulo che gestisce quel dispositivo. Questo non deve comunque interessare pi di tanto, poich alcuni dispositivi non hanno driver nel kernel che lavorino per loro.
==Determinare il modulo corretto partendo da zero==
Talvolta non c' la possibilit di avere un kernel funzionante su una macchina in modo da determinare quali moduli del kernel siano necessari per gestire l'hardware. Oppure si aggiunto del nuovo hardware al sistema e bisogna trovare le opzioni della configurazione necessarie a farlo funzionare correttamente. Questa sezione illustrer come determinare le opzioni di configurazione necessarie ad far funzionare l'hardware.
Il modo pi semplice per capire quale driver controlla un nuovo dispositivo quello di compilare come moduli tutti i driver di quel tipo disponibili nei sorgenti del kernel, e lasciare che il processo di avvio tramite ''udev'' associ il driver al dispositivo. Una volta fatto ci, si dovrebbe essere in grado di risalire al driver necessario seguendo i passi descritti precedentemente, ed infine ricompilare il kernel abilitando il solo driver necessario.
===Dispositivi PCI===
===Dispositivi USB===
===Root Filesystem===
====Controller di Disco====
===Un aiuto dallo script===




Riga 264: Riga 73:
----
----


[[Categoria:Kernel]]
[http://www.kernel.org/pub/linux/kernel/people/gregkh/lkn/lkn_pdf/appb.pdf ''Capitolo originale'']
 
[[Categoria:Documentazione tecnica]]
[[Categoria:Linux Kernel in a Nutshell]]

Versione attuale delle 13:15, 28 giu 2013

Linux Kernel in a Nutshell

Sommario

Parte I
Compilare il kernel
  1. Introduzione
  2. Requisiti
  3. Procurarsi i sorgenti
  4. Configurazione e compilazione
  5. Installazione e avvio
  6. Aggiornare il kernel
Parte II
Personalizzazioni principali
  1. Personalizzare un kernel
  2. Ricette per configurare un kernel
Parte III
Guide di riferimento per il kernel
  1. Guida di riferimento dei parametri di boot del kernel - parte1
  2. Guida di riferimento dei parametri di boot del kernel - parte2
  3. Guida di riferimento dei parametri di compilazione del kernel
  4. Guida di riferimento delle opzioni di configurazione del kernel - parte1
  5. Guida di riferimento delle opzioni di configurazione del kernel - parte2
Parte IV
Informazioni aggiuntive
  1. Programmi utili
  2. Bibliografia

Molte delle informazioni contenute in questo libro sono state estratte dalla documentazione del kernel e dal codice sorgente. La documentazione è infatti il miglior posto dove trovare informazioni e riferimenti su come compilare e installare il kernel ed è normalmente tenuta aggiornata a seguito di cambiamenti nella procedura di compilazione.

Libri

Sono disponibili molti ottimi libri relativi alla programmazione del kernel Linux, ma solo pochi di essi trattano la compilazione e installazione del kernel. Ecco un elenco di libri che ho trovato utili.

Libri generici su Linux

  • Ellen Siever, Aaron Weber, Stephen Figgins, Robert Love, e Arnold Robbins. Linux in a Nutshell (O’Reilly), 2005.
    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.
  • Yaghmour, Karim. Building Embedded Linux Systems (O’Reilly), 2003.
    Questo libro, sebben principalmente rivolto agli sviluppatori di sistemi Linux embedded, contiene un'ottima sezione relativa a come creare una toolchain e un kernel con compilazione incrociata. Oltre a questa sezione del libro, è consigliato anche in virtù di altre sezioni che forniscono interessanti informazioni per coloro che vogliono imparare come personalizzare il kernel e il resto del sistema.

Libri inerenti il kernel Linux

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 governa il kernel.

  • Jonathan Corbet, Alessandro Rubini, e Greg Kroah-Hartman. Linux Device Drivers (O’Reilly), 2005.
    Questo libro illustra come differenti device driver operano e fornisce parecchi esempi applicatici di driver funzionanti. È consigliato a chiunque vuole programmare driver per il kernel. È disponibile in rete gratuitamente a questo indirizzo: http://lwn.net/Kernel/LDD3/
  • Love, Robert. Linux Kernel Development (Novell Press Publishing), 2005.
    Questo libro copre quasi tutti gli aspetti relativi al kernel Linux, illustrando come tutto opera insieme. Ottimo punto di partenza per iniziare a capire e conoscere le diverse componenti del kernel.
  • Bovet, Daniel P. e Cesate, Marco. Understanding the Linux Kernel (O’Reilly), 2005.
    Questo libro si addentra negli aspetti relativi la progettazione e implementazione del nucleo del kernel Linux. Un ottimo riferimento per apprendere e capire gli algoritmi utilizzati nelle diverse porzioni del kernel. Fortemente consigliato a coloro che vogliono comprendere nel dettaglio come funziona il kernel.

Strumenti

In questo libro sono stati menzionati molti utili strumenti. Di seguito, presento un elenco dei siti dove è possibile reperire e scaricare tali strumenti.



This is an indipendent translation of the book Linux Kernel in a Nutshell by Greg Kroah-Hartman. This translation (like the original work) is available under the terms of Creative Commons Attribution-ShareAlike 2.5.


Capitolo originale