Acabei de ler que os módulos do kernel Linux não podem ser impressos na tela, ou seja, printf
não funcionam. Isso tem algo a ver com o tratamento de interrupções ou por que isso acontece?
Tenho memória de estudar alguns C e Assembly que você não poderia usar printf
e isso acontecia porque as interrupções estavam desativadas.
Responder1
No kernel, printf
não funciona porque não está implementado! Você usaprintk
em vez disso (ou early_printk
em código muito antigo, antes da configuração do console). printk
é codificado com muito cuidado para que seja seguro ligar de qualquer lugar, em qualquer circunstância (em particular, não precisa alocar memória). Ele implementa praticamente a mesma API do printf
, com a adição de um nível de log para indicar a importância da mensagem que está sendo impressa e especificadores de formato que sãoútil no kernel.