Device File System


... [ Seminar Linux und Apache ] ... [ Thema Gerätetreiber unter Linux 2.4 ] ... [ Literaturverzeichnis ] ...

DevFS

Das Device File System (DevFS), ein virtual file system, ist ein neues Feature unter Linux 2.4, und gleichzeitig eines der meist diskutierten. Es wirkt sich extrem auf die Art und Weise aus, wie Linux Geräte behandelt, auch wenn es noch optional ist.
Es ersetzt das alte statische /dev-Verzeichnis. Wenn das DevFS aktiviert wird, hat es zwei grosse Effekte auf die Interaktion mit Hardware und anderen devices.
Der offensichtliche Unterschied ist der, dass fast alle 'Standard'gerätenamen sich geändert haben. Jetzt werden nicht mehr alle Geräte in das Root-Verzeichnis von dev/ gepackt, sondern es gibt viele Verzeichnisse, die den Controllern oder generellen Gruppierungen von Platten und anderen Geräten entsprechen.
Beispiel: /dev/hda wird zu /dev/discs/disc0
Dadurch wird der Namensraum für Geräte erheblich erweitert. Außerdem erleichtert diese Maßnahme die Integration von USB- und ähnlichen Geräten.
Der zweite Unterschied betrifft die Geräteknoten. Sie werden nicht mehr durch den User erzeugt und auf einer lokalen Platte gespeichert, sondern von den Treibern selbst erzeugt, wenn der Treiber geladen wird.
Das dev-Verzeichnis wirkt dadurch 'aufgeräumter', weil nur noch die Geräte im Verzeichnis zu finden sind, deren Treiber tatsächlich im Kernel geladen sind, und Linux ist in der Lage, ein root-Filesystem zu benutzen, das nicht die komplette UNIX-Semantik verstehen muß.
So löst sich auch das Problem der knappen Major- und Minor-Nummern, weil sich die Gerätetreiber beim DevFS mit Namen registrieren, so dass eine eindeutige Zuordnung gewährleistet ist.
Damit die 'alten' Namen weiter funktionieren, sollte ein zusätzlicher Daemon, devfsd, benutzt werden.

Der Gerätetreiber kann Gerätenamen, Besitzer und Berechtigungsbits festlegen. User-Programme können die letzten zwei ändern, aber nicht den Namen.

    #include <linux/devfs_fs_kernel.h>
    devfs_handle_t devfs_mk_dir (devfs_handle_t dir, const char *name,void *info);
    devfs_handle_t devfs_register (devfs_handle_t dir, const char *name, unsigned int flags,
                   unsigned int major,unsigned int minor, umode_t mode,void *ops,void *info);
    void devfs_unregister (devfs_handle_t de);
Zum Ent-/Registrieren gibt es die obigen Funktionen, deren Parameter folgendermassen zu deuten sind:
Die Flags werden in <linux/devfs_fs_kernel.h> gut beschrieben.


... [ Seminar Linux und Apache] ... [ Thema Gerätetreiber unter Linux 2.4] ... [ nach oben ] ... [ Literaturverzeichnis ] ...