Módulo de kernel: como obter a saída do console?
-
29-10-2019 - |
Pergunta
Estou escrevendo um módulo do kernel e quero poder imprimir algo na saída do console ao carregá-lo usando insmod module.ko
.
Tentei usar
printk(KERN_EMERG "test kernel emergency\n");
mas nada aparece no meu console.No entanto, ele aparece em dmesg
.
Informações extras:
Estou usando um Intel x86 de 32 bits com linux-3.0.0
e cat /proc/sys/kernel/printk
dá4 4 1 7
Solução
1- certifique-se de que você está no modo de terminal completo (pressione Alt + Ctrl + F1)
2- em vez de printk(KERN_EMERG "test kernel emergency\n");
tente
printk(KERN_ALERT "test kernel alert\n");
Outras dicas
Jens,
As saídas do printk são enviadas para o kernel e coletadas pelo daemon syslogd. dmesg ecoa os dados coletados pelo daemon syslogd.
Esta mensagem pode não ser impressa por seu console (de onde você chamou insmod) se você estiver usando a versão gráfica do linux.Eu tentei isso no ubuntu e ele não imprime as mensagens de printk, mesmo se o nível de log for ALERTA ou EMERGÊNCIA.
Você precisa modificar seu syslog para imprimir mensagens de emergência do kernel para o console (ou usuários específicos ou ttys).
Existem muitos daemons syslog, se você não controlar aquele que usa e não for root - você está sem sorte.Se você controlar aquele que usa, o syslog-ng é muito bom e tem exemplos de como fazer isso em seu manual.