Unter Linux ist eine Gerätedatei eine Schnittstelle zu einem Gerätetreiber, die es einer Anwendung ermöglicht, mit einem Gerät mithilfe seines Gerätetreibers über Standard-Eingabe- und Ausgabesystemaufrufe zu interagieren. In Linux-Systemen gibt es zwei häufig verwendete Gerätedateien: spezielle Zeichendateien und spezielle Blockdateien. Der Unterschied zwischen ihnen liegt in der Menge der vom Betriebssystem und der Hardware gelesenen und geschriebenen Daten.
Die Betriebsumgebung dieses Tutorials: Linux5.9.8-System, Dell G3-Computer.
Übersicht über Gerätedateien
In Unix-ähnlichen Betriebssystemen sind Gerätedateien oder spezielle Dateien die Schnittstellen von Gerätetreibern, die im Dateisystem als erscheinen wenn es wie eine normale Datei ist. Es gibt auch spezielle Dateien in MS-DOS, OS/2 und Microsoft Windows. Diese speziellen Dateien ermöglichen einer Anwendung die Interaktion mit einem Gerät mithilfe seines Gerätetreibers über Standard-Eingabe-/Ausgabe-Systemaufrufe. Die Verwendung von Standardsystemaufrufen vereinfacht viele Programmieraufgaben und ermöglicht konsistente E/A-Mechanismen im Benutzerbereich, unabhängig von den Merkmalen und Fähigkeiten des Geräts.
Gerätedateien bieten normalerweise eine einfache Schnittstelle zu Standardgeräten (z. B. Druckern und seriellen Anschlüssen), können aber auch für den Zugriff auf bestimmte einzigartige Ressourcen auf diesen Geräten (z. B. Festplattenpartitionen) verwendet werden. Darüber hinaus sind Gerätedateien nützlich für den Zugriff auf Systemressourcen, die keinem tatsächlichen Gerät zugeordnet sind, wie z. B. Datensenken und Zufallszahlengeneratoren.
Abbildung 1 Die Beziehung zwischen Anwendungen, Blockdateien, Treibern und Hardware
In Unix-ähnlichen Betriebssystemen gibt es zwei häufig verwendete Gerätedateien, die als Zeichenspezialdateien und Blockspezialdateien bezeichnet werden. Der Unterschied zwischen ihnen besteht in der Datenmenge, die vom Betriebssystem und der Hardware gelesen und geschrieben wird. Im Gegensatz zu Named Pipes, die als spezielle Gerätedateien bezeichnet werden können, sind Named Pipes nicht mit einem Gerät verbunden, aber auch keine gewöhnlichen Dateien.
In einigen Unix-ähnlichen Systemen werden die meisten Gerätedateien als Teil eines virtuellen Dateisystems verwaltet, das traditionell unter /dev gemountet wird und möglicherweise mit einem Steuerungsdämon verbunden ist, der das Hinzufügen und Entfernen von Hardware zur Laufzeit überwacht und entsprechende Änderungen am Gerät vornimmt Wenn der Vorgang zum Ändern des Gerätedateisystems nicht automatisch vom Kernel abgeschlossen wird, ruft der Steuerungsdämon möglicherweise Skripte im System- oder Benutzerbereich auf, um spezielle Geräteanforderungen zu erfüllen.
FreeBSD- und DragonFly BSD-Implementierungen haben das virtuelle Gerätedateisystem devfs und den zugehörigen Daemon devd benannt. Linux verwendet hauptsächlich eine Userspace-Implementierung namens udev, es gibt jedoch viele Variationen. Darauf basierende Betriebssysteme wie Darwin und macOS verfügen über rein Kernel-basierte Gerätedateisysteme.
Auf Unix-Systemen, die die Isolierung von Chroot-Prozessen unterstützen, wie z. B. Solaris-Container, erfordert normalerweise jede Chroot-Umgebung ein eigenes /dev; diese Mount-Punkte sind für das Host-Betriebssystem auf verschiedenen Knoten im globalen Dateisystembaum sichtbar. Die Hardware-Isolation kann durch die Chroot-Umgebung erzwungen werden, indem die Anzahl der Geräteknoten auf eine Chroot-Instanz von /dev beschränkt wird (ein Programm kann sich nicht an die Hardware anschließen und den Namen weder sehen noch darauf zugreifen – dies ist eine stärkere Zugriffskontrolle als eine Unix-Datei). Systemberechtigungsformular).
Geräteknoten entsprechen Ressourcen, die vom Betriebssystemkernel zugewiesen wurden. Unix identifiziert diese Ressourcen durch eine Hauptnummer und eine Nebennummer, die beide als Teil der Knotenstruktur gespeichert sind. Die Vergabe dieser Nummern erfolgt eindeutig auf verschiedenen Betriebssystemen und auf verschiedenen Computerplattformen. Normalerweise identifiziert eine Hauptnummer einen Gerätetreiber und eine Nebennummer identifiziert das spezifische Gerät, das der Treiber steuert (möglicherweise mehrere Geräte): In diesem Fall übergibt das System möglicherweise die Nebennummer an den Treiber. Bei dynamisch zugewiesenen Nummern ist dies jedoch möglicherweise nicht der Fall (z. B. unter FreeBSD 5 und höher).
Wie andere spezielle Dateitypen verwenden Computersysteme Standardsystemaufrufe, um auf Geräteknoten zuzugreifen und sie wie normale Computerdateien zu behandeln. Es gibt zwei Standardtypen von Gerätedateien. Leider sind ihre Namen aus historischen Gründen eher kontraintuitiv, sodass es oft falsch ist, den Unterschied zwischen den beiden zu erklären.
Block File Classification
Character Devices (Character Devices)
Character Special Files oder Character Devices bieten ungepufferten, direkten Zugriff auf Hardwaregeräte. Sie erlauben einem Programm nicht unbedingt, jeweils ein einzelnes Zeichen zu lesen oder zu schreiben; dies hängt vom jeweiligen Gerät ab. Beispielsweise erfordert das Zeichengerät einer Festplatte in der Regel, dass alle Lese- und Schreibvorgänge an Blockgrenzen ausgerichtet sind und niemals einzelne Byte-Lesevorgänge zulassen.
Zeichengeräte werden manchmal als Rohgeräte bezeichnet, um Verwirrung darüber zu vermeiden, dass Zeichengeräte auf blockbasierter Hardware normalerweise ein Programm zum Lesen und Schreiben ausgerichteter Blöcke benötigen.
Geräte blockieren (Geräte blockieren)
Spezielle Dateien blockieren oder Geräte blockieren bieten gepufferten Zugriff auf Hardwaregeräte und stellen einige abstrakte Details bereit. Im Gegensatz zu Zeichengeräten ermöglichen Blockgeräte dem Programmierer immer das Lesen oder Schreiben von Blöcken beliebiger Größe (einschließlich einzelner Zeichen/Bytes) und beliebiger Ausrichtung. Der Nachteil besteht darin, dass Blockgeräte gepuffert sind und der Programmierer keine Ahnung hat, wie lange es dauern wird, bis die Schreibdaten vom Puffer des Kernels an das tatsächliche Gerät weitergeleitet werden, oder in welcher Reihenfolge die beiden separaten Schreibvorgänge am physischen Gerät ankommen ? Wenn dieselbe Hardware außerdem Zeichen- und Blockgeräte verfügbar macht, besteht das Risiko einer Datenbeschädigung, da der Client, der das Zeichengerät verwendet, keine Kenntnis von den in den Puffern des Blockgeräts vorgenommenen Änderungen hat.
Pseudo-Geräte (Pseudo-Geräte)
Geräteknoten auf Unix-ähnlichen Systemen entsprechen nicht unbedingt physischen Geräten. Knoten, denen diese Korrespondenz fehlt, bilden eine Reihe von Pseudogeräten. Sie stellen verschiedene Funktionen bereit, die vom Betriebssystem verwaltet werden. Zu den am häufigsten verwendeten (zeichenbasierten) Pseudogeräten gehören:
/ dev / null - 接受并放弃所有输入; 不产生输出(总是在读取时返回文件结束指示) / dev / zero - 接受并放弃所有输入; 产生连续的NUL(零值)字节流 / dev / full - 读取时会产生连续的NUL(零值)字节流,并在写入时返回“磁盘已满”消息 / dev / random和/ dev / urandom - 它们产生一个可变长度的伪随机数字流。
Knotenerstellung
Knoten werden durch den mknod-Systemaufruf erstellt. Das zum Erstellen von Knoten verwendete Befehlszeilenprogramm heißt auch mknod. Mit den üblichen Dateisystemaufrufen (rename, unlink) und Befehlen (mv, rm) können Knoten verschoben oder gelöscht werden. Wenn beim Kopieren eines Geräteknotens die Option -R oder -a übergeben wird, erstellt der Befehl cp -l einen neuen Geräteknoten mit denselben Eigenschaften wie das Original.
Einige Unix-Versionen enthalten ein Skript namens makedev oder MAKEDEV, das alle notwendigen Geräte im Verzeichnis /dev erstellt. Dies ist nur auf Systemen sinnvoll, deren Geräten statisch eine Hauptnummer zugewiesen ist (z. B. durch Festcodierung in ihrem Kernelmodul).
Benennungsregeln für Blockdateien
Die folgenden Präfixe werden in den Namen bestimmter Geräte in der /dev-Hierarchie verwendet, um den Gerätetyp zu identifizieren:
lp:行式打印机(比较lp) pt:伪终端(虚拟终端) tty:终端 一些额外的前缀已经在一些操作系统中普遍使用: fb:帧缓冲区 fd :(平台)软盘,尽管这个缩写也常用来指文件描述符 高清:(“经典”)IDE驱动程序(以前用于ATA硬盘驱动器,ATAPI光盘驱动器等) hda:第一个ATA通道上的主设备(通常由主编号3和次编号0标识) hdb:第一个ATA通道上的从属设备 hdc:第二个ATA通道上的主设备 hdc1:此磁盘上的第一个主分区(示例) hdc5:扩展分区中的第一个逻辑驱动器(示例) hdd:第二个ATA通道上的从属设备 parport,pp:并行端口 SCSI驱动程序,也被libATA(现代PATA / SATA驱动程序),USB,IEEE 1394等使用。 sd:大容量存储驱动程序 sda:首次注册的设备 sda4:此磁盘上的最后一个分区(示例) sda6:扩展分区中的第二个逻辑驱动器(示例) sdb,sdc等:第二,第三等注册设备 ses:机箱驱动程序 sg:通用SCSI层 sr:“ROM”驱动程序(面向数据的光盘驱动器; scd只是一个辅助别名) st:磁带驱动器 tty:终端 ttyS :(平台)串口驱动程序 ttyUSB:USB串口转换器,调制解调器等
Eine kanonische Liste der in Linux verwendeten Präfixe finden Sie in Linux-Geräteliste gefunden, die Linux-Geräteliste ist die offizielle Registrierung des Linux-Betriebssystems, die Gerätenummern und /dev-Verzeichnisknoten zuweist.
Bei den meisten Geräten folgt auf dieses Präfix eine Nummer, die das jeweilige Gerät eindeutig identifiziert. Bei Festplatten werden Buchstaben zur Identifizierung des Geräts und Zahlen zur Identifizierung der Partitionen verwendet. Daher kann das Dateisystem den Bereich auf der Festplatte über /dev/sda3 finden; /dev/pts/14 mit der Netzwerkterminalsitzung verknüpfen.
Verwandte Befehle zum Bedienen von Gerätedateien
mknod
Wenn Sie an eingebetteten Befehlen interessiert sind, können Sie die Verwendung dieses Befehls selbst überprüfen.
Verwandte Empfehlungen: „Linux-Video-Tutorial“
Das obige ist der detaillierte Inhalt vonWas ist eine Linux-Gerätedatei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!