Serielle Systemkonsole zur Laufzeit aktivieren

Serielle Systemkonsole zur Laufzeit aktivieren

Es gibt Linux Kernel Boot-Option, um die Systemkonsole zu aktivieren, die console=, zum Beispiel, console=ttyS0,115200oderconsole=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 /procoder /sysDateisystemen)?

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,9600und 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 /sysdie /procaktuellen 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

verwandte Informationen