it-swarm.com.de

Wofür wird `/ dev / console` verwendet?

Von diese Antwort bis Linux: Unterschied zwischen/dev/console,/dev/tty und/dev/tty

Aus der Dokumentation :

/dev/tty      Current TTY device
/dev/console  System console
/dev/tty0     Current virtual console

In den guten alten Zeiten war /dev/console Systemadministratorkonsole. Und TTYs waren serielle Geräte von Benutzern, die an einen Server angeschlossen waren. Jetzt stellen /dev/console Und /dev/tty0 Die aktuelle Anzeige dar und sind normalerweise gleich. Sie können es beispielsweise überschreiben, indem Sie console=ttyS0 Zu grub.conf Hinzufügen. Danach ist Ihr /dev/tty0 Ein Monitor und /dev/console Ist /dev/ttyS0.

Mit " Systemkonsole " scheint /dev/console Die Gerätedatei eines physischen Textterminals zu sein, genau wie /dev/tty{1..63} Gerätedateien für die virtuellen Konsolen sind.

Mit "/dev/console Und /dev/tty0 Stellt die aktuelle Anzeige dar und ist normalerweise gleich", /dev/console Scheint mir, dass es sich auch um die Gerätedatei einer virtuellen Konsole handeln kann. /dev/console Scheint eher wie /dev/tty0 Als wie /dev/tty{1..63} (/dev/tty0 Ist die derzeit aktive virtuelle Konsole und kann eine beliebige von /dev/tty{1..63} Sein).

Was ist /dev/console? Was wird es verwendet?

Spielt /dev/console Für den Linux-Kernel dieselbe Rolle wie /dev/tty Für einen Prozess? (/dev/tty Ist das steuernde Terminal der Prozesssitzung des Prozesses und kann ein Punkt sein, /dev/ttyn, Wobei n zwischen 1 und 63 liegt oder mehr?)

Die andere Antwort erwähnt:

In der Kerneldokumentation wird /dev/console Als Zeichengerät mit der Nummer 5: 1 angegeben. Durch Öffnen dieses Zeichengeräts wird die "Haupt" -Konsole geöffnet. Dies ist die letzte Konsole in der Liste der Konsolen.

Bedeutet "die Liste der Konsolen" alle console= In der Boot-Option ?

Bedeutet "/dev/console Als Zeichengerät mit der Nummer 5: 1", dass /dev/console Die Gerätedatei eines physischen Textterminals ist, d. H. Einer Systemkonsole? (Aber die erste Antwort, die ich oben zitiert habe, besagt, dass /dev/console Dasselbe sein kann wie /dev/tty0, Das kein physisches Textterminal, sondern eine virtuelle Konsole ist.)

Vielen Dank.

13
Tim

/dev/console Existiert hauptsächlich, um die Konsole des Kernels dem Benutzerbereich auszusetzen. Die Dokumentation des Linux-Kernels auf Geräten sagt jetzt

Das Konsolengerät /dev/console Ist das Gerät, an das Systemnachrichten gesendet werden sollen und auf dem Anmeldungen im Einzelbenutzermodus zulässig sein sollen. Ab Linux 2.1.71 wird /dev/console Vom Kernel verwaltet. Bei früheren Versionen sollte es sich um eine symbolische Verknüpfung zu /dev/tty0, einer bestimmten virtuellen Konsole wie /dev/tty1 oder zu einer primären seriellen Schnittstelle (tty*) handeln, nicht zu cu*) Gerät, abhängig von der Konfiguration des Systems.

