Un driver di dispositivo in Linux è un programma / processo o è solo una libreria?


23

È un driver di dispositivo un programma che viene eseguito da solo o è solo una libreria (un gruppo di funzioni) che viene caricato in memoria e che i programmi possono chiamare una delle sue funzioni (quindi non è in esecuzione da solo).

E se è un programma, ha un ID processo, quindi posso ad esempio terminare un driver di dispositivo nello stesso modo in cui posso terminare qualsiasi altro processo?


1
Puoi "scaricare" un driver con rmmod, ma solo se non viene utilizzato.
pjc50,

Risposte:


35

Su Linux, molti driver di dispositivo fanno parte del kernel, non librerie o processi. I programmi interagiscono con questi file utilizzando dispositivo (tipicamente a /dev) e diverse chiamate di sistema, come open, read, write, ioctl...

Ci sono comunque delle eccezioni. Alcuni driver di dispositivo utilizzano una combinazione di stub di driver del kernel e librerie di spazio utente ( ad es. Tramite UIO). Altri sono implementati interamente nello spazio utente, di solito sopra un'interfaccia di bit-banging (UART o GPIO). In entrambi i casi, sono generalmente in corso, quindi non vedrai un processo separato, ma solo il processo che utilizza il dispositivo.

Per "terminare" un driver di dispositivo, dovresti interrompere tutti i processi che lo utilizzano, quindi rimuovere i suoi moduli del kernel (supponendo che sia costruito come moduli) e, facoltativamente, tutti gli altri moduli che utilizza e che non sono più necessari. Puoi elencare i moduli sul tuo sistema usando lsmode scaricarli usando rmmodo modprobe -r, entrambi funzioneranno solo se lsmodindicano che non hanno utenti.


2
Se sei abbastanza coraggioso e il tuo kernel è stato compilato CONFIG_MODULE_FORCE_UNLOAD, puoi provare rmmod -fa forzare lo scaricamento dei moduli che sono in uso / non progettati per essere rimossi / ecc. Questo, oltre a comportare semplicemente un kernel in uno stato inaffidabile, anche contaminare il kernel.
Ruslan,

9

Devi prima definire cos'è un driver. Lo definirò come un programma o una subroutine che controlla un dispositivo (come la videocamera) o un sottosistema (come un file system). Se lo fa direttamente tramite il programma di sistema o tramite i server del kernel o i processi di land-user non dovrebbe in sostanza occuparsi di questa domanda essenzialmente semantica.

In alcuni casi Linux fornisce solo un protocollo generico scritto nel software in cui l'attuale "driver" è un albero di dispositivi. Questa è una configurazione di parametri hardware e quale software utilizzare per creare un driver.

In generale, le interfacce e i protocolli del driver sono implementati usando moduli del kernel che sono caricati secondo necessità definiti da alberi dei dispositivi o regole udev. Un modulo del kernel non è nel senso più stretto un processo o una libreria.

Una libreria è solo un insieme statico di codice che può essere caricato in un determinato processo. I moderni sistemi operativi caricano queste librerie nella memoria condivisa. Un processo può a sua volta collegarsi a qualsiasi numero di librerie condivise.

Un processo è un programma in esecuzione in cui il programma di sistema o il kernel ha allocato risorse come memoria di sistema e tempo della CPU. I moduli del kernel possono o meno seguire da soli questo schema ma, a prescindere, non sono considerati processi defacto in Linux.

Quindi, per rispondere alla tua domanda, un driver non deve essere processato ma può esserlo. Mentre il codice può esistere in una libreria, il driver viene comunque caricato nella memoria tramite un programma, sia esso il kernel sotto forma di moduli kernel o processi userland.

Diventa più un argomento semantico quando si considera quale sia la totalità di un driver in realtà. Si potrebbe dire che un driver è sempre un programma, ma a volte non è come nel caso degli alberi dei dispositivi, ma potrebbe effettivamente essere un processo utente, un file dell'albero dei dispositivi, regole udev e un modulo del kernel in cui il processo e il modulo usano entrambe le librerie per comporre la logica di un driver.


0

Un driver di dispositivo Linux, è essenzialmente una libreria spazio kernel . Le sue chiamate vengono avviate principalmente dai driver di livello superiore o dai processi dello spazio utente che lo utilizzano.

Ci sono solo alcune eccezioni da questo:

  • I thread del kernel possono essere avviati / arrestati anche dai driver, questi sono essenzialmente processi senza una parte dello spazio utente.
  • I gestori di interrupt vengono avviati dall'hardware e non dai processi dello spazio utente.

In altri sistemi, come in GNU Hurd, i driver sono essenzialmente demoni con cui i processi possono interagire. In Linux, i driver sono librerie. Entrambi i concetti presentano tuttavia vantaggi e svantaggi.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.