Discussioni utente:NickName: differenze tra le versioni
Nessun oggetto della modifica |
|||
(7 versioni intermedie di uno stesso utente non sono mostrate) | |||
Riga 1: | Riga 1: | ||
Dopo che ci siamo infilati attraverso tutti i punti riguardanti gli ''sysfs'' e seguendo i symlinks ai nomi del modulo, ora riportiamo uno script molto semplice che farà tutto quel lavoro, in un modo differente: | |||
<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 web site 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 sono abbinati, e pertanto attivati, ai vari dispositivi. 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 ''modprobe'' ricerca tutti i driver nella lista dei dispositivi e cerca di trovare i riscontri con gli alias che questa lista ha. Se ha un riscontro, allora provvede al caricamento del modulo (questa procedura è come la funzionalità di caricamento automatico dei driver lavora in Linux). | |||
Lo script prevede l'arresto del programma ''modprobe'' prima di caricare il modulo, e riporta in display solo le azioni che eseguirebbe. Questo ci da una lista di tutti i moduli che sono utilizzati nel controllo di tutti i dispositivi del sistema. Eseguendo una piccola pulizia della lista, ordinandola e sistemando i campi adeguati, ci da un risultato come | |||
questo: | |||
<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 scritto potrà egualmente ritornare 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 il dispositivo. Questo non deve comunque interessare più di tanto, poiché alcuni dispositivi non hanno driver nel kernel che lavorino per loro. |
Versione attuale delle 17:14, 12 feb 2007
Dopo che ci siamo infilati attraverso tutti i punti riguardanti gli sysfs e seguendo i symlinks ai nomi del modulo, ora riportiamo uno script molto semplice che farà tutto quel lavoro, in un modo differente:
#!/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
Si può scaricare un file d'esempio, contenente questo script, dal web site 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 sono abbinati, e pertanto attivati, ai vari dispositivi. 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 modprobe ricerca tutti i driver nella lista dei dispositivi e cerca di trovare i riscontri con gli alias che questa lista ha. Se ha un riscontro, allora provvede al caricamento del modulo (questa procedura è come la funzionalità di caricamento automatico dei driver lavora in Linux).
Lo script prevede l'arresto del programma modprobe prima di caricare il modulo, e riporta in display solo le azioni che eseguirebbe. Questo ci da una lista di tutti i moduli che sono utilizzati nel controllo di tutti i dispositivi del sistema. Eseguendo una piccola pulizia della lista, ordinandola e sistemando i campi adeguati, ci da un risultato come questo:
$ 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
Questa è la lista di tutti i moduli che sono necessari alla gestione dell'hardware della macchina.
Lo scritto potrà egualmente ritornare alcuni messaggi di errore che possono essere del tipo:
FATAL: Module pci:v00008086d00002592sv000010CFsd000012E0bc03sc00i00 not found. FATAL: Module serio:ty01pr00id00ex00 not found.
Questo ci dice che non si trova un modulo che gestisce il dispositivo. Questo non deve comunque interessare più di tanto, poiché alcuni dispositivi non hanno driver nel kernel che lavorino per loro.