Uma maneira de ter certeza de não perder nenhuma mensagem do kernel é depurá-lo em uma máquina virtual.
Por exemplo, o script a seguir usa qemu
para iniciar uma máquina virtual com um kernel personalizado:
qemu-system-x86_64\
-kernel arch/x86/boot/bzImage\
-drive file=/home/lgeorget/VM/image.qcow2,if=virtio\
-append "root=/dev/vda1"\
-netdev user,id=mynet0 -device e1000,netdev=mynet0\
-enable-kvm\
-S
A opção importante aqui é -S
, o que faz com que o qemu inicie um servidor GDB e aguarde que o depurador esteja pronto antes de inicializar.
Em outro console, vá para a árvore de desenvolvimento do Linux, onde você compilou seu kernel personalizado, e aqui inicie o GDB com gdb vmlinux
para carregar os símbolos do kernel. Em seguida, no prompt, digite:
target remote :1234
Isto irá se conectar ao servidor gdb que o qemu iniciou (no host local, porta 1234 por padrão). Então, você pode usar seu depurador quase como para qualquer programa, definir pontos de interrupção, continuar a execução com o comando continue
, etc.
Você deve ser capaz de inspecionar e descarregar a memória, bem como copiar os registros, se quiser analisá-los. Note que isto não aumenta a verbosidade do kernel, no entanto.
Existem muitos tutoriais na web, bem como alguma documentação oficial.