Habilitar la consola del sistema serie en tiempo de ejecución

Habilitar la consola del sistema serie en tiempo de ejecución

Existe una opción de arranque del kernel de Linux para habilitar la consola del sistema, console=por ejemplo, console=ttyS0,115200oconsole=ttyS0,115200n8 http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html

Después de pasar esta opción, el kernel de Linux imprimirá todos (o algunos) mensajes del kernel en la consola, lo cual es útil para la depuración.

¿Hay alguna forma de cambiar la consola del sistema en Linux en tiempo de ejecución, sin reiniciar (con algunos sysctls/ioctls/o in /procor /sysfilesystems especiales)?

Primer caso: no tenía ninguna console=opción en el arranque actual (marcado en /proc/cmdline) y quiero habilitar la impresión dmesg en el puerto serie /dev/ttyS0 para depurar la situación.

Segundo caso: tenía una configuración incorrecta console=ttyS0,9600y quiero cambiar la velocidad sin reiniciar (eliminar la configuración anterior de la consola, agregar una nueva consola con una buena configuración de 115200; o simplemente cambiar la velocidad).

(¿Dónde console=se analiza la opción, dónde /sysse /procalmacena la configuración actual?)

Respuesta1

Esto funcionó para mí:

sudo agetty ttyUSB0 115200
sudo password:
ctrl+z
bg
disown

Si no lo utiliza, el terminal se cerrará y también terminará agetty (señal SIGHUP al cerrar el terminal).

Desde otra PC puedes iniciar sesión usando screen /dev/ttyUSB0 115200. Se mostrará el mensaje de inicio de sesión/contraseña.

Respuesta2

No es una consola de hardware real completa agregada en tiempo de ejecución, sino algo mejor para algunos casos: conozca una "netconsole". Es una emulación de consola del kernel sobre udp en redes Ethernet, unidireccional, solo para recopilar registros del kernel. No más adaptadores USB-uart ni cables de módem nulo ni costosos com-over-ethernet"servidor de consola"dispositivos. Y no más transmisiones (es posible que desee utilizar la consola del kernel clásica para enviarMagic SysRq, pero no con netconsole).

Documentación:https://www.kernel.org/doc/Documentation/networking/netconsole.txt

Ejemplos:

Netconsole debe estar habilitado (o construido como módulo) en la configuración del kernel para funcionar. (A veces es posible crear un módulo de netconsole para ejecutar el kernel y modificarlo en Linux sin reiniciar).

Para habilitar con la línea de comando de Linux (con reinicio), agregue:

netconsole=[src-port]@[src-ip]/[<dev>],[tgt-port]@<tgt-ip>/[tgt-macaddr]

Es necesario especificar todo: puerto udp de origen, dirección ipv4 de origen, nombre de la interfaz de red como "eth0" (¿funcionará con udev cambiando el nombre de eth0 a algo relacionado con la posición?), puerto udp de destino e ipv4, y también dirección maca de destino en formato de seis bytes 00:13:32:20:r9:a5.

El receptor es nc -u -l $tgt_port.

Ejemplo de configuración de tiempo de ejecución de la wiki de Arch: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

información relacionada