Char Drivers¶
Dynamic Allocation of Major NumbersDynamic Allocation of Major Numbers¶
Non ho capito precisamente che ruolo hanno i Major/Minor Numbers ripetto al file identificativo creato con mknod.
Quello che ho capito e”:
Il
Majore” l’identificativo di un device, inteso come struttura collegata ad uno o piu” drivers specificiIl
Minorrappresenta l’istanza autonoma e singola del device indicato dallaMajor.Esempio
I devices di tipo schermo sono identificati dal Major Number
8, in questo caso il device schermo e” quella struttura gestita dai drivers:modulo_luminosita.komodulo_disegno.komodulo_disegno_alt.ko
questi moduli non hanno bisogno di creare device diversi perche” agiranno in modi diversi su una sezione della memoria strutturata nello stesso modo (modo che riflettera” gli attributi e caratteristiche specifiche di un display e parte della quale eventualmente sara” mappata ai pins di uno stesso device fisico).
Ogni istanza di tipo schermo (quindi in questo caso essendo una parte della
strucschermo mappata ad una serie di pins fisici, ogni display fisico) avra” associato un Minor Number.In questo l’utente ha 3 schermi fisici attaccati alle proprie periferiche, quindi avra” 3 regioni della memoria diffenti (con lo stesso layaut essendo lo stesso device) indicizzati dai numeri
0,1e3.
Quello che non mi torna in questa descrizione e” come funzionino i nodi nel fs associati ai devices.
Scull driver¶
In particolare ho installato una implementazione del driver scull, quello che dice il libro e” che per utilizzare i devices nello user space
e” necessario mapparli ad un inode nel filesystem. Per farlo utilizza il comando mknod. Inoltre mentre il libro specifica come ottenere il Major Number nello user space,
non specifica come ottenere il numero dei devices definiti dal driver. Mi sarei aspettato di trovare nella cartella /dev/char gli identificativi dei devices,
invece questa viene popolata quando dallo user space creo il nodo rispettivo.
Ho pensato quindi che questa potesse trattarsi di una scelta fatta per poter avere devices non accessibili e trasparenti allo user space (se per esempio questi
vengono utilizzati solamente dal kernel o da altri moduli). Questa mia intuzione pero” non spigherebbe pero” perche” e” possibile creare dei nodi non associati
ad alcun device (ho provato a lanciare il comando mknod scegliendo Minor e Major che non erano utilizzati da alcun modulo).
Infine questa teoria non spigherebbe neanche il perche” questi device nel filesystem (che rendono i dispositivi utilizzabili dall’utente) non vengano inizializzati direttamente nel driver.
read and write¶
Non ho capito molto bene la differenza tra gli indirizzi di memoria dell’utente e del kernel. Parla del fatto che questi indirizzi dell’utente siano paged e che siano mappati in modo differente sulla memoria fisica, immagino che faccia riferimento a come la memoria venga virtualizzata per i processi in user space.
Questo meccanismo di gestione della memoria non mi e” chiaro fino in fondo e vorrei approfondirlo perche” credo sia un punto nevralgico per capire bene la differenza tra il mondo accessibile all’utente e al kernel (e il corretto utilizzo dei puntatori e ai privilegi/flags associati ad ogni area di memoria nella scrittura di un modulo).