
Existe una opción de arranque del kernel de Linux para habilitar la consola del sistema, console=
por ejemplo, console=ttyS0,115200
oconsole=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 /proc
or /sys
filesystems 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,9600
y 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 /sys
se /proc
almacena 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