Kapitel 5 Devices – eine einfache Verbindung zur Hardware
Damit auch einfach autorisierte Prozesse Zugriff auf die Hardware-Komponenten des Systems haben, können die Devices (Gerätedateien) verwendet werden.
Damit das Betriebssystem mit der Hardware kommunizieren kann (vereinfacht ausgedrückt), wird in Linux (wie in den meisten anderen Betriebssystemen auch) ein Gerätetreiber dafür verwendet. Unter Linux ist dieser Treiber immer ein Teil des Kernels und kann entweder statisch hinzugelinkt oder auf Anfrage als Kernel-Modul nachgeladen werden. Da ein Gerätetreiber ein Teil des Kernels ist, kann aus Sicherheitsgründen nicht direkt darauf mit einem normal laufenden Prozess zugegriffen werden. Um aber jetzt dennoch auf Hardware-Komponenten wie u. a. Festplatte, CD-ROM, Soundkarte oder der seriellen bzw. parallelen Schnittstelle zugreifen zu können, wurde unter UNIX ein Mechanismus eingeführt, womit recht problemlos mit einem Gerätetreiber über eine Hardware-Gerätedatei kommuniziert werden kann. Diese »Datei« können Sie mit einem gewöhnlichen Prozess öffnen und auf sie lesend und schreibend zugreifen – sprich, Sie können über normale Datei-E/A-Operationen mit dem Gerätetreiber dank dieser »Datei« so kommunizieren, als handle es sich um eine gewöhnliche Datei.
5.1 Die Gerätedateitypen
Die Einträge der Gerätedateien – auch als Devices bekannt – finden Sie im Verzeichnis /dev. Ein ls -l /dev verschafft Ihnen einen ersten Überblick und stiftet vielleicht zugleich auch ein wenig Verwirrung über diese Gerätedateien, die es zu entflechten gilt. Es wird hierbei zwischen zwei Devices-Typen unterschieden – zu erkennen am ersten Buchstaben der Auflistung der Gerätedatei(en) (b oder c):
|
character device (c) – hierbei handelt es sich um Hardwaregeräte (… man kann allerdings mit einem Character Device auch eine Software-Lösung realisieren, z. B. ttyrpld (http://linux01.org:2222/prog-ttyrpld.php)), mit der eine fortlaufende Folge von Datenbytes gelesen oder geschrieben wird. Dies sind Hardware-Komponenten wie Soundkarte, Tapes, Terminalgeräte, serielle oder parallele Schnittstelle(n), Maus, USB-Schnittstelle usw. |
|
block device (b) – Blockgeräte sind Devices, mit denen feste ganze Blöcke (anstatt Bytes) gelesen oder geschrieben werden können. Dabei wird erst ein Puffer aufgefüllt, bevor der ganze Datenblock an den Treiber gesendet wird. Daher sind blockorientierte Geräte auch meistens etwas schneller als zeichenorientierte, da gewartet werden muss, bis ein Block voll ist. Zu den Blockgeräten gehören z. B. die Festplatte, Diskette oder das CD-ROM-/DVD-Laufwerk. Ein zeichenorientiertes Gerät hat mehr Aufwand, weil nach jedem read/write bereits eine Art flush stattfindet. |
Hinweis Es kann gefährlich werden, wenn Sie direkt auf Blockgeräte wie die Festplatte schreibend zugreifen. Sie müssen bedenken, dass alle Operationen wie bei einer Datei ausgeführt werden können; also auch Dinge wie lseek(), um den Schreibzeiger zu positionieren.
|
Wenn Sie hier nicht genau wissen, was Sie tun, dann lassen Sie die Finger davon. Die Folge kann sein, dass Sie den kompletten Inhalt Ihrer Festplatte unbrauchbar machen – sprich, auch Linux. Zwar verbieten die meisten Linux-Systeme einem normalen Prozess solch einen Zugriff – aber aus experimentellen Gründen versucht man es (erfahrungsgemäß) gerne als root. Bei Blockgeräten sollten Sie also immer zweimal nachdenken, was Sie tun!
|
|