Modello del driver del dispositivo Linux

Modello del driver del dispositivo Linux

In generale, qualsiasi sistema operativo necessita di un software specifico per il dispositivo. Questo software comprende la funzionalità del dispositivo ed è un livello intermedio tra sistema operativo e hardware. Il driver del dispositivo è il termine utilizzato per questo software. In questo articolo, discuteremo di come Linux gestisce i dispositivi e i driver di dispositivi. In parole semplici, esploreremo la struttura del driver del dispositivo di Linux.

Descrizione

In genere, su qualsiasi scheda o piattaforma, sono presenti più dispositivi e questi dispositivi sono collegati tra loro da alcune linee fisiche o protocolli. Questi protocolli di connessione sono noti come autobus. Ci sono diversi protocolli di bus disponibili. Pochi esempi sono I2C, SPI, AHB, APB, PCI, ecc. Facciamo un esempio del dispositivo di memoria EEPROM. EEPROM è collegato al sistema dal bus i2c. La CPU utilizzerà il protocollo I2C per leggere/scrivere i dati di EEPROM. Dal lato della CPU, questa gestione del protocollo verrà eseguita dal controller del protocollo I2C. Il controller i2C sulla CPU funge da dispositivo principale. Eeprom funge da dispositivo slave. Tutti i dettagli di I2C sono disponibili nella specifica I2C.

Nei sistemi ARM basati su Linux, i dispositivi EEPROM sono popolati con l'aiuto dell'albero dei dispositivi. Definire l'EEPROM nell'albero del dispositivo è sufficiente per dichiarare il dispositivo nel sistema. Con questo dispositivo di inserzione dell'albero l'istanza del dispositivo verrà creato dal kernel Linux durante l'avvio. Quando si avvia Linux, analizza l'albero dei dispositivi e ha creato l'istanza dei dispositivi definiti nell'albero dei dispositivi.

Con questo dispositivo viene creato in Linux ma Linux non sarà in grado di comprendere il dispositivo. Per la comunicazione/operazioni del dispositivo, è necessario un software speciale specifico per il dispositivo. Questo sarà noto come driver del dispositivo per il dispositivo. Tornando all'esempio EEPROM, il driver del dispositivo EEPROM sarà necessario per leggere/scrivere i dati da EEPROM.

Per legare il driver del dispositivo al dispositivo specifico, è necessaria una stringa compatibile. La stringa compatibile viene utilizzata da Linux Kernel per sondare il driver specifico sul dispositivo durante l'avvio. Il kernel Linux fornisce anche la flessibilità che un driver di dispositivo può essere caricato in fase di esecuzione. L'unica condizione è che il driver non dovrebbe essere necessario per l'avvio della piattaforma. Il driver del dispositivo che viene aggiunto in seguito al kernel viene compilato come oggetti del kernel. Questi sono i file presenti come .ko. Il comando insmod viene utilizzato per aggiungere gli oggetti del kernel sul kernel in esecuzione.

Dopo che il driver del dispositivo è stato analizzato con il dispositivo, il dispositivo può essere utilizzato per le operazioni. Il dispositivo EEPROM può essere letto/scritto dopo che il driver EEPROM è stato inizializzato nel kernel Linux. Il driver EEPROM inizializza il dispositivo e fornisce la capacità al kernel Linux per leggere/scrivere EEPROM.

Facciamo un esempio del driver del dispositivo EEPROM come AT24, il codice sorgente per il dispositivo può essere trovato al collegamento: https: // github.com/torvalds/linux/blob/master/driver/misc/eeprom/at24.C

Questo driver supporta un numero molto ampio di dispositivi EEPROM come descritto nei commenti del driver Atmel AT24C o * Microchip 24LC, ecc.

Di seguito sono riportate le informazioni sull'albero del dispositivo da aggiungere per creare un'istanza del dispositivo:

eeprom@50
compatibile = "Atmel, 24c32";
reg = <0x50>;
Pagesize = <32>;

Questo dovrebbe essere aggiunto al nodo specifico del controller I2C, in cui questo dispositivo EEPROM è collegato.

Come possiamo vedere, c'è una stringa compatibile. Questa è le informazioni utilizzate da Linux Kernel per individuare il driver del dispositivo del dispositivo EEPROM.

Per ottenere le informazioni sui dispositivi e sui dispositivi presenti sul sistema Linux, le voci SYSFS sono il posto migliore.

Per ogni dispositivo e driver sul sistema, le voci SYSFS saranno create dal kernel. L'utente può fare riferimento a questi file sysfs per diagnosticare il sistema.

Se vediamo il contenuto della directory SYS in Linux Kernel:


/sys/bus: Tutti i bus presenti sul sistema sono elencati all'interno di questo.

Il bus i2c può anche essere visto. Mentre stavamo discutendo dell'esempio del dispositivo I2C. All'interno della directory del bus, abbiamo la directory di autobus I2C.

