Dispositivi e Drivers

14 / 100

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)