LKN: Personalizzare un Kernel: differenze tra le versioni

rimosso tag <tt>
(nuova categoria)
(rimosso tag <tt>)
Riga 12: Riga 12:
===Dove si trova la configurazione del kernel?===
===Dove si trova la configurazione del kernel?===


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>.
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 <code>/usr/src/linux/</code>.


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


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:
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 <code>/proc</code>. Per verificare se questo è il vostro caso, digitate:


<pre>
<pre>
Riga 88: Riga 88:
RX bytes:13409 (13.0 Kb) TX bytes:13409 (13.0 Kb)</pre>
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;
Da questo listato si può riconoscere nel dispositivo di rete <code>eth0</code>, quello attivo e funzionante, infatti nelle righe;


<pre>eth0 Link  encap:Ethernet  HWaddr 00:12:3F:65:7D:C2
<pre>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</pre>
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>).
Questo risultato dimostra che il dispositivo Ethernet si vede assegnato un indirizzo IP valido (<code>inet</code>).


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:
Ora, dopo che abbiamo individuato il dispositivo <code>eth0</code> 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:


<pre>$ basename `readlink /sys/class/net/eth0/device/driver/module`
<pre>$ basename `readlink /sys/class/net/eth0/device/driver/module`
e1000</pre>
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:
Il risultato mostra che il modulo <code>e1000</code> controlla il dispositivo di rete <code>eth0</code>. Il comando ''basename'' racchiude in un'unica linea di comando i seguenti passaggi:


: 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.  
: 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.  
Riga 106: Riga 106:
: 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.
: 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.


: 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:
: 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 <code>module</code>. Noi cerchiamo l'oggetto a cui punta questo symlink, per ottenerlo ci serviamo del comando ''readlink'', il quale produce un risultato simile a questo:
:<pre>$ readlink /sys/class/net/eth0/device/driver/module </pre>
:<pre>$ readlink /sys/class/net/eth0/device/driver/module </pre>
:<pre> ../../../../module/e1000</pre>
:<pre> ../../../../module/e1000</pre>
Riga 128: Riga 128:
Si precisa che "e1000'', usato in questo esempio, deve essere sostituito con il nome del modulo che state analizzando.
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>.
La cosa che ci interessa nel risultato del precedente comando ''find'' sono le righe dove compaia il termine <code>'''CONFIG_'''</code>. 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 <code>CONFIG_E1000</code>.


Adesso si dispone dell'informazione necessaria per poter configurare il kernel. Si esegue lo strumento menu di configurazione:
Adesso si dispone dell'informazione necessaria per poter configurare il kernel. Si esegue lo strumento menu di configurazione:
Riga 134: Riga 134:
<pre>$ make menuconfig</pre>
<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]].
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 <code>CONFIG_</code>. Questo processo è mostrato nella [[:Immagine:Config_search.png|figura 7-1]].


[[Immagine:Config_search.png|center|frame|''Figura 7-1. Ricerca in menuconfig.'']]
[[Immagine:Config_search.png|center|frame|''Figura 7-1. Ricerca in menuconfig.'']]
Riga 142: Riga 142:
[[Immagine:Config_search_found.png|center|frame|''Figura 7-2. Risultato della ricerca in menuconfig.'']]
[[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:
Il primo elemento nella schermata mostra l'opzione che stavate cercando. Le informazioni mostrate dalla schermata vi dicono che, per attivare il modulo <code>E1000</code> nel kernel,  la seguente opzione di configurazione deve essere abilitata:


   Device Drivers
   Device Drivers
Riga 174: Riga 174:
[[Immagine:Config_search_pl2303_found.png|center|frame|''Figura 7-4. Risultato della ricerca di USB_SERIAL_PL2303'']]
[[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.
Ciò mostra esattamente dove trovare l'opzione <code>USB Profilic 2303 Single Port Serial Driver</code> che è necessaria alla corretta gestione di questo dispositivo.


====Riassunto: Alla scoperta del dispositivo====
====Riassunto: Alla scoperta del dispositivo====
Riga 182: Riga 182:
: 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''.
: 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>
:<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
: 3. Ricercate nei file Makefile con ''find'' e ''grep'' le opzioni <code>CONFIG_</code> che abilitano il modulo
:<pre>$ find -type f -name Makefile | xargs grep ''module_name''</pre>
:<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.
: 4. Ricercate l'opzione trovata nel sistema di configurazione del kernel, dopodiché andate dove indicato dal menu per attivare il driver in oggetto.
Riga 271: Riga 271:
{{Box|Nota:|Potreste anche provare a cercare in tutta la configurazione del kernel un dispositivo che corrisponde alla stringa mostrata sopra (un dispositivo della Realtek Semiconductors con nome prodotto RTL-8139/8139C/8139C+), ma questo non funziona sempre. Per questo motivo useremo la via lunga in questo capitolo.}}
{{Box|Nota:|Potreste anche provare a cercare in tutta la configurazione del kernel un dispositivo che corrisponde alla stringa mostrata sopra (un dispositivo della Realtek Semiconductors con nome prodotto RTL-8139/8139C/8139C+), ma questo non funziona sempre. Per questo motivo useremo la via lunga in questo capitolo.}}


::[[Immagine:Warning_65x68.jpg|left]] Quasi tutte le distribuzioni mettono il programma <tt>lspci</tt> in <tt>/usr/sbin/</tt>, ma alcune lo mettono in altri percorsi. Per trovare in quale posizione è stato messo digitare:
::[[Immagine:Warning_65x68.jpg|left]] Quasi tutte le distribuzioni mettono il programma <code>lspci</code> in <code>/usr/sbin/</code>, ma alcune lo mettono in altri percorsi. Per trovare in quale posizione è stato messo digitare:


::<tt>$ '''which lspci'''</tt>
::<code>$ '''which lspci'''</code>
::<tt>/usr/sbin/lspci</tt>
::<code>/usr/sbin/lspci</code>


Se state usando una distribuzione che mette ''lspci'' in una altra posizione usate il percorso corretto per il vostro caso negli esempi seguenti.
Se state usando una distribuzione che mette ''lspci'' in una altra posizione usate il percorso corretto per il vostro caso negli esempi seguenti.


Le primi bit d'informazione che l'output di ''lspci'' ci mostra sono l'ID del bus PCI per questo dispositivo, <tt>06:04.0</tt>. Questo è il valore che useremo quando guarderemo nel ''sysfs'' per trovare più informazioni riguardo questo dispositivo.
Le primi bit d'informazione che l'output di ''lspci'' ci mostra sono l'ID del bus PCI per questo dispositivo, <code>06:04.0</code>. Questo è il valore che useremo quando guarderemo nel ''sysfs'' per trovare più informazioni riguardo questo dispositivo.


Andiamo in ''sysfs'' dove tutti i dispositivi PCI sono elencati, e guardiamo i loro nomi:
Andiamo in ''sysfs'' dove tutti i dispositivi PCI sono elencati, e guardiamo i loro nomi:
Riga 291: Riga 291:
</pre>
</pre>


Il kernel numera i dispositivi PCI con un <tt>0000:</tt> iniziale che non viene mostrato nell'output di ''lspci''. Dunque, aggiungiamo un <tt>0000:</tt> al numero datoci da ''lspci'' e entriamo in quella directory:
Il kernel numera i dispositivi PCI con un <code>0000:</code> iniziale che non viene mostrato nell'output di ''lspci''. Dunque, aggiungiamo un <code>0000:</code> al numero datoci da ''lspci'' e entriamo in quella directory:


   $ cd 0000:06:04.0
   $ cd 0000:06:04.0
6 999

contributi