Per qualsiasi autobus nel SYSFS, avremo tutti i dispositivi e i conducenti presenti su quel bus. Vediamo il contenuto del bus i2c:

Se navighiamo ulteriormente i dispositivi e i driver directory, otterremo l'elenco completo di dispositivi e driver noti al kernel Linux.

All'interno dei dispositivi, possiamo vedere che ci sono più bus I2C presenti nel sistema. I2C-0, I2C-1, I2C-5, ecc., sono diversi bus i2c. 0-0018 e 0-001a sono i dispositivi slave su I2C-0. 1-0050 e 1-0068 sono i dispositivi slave i2c sul bus n. 1 i.e. i2c-1.

All'interno della directory del driver abbiamo l'elenco di tutti i driver di dispositivo slave i2c.

Tornando al nostro esempio di dispositivo EEPROM, 1-0050 è il dispositivo slave EEPROM. Se ci immergiamo ulteriormente nella directory 1-0050, vedremo qualcosa come di seguito:


Questo ci ha fornito le conoscenze sul driver che controlla questo dispositivo. Nell'istantanea, possiamo vedere il driver AT24 controlla l'EEPROM presente nel sistema. Questo è il driver collegato a questo dispositivo EEPROM.

Per accedere al dispositivo EEPROM dallo spazio utente, il driver ha creato il file "EEPROM" che può anche essere visto nell'istantanea.

Per leggere i dati EEPROM 8K e il dump nel file, il comando DD può essere utilizzato come di seguito:

dd if =/sys/bus/i2c/dispositivi/1-0050/eeprom di = eeprom_data.bin bs = 1k conteggio = 8

Come si può vedere dai registri che i byte 8k vengono letti dall'EEPROM e scritti su EEPROM_DATA.File bin. Questo file bin avrà i dati EEPROM. Il comando DD è il comando più popolare e comunemente usato in Linux World.

Proprio come questo dispositivo EEPROM, anche altri dispositivi I2C devono seguire le linee guida fornite da Linux Kernel. Altri dispositivi I2C potrebbero essere RTC, schermo di Toch, ecc. Nel complesso, questo framework del driver del dispositivo è applicabile anche ai dispositivi al di fuori dell'ambito I2C.

Può essere un dispositivo SPI o qualsiasi altro dispositivo. Ci sarà un'istanza del dispositivo da creare e un'altra istanza del driver. Sia il dispositivo che il driver saranno collegati/collegati tramite driver del bus. Questo è il framework driver di dispositivo generico in Linux.

Binding e non industriale del conducente

Il legame del driver con il dispositivo è il processo di associazione o collegamento del driver al dispositivo in grado di controllarlo o comprenderlo. L'incontro è il processo inverso, quando non si stacciamo il driver con il dispositivo.

Ci sono file sysfs presenti in tutti i driver. I nomi dei file sono vincolati e si slessano. Questi sono i file che possono essere utilizzati per vincola e si uniscono. Di seguito è riportata l'istantanea del driver EEPROM AT24:

Incluicazione del driver con dispositivo

Come possiamo vedere, l'istanza del dispositivo è presente all'interno di AT24. Ciò significa che il dispositivo è già collegato. Possiamo fare eco al nome del dispositivo per bloccare il driver dal dispositivo.

L'incontro del driver con il dispositivo può essere visto nell'istantanea.

Echo 1-0050>/sys/bus/i2c/driver/AT24/INSLID; è il comando che ha fatto l'indensazione. Dopo questo comando, il dispositivo non è presente. Quindi, il dispositivo non è collegato al driver ora.

Binding del driver con il dispositivo

Echo 1-0050>/sys/bus/i2c/driver/at24/bind; è il comando che esegue l'associazione del driver con il dispositivo.

Il primo comando LS mostra che i dettagli del dispositivo non sono presenti all'interno della directory AT24, il che significa che il dispositivo non è collegato a nessun driver. In secondo luogo, abbiamo emesso un comando per collegare il dispositivo con il driver. Di conseguenza, abbiamo visto che le informazioni sul dispositivo vengono popolate all'interno della directory del driver. Quindi, il driver viene collegato al dispositivo correttamente.

È possibile accedere al dispositivo solo dopo il corretto rilegatura del driver con il dispositivo.

Conclusione

Abbiamo discusso del framework del driver del dispositivo in Kernel Linux con un esempio di dispositivo EEPROM I2C. Abbiamo esplorato la creazione di dispositivi EEPROM nell'albero dei dispositivi e il collegamento del driver con il dispositivo. Alcune esplorazioni sono state eseguite sui file SYSFS, che fornisce le ottime informazioni diagnostiche su dispositivi e driver presenti nel kernel Linux. Abbiamo visto un esempio di accesso EEPROM con l'aiuto del comando DD. Abbiamo anche capito il framework generico che coinvolge dispositivi, conducenti e autobus. Finalmente, abbiamo anche fatto riferimento ai modi per legare e bloccare manualmente i conducenti e i dispositivi dallo spazio dell'utente.