2010-07-14 12 views
5

Ho bisogno di scrivere un modulo del kernel che non sia un driver di periferica. Quel modulo comunicherà con alcuni processi dello spazio utente. Siccome non voglio usare ioctl(), mi rimane la possibilità di creare un file nella directory/proc o creare un file di dispositivo nella directory/dev.Quando utilizzare/proc e when/dev

Domanda: Come faccio a decidere tra/proc e/dev. È solo una sentenza o ci sono accordi non scritti sull'uso di questi due.

+0

Come sarnold indica che gli oggetti rappresentati in/dev/non devono essere " veri "dispositivi. Se il tuo driver espone un'interfaccia di tipo POSIX (aperta/lettura/scrittura) non c'è motivo per non usarla. Che tipo di comunicazione hai intenzione di avere tra utente e spazio del kernel? – stsquad

+0

Una parte del nostro software fa troppe chiamate di sistema che sta influenzando le prestazioni del sistema. Per evitare l'onere di queste chiamate, abbiamo intenzione di spostarlo nello spazio del kernel. In sostanza, la comunicazione tra il kernel e lo spazio utente comporterà trasferimenti di dati di grandi dimensioni. Apprezzerei molto se qualcuno potesse suggerire qualsiasi altra tecnica per questo problema. – binW

+1

È improbabile che le chiamate di sistema siano significativamente più veloci dallo spazio del kernel, almeno non abbastanza da superare il costo aggiuntivo della copia di grandi quantità di dati da e verso lo spazio del kernel. Detto questo, indagare su un file di dispositivo di carattere che implementa 'mmap'. – caf

risposta

6

Avrete molte difficoltà a ottenere una nuova interfaccia aggiunta in/proc /. Gli sviluppatori del kernel sono scontenti del fatto che sia diventato una discarica di interfacce varie e, a meno che non si stia modificando qualcosa sui processi tramite/proc/pid /, penso che si avranno dei problemi a convincere la comunità del kernel ad accettarlo.

Un file di dispositivo in/dev/può essere accettabile, anche per i moduli che non sono realmente driver di periferica. (ad esempio,/dev/kvm,/dev/pts,/dev/ecryptfs,/dev/fuse,/dev/kmsg,/dev/ptmx, ecc.) Tuttavia, i file di dispositivo sono troppo spesso facili da manipolare con ioctl (), e penso che tu abbia ragione di evitarlo se puoi.

L'attuale tendenza nelle cerchie del kernel è sysfs o filesystem personalizzati. L'approccio sysfs si basa sulla semantica a valore singolo per file, destinata a essere manipolata con echo e cat. È meraviglioso per gli utenti se funziona per te. I filesystem personalizzati consentono di scrivere interfacce binario specifiche e fs/libfs.c dovrebbe aiutare a scrivere il proprio filesystem in base alle proprie esigenze. (Non conosco nessuno che abbia usato i configfs, ma ho sempre pensato che fosse ordinato. Forse sarebbe adatto al tuo modulo?)