
Es gibt Linux Kernel Boot-Option, um die Systemkonsole zu aktivieren, die console=
, zum Beispiel, console=ttyS0,115200
oderconsole=ttyS0,115200n8
http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html
Nach dem Übergeben dieser Option druckt der Linux-Kernel alle (oder einige) Kernel-Meldungen auf der Konsole aus, was für die Fehlerbehebung nützlich ist.
Gibt es eine Möglichkeit, die Systemkonsole in Linux zur Laufzeit zu ändern, ohne einen Neustart durchzuführen (mit einigen speziellen Sysctls/Ioctls/oder in /proc
oder /sys
Dateisystemen)?
Erster Fall: Ich hatte console=
beim aktuellen Booten keine Option (überprüft in /proc/cmdline) und möchte das Dmesg-Drucken auf dem seriellen Port /dev/ttyS0 aktivieren, um die Situation zu debuggen.
Zweiter Fall: Ich hatte falsche Einstellungen console=ttyS0,9600
und möchte die Geschwindigkeit ohne Neustart ändern (alte Konsoleneinstellung entfernen, neue Konsole mit guter 115200-Einstellung hinzufügen; oder einfach die Geschwindigkeit ändern).
(Wo console=
wird die Option analysiert, wo werden /sys
die /proc
aktuellen Einstellungen gespeichert?)
Antwort1
Das hat bei mir funktioniert:
sudo agetty ttyUSB0 115200
sudo password:
ctrl+z
bg
disown
Wenn Sie Disown nicht verwenden, wird das Terminal geschlossen und Agetty wird beendet (SIGHUP-Signal beim Schließen des Terminals).
Von einem anderen PC aus können Sie sich mit anmelden screen /dev/ttyUSB0 115200
. Es wird eine Eingabeaufforderung für den Benutzernamen und das Kennwort angezeigt.
Antwort2
Keine vollständige, zur Laufzeit hinzugefügte echte Hardwarekonsole, aber etwas Besseres für einige Fälle: Lernen Sie eine „Netconsole“ kennen. Es handelt sich um eine Kernelkonsolenemulation über UDP in Ethernet-Netzwerken, unidirektional, nur zum Sammeln von Kernelprotokollen. Keine USB-UART-Adapter oder Nullmodemkabel oder überteuertes Com-over-Ethernet mehr"Konsolenserver"Geräte. Und keine Übertragung mehr (Sie können die klassische Kernel-Konsole verwenden, ummagisches SysRq, aber nicht mit Netconsole).
Dokumentation:https://www.kernel.org/doc/Documentation/networking/netconsole.txt
Beispiele:
Damit Netconsole funktioniert, muss es in der Kernelkonfiguration aktiviert (oder als Modul erstellt) sein. (Manchmal ist es möglich, ein Netconsole-Modul zum Ausführen des Kernels zu erstellen und es ohne Neustart in Linux zu modprobe.)
Um es mit der Linux-Befehlszeile (mit Neustart) zu aktivieren, fügen Sie Folgendes hinzu:
netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]
Alles muss angegeben werden: Quell-UDP-Port, Quell-IPv4-Adresse, Name der Netzwerkschnittstelle wie „eth0“ (funktioniert es, wenn Udev eth0 in etwas Positionsbezogenes umbenennt?), Ziel-UDP-Port und IPv4 und auch Ziel-MAC-Adresse im sechs Byte großen Format 00:13:32:20:r9:a5.
Empfänger ist nc -u -l $tgt_port
.
Beispiel einer Laufzeitkonfiguration aus dem Arch-Wiki -https://wiki.archlinux.org/index.php/Netconsole
# set log level for kernel messages dmesg -n 8 modprobe configfs modprobe netconsole mount none -t configfs /sys/kernel/config # 'netconsole' dir is auto created if the module is loaded mkdir /sys/kernel/config/netconsole/target1 cd /sys/kernel/config/netconsole/target1 # set local IP address echo 192.168.0.111 > local_ip # set destination IP address echo 192.168.0.17 > remote_ip # set local network device name (find it trough ifconfig, examples: eth0, eno1, wlan0) echo eno1 > dev_name # find destination MAC address arping -I $(cat dev_name) $(cat remote_ip) -f | grep -o ..:..:..:..:..:.. > remote_mac echo 1 > enabled