Habilitar console serial do sistema em tempo de execução

Habilitar console serial do sistema em tempo de execução

Existe uma opção de inicialização do kernel Linux para habilitar o console do sistema, o console=, por exemplo, console=ttyS0,115200ouconsole=ttyS0,115200n8 http://www.linuxtopia.org/online_books/linux_kernel/kernel_configuration/re01.html

Depois de passar esta opção, o kernel do Linux imprimirá todas (ou algumas) mensagens do kernel no console, o que é útil para depuração.

Existe uma maneira de alterar o console do sistema no Linux em tempo de execução, sem reinicializar (com alguns sysctls/ioctls/ou in /procou /syssistemas de arquivos especiais)?

Primeiro caso: não tive console=opção na inicialização atual (marcada em/proc/cmdline) e quero ativar a impressão dmesg na porta serial/dev/ttyS0 para depurar a situação.

Segundo caso: eu tinha configurações erradas console=ttyS0,9600e quero alterar a velocidade sem reiniciar (remover a configuração antiga do console, adicionar um novo console com uma boa configuração 115200; ou apenas alterar a velocidade).

(Onde console=a opção é analisada, onde /sysas /procconfigurações atuais são armazenadas?)

Responder1

Isso funcionou para mim:

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

Se você não usar o disown, o terminal será fechado e o agetty também será encerrado (sinal SIGHUP ao fechar o terminal).

De outro PC você pode fazer login usando screen /dev/ttyUSB0 115200. O prompt de login/senha será mostrado.

Responder2

Não é um console de hardware real completo adicionado em tempo de execução, mas algo melhor para alguns casos: conheça um "netconsole". É a emulação do console do kernel sobre udp em redes Ethernet, unidirecional, apenas para coletar logs do kernel. Chega de adaptadores usb-uart ou cabos de modem nulo ou com-over-ethernet caro"servidor de console"dispositivos. E não há mais transmissão (você pode usar o console clássico do kernel para enviarmagia SysRq, mas não com netconsole).

Documentação:https://www.kernel.org/doc/Documentation/networking/netconsole.txt

Exemplos:

O Netconsole deve estar habilitado (ou construído como módulo) na configuração do kernel para funcionar. (Às vezes pode ser possível construir o módulo netconsole para executar o kernel e modprobe-lo no Linux sem reinicializar).

Para habilitar a linha de comando do Linux (com reinicialização), adicione:

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

Tudo precisa ser especificado: porta udp de origem, endereço IPv4 de origem, nome da interface de rede como "eth0" (funcionará com o udev renomeando o eth0 para algo relacionado à posição?), porta udp de destino e ipv4, e também endereço macaddress de destino no formato de seis bytes 00:13:32:20:r9:a5.

O receptor é nc -u -l $tgt_port.

Exemplo de configuração de tempo de execução do wiki do 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

informação relacionada