GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:quando utilizzare /dev e /sys per la comunicazione nel kernel dello spazio utente?

Sto appena entrando nello sviluppo di driver Linux e ho una domanda concettuale, che penso aiuterà anche altri nuovi arrivati ​​nello sviluppo del kernel.

Sto leggendo il libro Linux Device Drivers e ho completato fino al cap. 3 del libro. Fino ad ora, l'ho visto emettendo open , close e altri comandi ai file in /dev cartella, lo spazio utente può accedere alle funzioni del kernel.

Un altro metodo per condividere il controllo è tramite i file in /sys , dove leggere o scrivere da sys i file possono comunicare con il driver.

Volevo sapere quali sarebbero i casi d'uso per ciascun metodo? Sono 2 approcci allo stesso compito? Uno ha dei limiti rispetto ad un altro? Qualcuno può condividere esempi pratici in cui uno potrebbe essere utile rispetto all'altro?

Ho letto le altre domande qui e spiegano dev e sys . Anche se questo è utile, volevo avere una conoscenza un po' più approfondita su come entrambi differiscono e dovrebbero essere usati.

Risposta accettata:

Molto approssimativamente:

/dev contiene nodi dispositivo, che nei precedenti sistemi Unix era l'unico modo per interagire con il kernel. Ne esistono di due tipi, blocco dispositivi e personaggio dispositivi. L'API corrispondente è orientata a qualcosa che consentirà l'I/O basato su blocchi (qualche tipo di disco) o l'I/O basato su caratteri (ad es. una porta seriale).

/sys (e /proc ) sono stati aggiunti in seguito, forse ispirati al sistema operativo Plan 9. Forniscono sottostrutture di directory complete e le voci di file in queste sottostrutture contengono testo che descrive lo stato interno del modulo del kernel durante la lettura o, quando viene scritto, imposta lo stato interno.

Quindi un'applicazione tipica sarebbe:

Vuoi scrivere un driver del kernel per un qualche tipo di dispositivo di archiviazione? Usa un /dev node per accedere al dispositivo stesso e /sys (o /proc ) voci per ottimizzare la modalità di accesso allo spazio di archiviazione.


Linux
  1. Quando usare /dev/random vs /dev/urandom?

  2. Come mappare il dispositivo /dev/sdX e /dev/mapper/mpathY dal dispositivo /dev/dm-Z

  3. Quando devo usare #!/bin/bash e quando #!/bin/sh?

  4. Come Linux usa /dev/tty e /dev/tty0

  5. echo o print /dev/stdin /dev/stdout /dev/stderr

Come posso modificare la quantità e la dimensione dei ramdisk di Linux (/dev/ram0 - /dev/ram15)?

Linux:differenza tra /dev/console , /dev/tty e /dev/tty0

kernel:disabilitare /dev/kmem e /dev/mem

È sbagliato collegare /dev/random a /dev/urandom su Linux?

I siti web dovrebbero vivere in /var/ o /usr/ in base all'utilizzo consigliato?

Differenze tra /dev/sda e /dev/sda1