Una porta seriale ha un driver di periferica?

0

Sto imparando i driver di periferica e, in base a ciò che so finora, se l'applicazione vuole comunicare con alcuni dispositivi, non può comunicare direttamente con la porta a cui è collegato il dispositivo (ad esempio: una porta seriale) . Piuttosto, dovresti creare un driver di dispositivo che è autorizzato a comunicare con la porta seriale, e quindi l'applicazione comunicherà con il driver di dispositivo.

Ora la mia domanda è: quando il driver del dispositivo sta inviando i dati alla porta seriale, invia i dati direttamente alla porta seriale, oppure la stessa porta seriale ha un driver di periferica, e per inviare i dati alla porta seriale , il tuo driver di dispositivo deve inviare dati al driver di dispositivo per la porta seriale.

La citazione da questa domanda è ciò che mi ha fatto pensare a questo:

The driver for the serial port on your computer instructs your OS how to talk to the specialized hardware.

    
posta John 28.05.2017 - 02:09
fonte

2 risposte

3

In un moderno sistema operativo, i driver di dispositivo hanno due scopi:

  • Sono un livello di astrazione
  • Sposta le operazioni potenzialmente pericolose dal codice utente e nei servizi di sistema attendibili

È importante ricordare questi due scopi quando si considera ciò che è e non è necessario o consigliabile quando si considera l'utilizzo dei driver di periferica. Ora, analizzando la tua domanda in dettagli:

if your application wants to communicate with some device, it cannot communicate directly with the port that your device is connected to

destro. Questo è dovuto alla parte "Operazioni potenzialmente pericolose". Comunicare con una porta seriale, a seconda dell'hardware esatto su cui stai lavorando, richiede:

  • inviando o richiedendo dati sui segnali "IO" del processore o scrivendo o leggendo da specifiche posizioni di memoria associate alla porta
  • intercettare i segnali di interruzione dalla porta per farti sapere quando i dati sono disponibili, quando il buffer interno è vuoto, ecc.

In genere, queste risorse sono condivise tra più porte, quindi se il tuo processo potrebbe eseguire una di queste operazioni direttamente, sarebbe in grado di interferire con qualsiasi altro processo che potrebbe utilizzare altre porte. Pertanto, è richiesto un intermediario che si accerti che esegua solo azioni che non causino problemi con altre parti del sistema. Il driver del dispositivo è un tale intermediario.

But rather, you should create a device driver that is allowed to communicate with the serial port, and then your application will communicate with the device driver.

Di solito non è necessario. I sistemi operativi sono forniti con driver per porta seriale, quindi non è necessario crearne uno da soli. In generale, le applicazioni utente non dovrebbero mai avere bisogno di fornire driver di periferica: i driver di periferica sono una funzione di sistema associata all'hardware su cui eseguono, non alle applicazioni che vogliono usarlo. Questo si riferisce allo scopo del "livello di astrazione": esistono diversi tipi di porta seriale e il driver del dispositivo sa in dettaglio come parlare al tipo effettivo installato sul computer. La tua applicazione ha solo bisogno di sapere come parlare con il driver del dispositivo, e il tuo sistema operativo fornisce un'interfaccia standard che lo consente senza dover sapere quale driver esatto è in uso.

Now my question is: when the device driver is sending data to the serial port, does it send the data directly to the serial port, or does the serial port itself have a device driver, and to send data to the serial port, your device driver have to send data to the device driver for the serial port.

Di solito non è necessario. Hai solo bisogno di un driver di dispositivo per raggiungere entrambi gli obiettivi:

  • Il driver di periferica è installato con il sistema in modo che possa variare a seconda dell'hardware disponibile, fornendo l'astrazione
  • Il driver di periferica fa parte del sistema operativo ed è considerato affidabile dal kernel che non consente alle applicazioni di interferire con le operazioni reciproche

Detto questo, c'è un caso che è simile alla situazione che descrivi, dove potresti voler avere un driver di dispositivo specifico dell'applicazione che invia dati al driver di dispositivo specifico dell'hardware. Cioè se hai un dispositivo che ti colleghi al computer tramite una porta seriale, ma quale vuoi che l'applicazione consideri logicamente come separato dalla porta seriale - forse perché potresti voler essere in grado per produrre una gamma di dispositivi che hanno lo stesso comportamento, ma forse c'è una versione di porta seriale, una versione USB, una versione di porta parallela, ecc. In tal caso, potrebbe essere utile creare un secondo driver che fornisca un secondo livello di astrazione ( in questo caso astrarre i dettagli di come il dispositivo esterno è collegato piuttosto che il modo in cui la porta a cui è connesso funziona). Un esempio di questo (ora un po 'relegato alla storia, per fortuna) è il modo in cui si è stati in grado di ottenere mouse collegati tramite porte seriali. Avrebbero un driver che implementava i protocolli standard del mouse e che comunicava con il driver della porta seriale per comunicare effettivamente.

    
risposta data 28.05.2017 - 05:12
fonte
0

La tua domanda è formulata in modo un po 'confuso, probabilmente perché non la capisci abbastanza, ma non c'è una cosa come un driver nell'hardware, se è quello che stavi cercando di chiedere. Tuttavia, in particolare sui sistemi operativi desktop, i driver di periferica sono generalmente scritti a strati. Lo strato inferiore funziona solo su uno specifico chip o famiglia di chip compatibili, lo strato successivo su tutti i chip di un produttore, il livello successivo su RS-232, il livello successivo su tutti i dispositivi di carattere.

Quindi, quando si ha una lingua che utilizza una macchina virtuale multipiattaforma, avrà il proprio livello di driver seriali, e talvolta quando le persone non amano l'API predefinita fornita dal driver, creeranno uno strato spazio utente avanzato su che che può essere definito un driver.

Quindi il termine driver è un po 'sovraccarico e dipendente dal contesto. Tutte astraggono le differenze in diverse porte seriali, ma senza conoscere il contesto, potresti parlare di qualcosa che imposta letteralmente le tensioni sui fili o ti dà solo qualcosa di meglio di ciò che javax.comm fornisce.

    
risposta data 28.05.2017 - 05:19
fonte

Leggi altre domande sui tag