
Existe uma opção de inicialização do kernel Linux para habilitar o console do sistema, o console=
, por exemplo, console=ttyS0,115200
ouconsole=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 /proc
ou /sys
sistemas 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,9600
e 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 /sys
as /proc
configuraçõ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