/dev/console, Der Geräteknoten mit Major 5 und Minor 1, bietet Zugriff auf alles, was der Kernel als primäres Mittel zur Interaktion mit dem Systemadministrator ansieht. Dies kann eine physische Konsole sein, die mit dem System verbunden ist (mit der virtuellen Konsolenabstraktion oben, sodass tty0 oder ein beliebiges ttyN verwendet werden kann, wobei [~ # ~] n [~ # ~] liegt zwischen 1 und 63) oder eine serielle Konsole oder eine Hypervisor-Konsole oder sogar ein Braille-Gerät. Beachten Sie, dass der Kernel selbst nicht /dev/console Verwendet: Geräteknoten sind für den Benutzerbereich bestimmt, nicht für den Kernel. Es überprüft jedoch, ob /dev/console vorhanden und verwendbar ist, und richtet init so ein, dass die Standardeingabe, -ausgabe und der Fehler auf /dev/console verweisen.

Wie hier beschrieben, ist /dev/console Ein Zeichengerät mit festem Dur und Moll, da es sich um ein separates Gerät handelt (wie in, ein Mittel zum Zugriff auf den Kernel; kein physisches Gerät), das nicht /dev/tty0 oder ein anderes Gerät. Dies ist etwas ähnlich wie die Situation mit /dev/tty , bei der es sich um ein eigenes Gerät handelt (5: 0), da es geringfügig andere Funktionen bietet als die anderen virtuellen Konsolen- oder Endgeräte.

Die "Liste der Konsolen" ist in der Tat die Liste der Konsolen, die durch die Startparameter console= Definiert wird (oder die Standardkonsole, falls keine vorhanden sind). Sie können die auf diese Weise definierten Konsolen unter /proc/consoles Sehen. /dev/console Bietet tatsächlich Zugriff zu den letzten :

Sie können in der Kernel-Befehlszeile mehrere console = -Optionen angeben. Die Ausgabe wird auf allen angezeigt. Das letzte Gerät wird verwendet, wenn Sie /dev/console Öffnen.

18
Stephen Kitt

"Was ist /dev/console?" wird in der vorherige Antwort beantwortet. Vielleicht ist diese Antwort klarer, wenn Sie die Antworten auf die beiden anderen Fragen kennen.

Q1. "Welche Gerätedatei repräsentiert das physische Terminal selbst?"

Es gibt keine solche Gerätedatei.

Q2. "Wofür wird /dev/console Verwendet?"

Unter Linux wird /dev/console Verwendet, um Meldungen während des Starts (und Herunterfahrens) anzuzeigen. Es wird auch für den "Einzelbenutzermodus" verwendet, wie in Stephen Kitts Antwort ausgeführt. Es gibt nicht viel anderes, wofür es Sinn macht, es zu verwenden.

"In den guten alten Zeiten" von Unix war /dev/console Ein dediziertes physisches Gerät. Dies ist jedoch unter Linux nicht der Fall.

Verwandte Beweise

1. "Welche Gerätedatei repräsentiert das physische Terminal selbst?"

Lassen Sie mich versuchen, diesen Weg zu verstehen. /dev/tty{1..63} Und /dev/pts/n Sind Gerätedateien, die Geräte selbst darstellen (obwohl es sich um Emulationen handelt), nicht in Bezug auf Prozess oder Kernel. /dev/tty0 Stellt den in /dev/tty{1..63} Dargestellten dar, der derzeit von etwas (möglicherweise Kernel) verwendet wird oder Shell-Prozess?). /dev/tty Stellt das Steuerterminal dar, das derzeit von einer Prozesssitzung verwendet wird. /dev/console Stellt das Terminal dar, das derzeit vom Kernel verwendet wird?

Welche Gerätedatei repräsentiert das physische Terminal selbst, nicht in Bezug auf den Kernel oder den Prozess?

Die zugrunde liegenden Geräte für /dev/tty{1..63} Sind struct con_driver. Um alle möglichen Treiber anzuzeigen, überprüfen Sie https: //elixir.bootlin.com/linux/v4.19/ident/do_take_over_console

Für diese zugrunde liegenden Geräte gibt es keine Gerätedatei!


Es gibt nur eine minimale Benutzeroberfläche, um sie zu verwalten.

$ head /sys/class/vtconsole/*/name
==> /sys/class/vtconsole/vtcon0/name <==
(S) dummy device

==> /sys/class/vtconsole/vtcon1/name <==
(M) frame buffer device

Wenn Sie wirklich mehr wissen wollen, steht der (M) Für Modul . Das heißt, Das Dummy-Konsolengerät wird nicht von einem ladbaren Kernelmodul bereitgestellt. Es ist Teil des ursprünglichen Kernel-Images (auch bekannt als "Builtin").

Zweitens scheint die Datei bind in jedem Unterverzeichnis von /sys/class/vtconsole Ihnen mitzuteilen, welches vtconsole-Gerät aktiv ist. Wenn ich 0 In den aktiven schreibe, scheint er in den Dummy zu wechseln. (GUI-VTs scheinen nicht betroffen zu sein, aber Text-VTs funktionieren nicht mehr). Das Schreiben von 1 Für den Dummy wird nicht aktiviert. Beide Methoden funktionieren, um zur realen zurückzukehren. Wenn ich den Code richtig gelesen habe, besteht der Trick darin, dass echo 1 > bind Nur für Konsolentreiber funktionieren soll, die als Modul erstellt wurden (?!).

Für Framebuffer-Konsolen gibt es weitere Informationen zum Binden verschiedener Framebuffer-Geräte (/dev/fb0 ...) an bestimmte virtuelle Konsolen in = https: //kernel.org/doc/Documentation/fb/fbcon.txt . Dies beinhaltet eine Kerneloption fbcon:map= Oder einen Befehl namens con2fbmap.

Natürlich können die Details je nach Kernel-Version, Architektur, Firmware, Gerät, Treiber usw. variieren. Ich musste nie wirklich eine der oben genannten Schnittstellen verwenden. Der Kernel lässt nur i915/inteldrmfb/was auch immer Sie ihn nennen möchten, beim Laden übernehmen und ersetzt z. vgacon.

Es sieht so aus, als hätte mein EFI-Computer nie vgacon. Erstens wird eine Dummy-Konsole verwendet, und zweitens wird nach 1,2 Sekunden auf fbcon umgeschaltet, das über efifb ausgeführt wird. Aber bis jetzt musste ich mich nicht darum kümmern, was die Details sind; es funktioniert einfach.

$ dmesg | grep -C2 [Cc]onsole
[    0.230822] rcu: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.233164] NR_IRQS: 65792, nr_irqs: 728, preallocated irqs: 16
[    0.233346] Console: colour dummy device 80x25
[    0.233571] console [tty0] enabled
[    0.233585] ACPI: Core revision 20180810
[    0.233838] clocksource: hpet: mask: 0xffffffff max_cycles: 0xffffffff, max_idle_ns: 133484882848 ns
--
[    1.228393] efifb: scrolling: redraw
[    1.228396] efifb: Truecolor: size=8:8:8:8, shift=24:16:8:0
[    1.230393] Console: switching to colour frame buffer device 170x48
[    1.232090] fb0: EFI VGA frame buffer device
[    1.232110] intel_idle: MWAIT substates: 0x11142120
--
[    3.595838] checking generic (e0000000 408000) vs hw (e0000000 10000000)
[    3.595839] fb: switching to inteldrmfb from EFI VGA
[    3.596577] Console: switching to colour dummy device 80x25
[    3.596681] [drm] Replacing VGA console driver
[    3.597159] [drm] ACPI BIOS requests an excessive sleep of 20000 ms, using 1500 ms instead
[    3.599830] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
--
[    3.657050] e1000e 0000:00:19.0 eth0: MAC: 11, PHY: 12, PBA No: FFFFFF-0FF
[    3.657869] e1000e 0000:00:19.0 eno1: renamed from eth0
[    4.711453] Console: switching to colour frame buffer device 170x48
[    4.734356] i915 0000:00:02.0: fb0: inteldrmfb frame buffer device
[    4.778813] Loading iSCSI transport class v2.0-870.

2. "Wofür wird /dev/console Verwendet?"

Sie können/dev/console als TTY-Gerät verwenden. Wenn Sie beispielsweise darauf schreiben, wird auf ein bestimmtes zugrunde liegendes Gerät geschrieben, das auch eine eigene Zeichennummer hat.

Oft ist/dev/console an/dev/tty0 gebunden, manchmal aber auch an ein anderes Gerät.

In diesem Fall wird beim Schreiben in/dev/console in/dev/tty0 geschrieben. Das Schreiben in/dev/tty0 entspricht wiederum dem Schreiben in das aktuell aktive/dev/ttyN-Gerät.

Dies wirft jedoch eine interessante Frage auf. Wenn Sie auf tty0 Zugreifen, wird auf verschiedene virtuelle Konsolen zugegriffen, je nachdem, welche gerade aktiv ist. Wofür verwenden die Leute eigentlich tty0 Und wofür wird console unter Linux verwendet?

  1. Technisch gesehen können Sie von console/tty0 Lesen und schreiben, indem Sie beispielsweise ein getty ausführen, um sich bei tty0 Anmelden zu können. Dies ist jedoch nur als schneller Hack nützlich. Weil dies bedeutet, dass Sie die mehreren virtuellen Linux-Konsolen nicht nutzen können.

  2. systemd sucht in sysfs nach einem Attribut, das dem Gerät/dev/console zugeordnet ist, um das zugrunde liegende TTY-Gerät zu erkennen. Dadurch kann systemd automatisch ein getty erzeugen und sich anmelden, z. eine serielle Konsole, wenn der Benutzer eine Kernelkonsole durch Booten mit console=ttyS0 eingerichtet hat. Das ist bequem; Dadurch muss diese Konsole nicht an zwei verschiedenen Stellen konfiguriert werden. Siehe auch hier man systemd-getty-generator. systemd öffnet dafür jedoch nicht /dev/console.

  3. Während des System-Bootstraps ist möglicherweise noch nicht einmal sysfs bereitgestellt. Sie möchten aber so schnell wie möglich Fehler- und Fortschrittsmeldungen anzeigen können! Also kreisen wir um Punkt 1). Der Kernel startet PID 1 mit stdin/stdout/stderr, das mit /dev/console Verbunden ist. Es ist sehr schön, diesen einfachen Mechanismus von Anfang an eingerichtet zu haben.

  4. In einem Linux-Container kann die Datei unter /dev/console Als etwas anderes erstellt werden - nicht als die Gerätenummer 5:1. Stattdessen kann es als PTS-Gerätedatei erstellt werden. Dann wäre es sinnvoll, sich über diese /dev/console - Datei anzumelden. systemd in einem Container ermöglicht die Anmeldung an einem solchen Gerät. siehe man systemd-getty-generator.

    Dieser Mechanismus wird verwendet, wenn Sie einen Container mit dem Befehl systemd-nspawn Ausführen. (Ich denke nur, wenn Sie systemd-nspawn Auf einem TTY ausführen, obwohl ich es nicht anhand der Suche in der Manpage erkennen kann).

    systemd-nspawn Erstellt den /dev/console Des Containers als Bind-Mount eines PTS-Geräts vom Host. Dies bedeutet, dass dieses PTS-Gerät innerhalb von /dev/pts/ Im Container nicht sichtbar ist.

    PTS-Geräte sind lokal für einen bestimmten devpts Mount. PTS-Geräte sind eine Ausnahme von der normalen Regel, dass Geräte anhand ihrer Gerätenummer identifiziert werden. PTS-Geräte werden durch die Kombination ihrer Gerätenummer und ihrer devpts-Mount identifiziert.

  5. Sie können dringende Nachrichten an console/tty0 Schreiben, um in die aktuelle virtuelle Konsole des Benutzers zu schreiben. Dies kann für dringende Benutzerraum-Fehlermeldungen hilfreich sein, ähnlich wie für dringende Kernel-Nachrichten, die auf der Konsole gedruckt werden (siehe man dmesg). Dies ist jedoch nicht üblich, zumindest wenn das System den Startvorgang abgeschlossen hat.

    rsyslog hat ein Beispiel auf dieser Seite , das Kernel-Nachrichten an /dev/console druckt; Dies ist unter Linux sinnlos, da der Kernel dies standardmäßig bereits tut. Ein Beispiel, das ich nicht wiederfinden kann, besagt, dass es keine gute Idee ist, dies für Nicht-Kernel-Nachrichten zu verwenden, da es einfach zu viele Syslog-Nachrichten gibt, Sie Ihre Konsole überfluten und es zu viel stört.

    systemd-journald bietet ebenfalls Optionen zum Weiterleiten aller Protokolle an die Konsole. Im Prinzip kann dies zum Debuggen in einer virtuellen Umgebung nützlich sein. Zum Debuggen leiten wir jedoch normalerweise stattdessen an /dev/kmsg Weiter. Dadurch werden sie im Kernel-Protokollpuffer gespeichert, sodass Sie sie mit dmesg lesen können. Wie Nachrichten, die vom Kernel selbst generiert werden, können diese Nachrichten abhängig von der aktuellen Kernelkonfiguration an die Konsole zurückgegeben werden.

6
sourcejedi