101.3 Dispositivi e Drivers
Bisogna subito fare una differenza tra dispositivi Hot Plug e Cold Plug
I dispositivi Cold Plug sono dispositivi collegabili e scollegabili solo a computer spento a differeenza dei dispositivi Hot Plug.
I dispositivi Hot Plug, sono ad esempio dispositivi USB,Firewire, e comunque sono dispositivi collegabili e scollegabili anche a computer acceso.
In linux e’ possibile vedere un elenco dei dispositivi pci collegati digitando:
$ lspci
Si otterra’ un file ad elenco dove potremo leggere l’indirizzo pci a cui e’ collegato e il nome della periferica.
E’ possibile anche vedere una struttura ad albero digitando :
$ lspci -t
Otterremo gli indirizzi di tutte le periferiche pci, e il risultato che si ottine ci aiuta a capire che cosa e’collegato e dove. Dal kernel 2.6 i device vengono creati dinamicamente. Per capire questo bisogna considerare la cartella
/dev/sd?
Che sta a indicare la cartella che possiede tutti i dispositivi che iniziano con sd e che possiedono un solo carattere successivamente.
Come risultato della ricerca otterremo
/dev/sda
Infatti collegato c’e’ solo un disco e questo perche’ nel kernel 2.6 UDEV crea automaticamente i devices in /DEV man mano che vengono collegati
Quindi se non e’ collegato un device, non lo troveremo sotto /dev a differenza delle versioni precedenti che necessitavano avere tutte le voci in /dev gia’ presenti. Pertanto anche se non erano collegate potevamo osservare un interminabile elenco di devices anche se poi erano vuoti
Con udev vengono dinamicamente create e rimosse invece periferiche aggiuntive e i loro relativi drrivers.
Se ad esmpio collegassimo una chiavetta USB potremmo notare che ci sara’ una nuova cartella , avremo infatti
/dev/sda e /dev sdb
Una volta che scolleghero’ la chiavetta il file /dev/sdb scomparira’
Indipèendentemente quindi che siano devices HOTPLUG o COLDPLUG questi hanno sempre di un driver per poter essere utilizzati.
Con il comando
$ lsmod
Si potranno elencare tutti i drive caricati, in memoria.
Se si volesse filtrare o isolare la ricerca bastera’ digitare
$ lsmod |grep pcs*
Per svolgere una ricerca mirata e selettiva.
Per rimuovere un driver dalla memoria si dovra’ digitare :
rmmod < nome del modulo >
Ad esempio
su rmmod pcspkr per rimuovere i driver degli speaker.
Digitando lsmod | grep pcs?
osserveremo che tali drivers non saranno piu’ presenti nel listato di risposta. Viceversa a rmmod e insmod
Quindi insmod pcspkr ma in tal caso insmod richiede il full path ovvero il percorso completo nel file system per il modulo che si va a caricare.
Ma dove lo carichiamo, come possiamo rintracciare l’esatta collocazione di un driver nel file system ?
Tutti i moduli si trovano in lib/ modules quindi:
ls /lib/modules
verranno elencate due directories o anche di piu’ in base al numero di kernel installati.Bisogna entrare nella versione del kernel attuale.
Come ?
Con uname -r
Potremmo anche cercarlo con il comando find : cosi –
find /lib/modules $(uname -r)/ -iname “pcspkr.ko*”
Sara’ visualizzato il percorso completo da copiare e incollare a insmod successivamente.
Esiste anche una alternativa piu’ semplice che e’ modprobe.
Digitando modprobe -r pcspkr ( per rimuovere )
Digitando modprobe pcspkr ( per installare )
Supponiamo che si abbia la necessita’ di cambiare la configurazione di un modulo ad esempio configurare gli interrupts o l’indirizzo DMA da usare con un certo modulo
Questo e’ possibile farlo all’interno di modprobe.conf o in un singolo file con il nome del modulo dentro a etc/modprobe.d
Sempre parlando di Hardware, il nostro user space e le normali applicazioni senza privilegi di root possono accedere all’hardware indirettamente tramite il sysfs filesystem montato in e-sys
vedi fig 1
mount grep | sys
Entrando all’interno( cd /sys/ si potra’ notare l’elenco dei devices suddivisi per categoria.Possiamo vedere che e’ un filesystem di tipo sysfs montato dentro sys
Cio significa che se entriamo all’interno con
cd /sys/ls
Possiamo vedere che abbiamo device suddivisi per categoria,
vedi fig 2
Con cat size si puo vedere la grandezza di un device
Con cat stat si puo vedere caratteristiche di capacita’ e lo status delle allocazioni di memoria di un device
Con cat ro si interroga lo status del device se read only oppure no ( se eseguo cat /ro vedo che e’ 0
– cio’ significa che il dispositivo non e’ in sola lettura, a differenza se avessi trovato 1)