Estou tentando depurar um kernel em execução no QEMU com o GDB.
O kernel foi compilado com estas opções:
CONFIG_DEBUG_INFO=y
CONFIG_GDB_SCRIPTS=y
Eu inicio o kernel no qemu com o seguinte comando:
qemu-system-x86_64 -s -S -kernel arch/x86_64/boot/bzImage
Em um terminal separado, eu inicio o GDB pelo mesmo caminho e emito esses comandos em sequência:
gdb ./vmlinux
(gdb) target remote localhost:1234
(gdb) hbreak start_kernel
(gdb) c
Eu não forneci um rootfs, já que não estou interessado em um sistema de trabalho completo a partir de agora, apenas o kernel. Eu também tentei combinações de hbreak / break.
O kernel apenas inicializa e atinge o pânico do kernel, já que rootfs não podem ser encontrados ... esperados. Eu quero que ele pare em start_kernel e depois passe pelo código.
observação: se eu definir um ponto de interrupção imediato, ele funciona e pára, mas não no start_kernel / startup_64 / main
É possível que o qemu não esteja chamando todas essas funções, ou esteja mascarado de alguma forma?
Kernel: 4.13.4
GDB: GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.3) 7.7.1
GCC: gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4
system: ubuntu 14.04 LTS
NOTA: Este mesmo procedimento funcionou com o kernel 3.2.93, mas não funciona com o 4.13.4, então eu suponho que mais algumas configurações sejam necessárias. Eu não consegui encontrar recursos online que permitiram este procedimento de depuração para o kernel 4.0 e acima, então a partir de agora eu continuo com o 3.2, todas e quaisquer entradas sobre isso são bem vindas.