QEMU -no-reboot
+ CLI del núcleo kernel.panic=-1
qemu-system-X -no-reboot
Opción QEMU CLI:hace que QEMU salga cuando el invitado intenta reiniciarkernel.panic=-1
parámetro de arranque del kernel:hace que Linux intente reiniciarse inmediatamente después de un pánico:https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931
También devuelve 0
como pvpanic
, pero tiene las siguientes ventajas:
- no es necesario volver a compilar nada, solo un parámetro de arranque
- funciona en arm y aarch64
-M virt
así como x86, mientras que pvpanic parece específico de x86 ya que está por debajo dearch/x86
Probado con esta configuración.
Rastrear el panic
símbolo con GDB
Otra forma de hacerlo podría ser detectar cuándo la dirección del panic
se alcanza la función, y luego intente hacer que QEMU se cierre.
Definitivamente puedes romper GDB en panic
como se explica en:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642
Pero luego TODO:¿cómo hacer que QEMU salga con el estado 1? Usando monitor quit
, desde dentro de GDB, que reenvía quit
al monitor QEMU de GDB, se acerca mucho, pero no del todo ya que no sale con el estado 0
.
gem5 hace este seguimiento de forma predeterminada de forma nativa, lo cual es bastante impresionante.
Esto sucede en:https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73
Tal vez los desarrolladores de QEMU puedan inspirarse en esta técnica e implementar algo similar.
Tengo algo que funciona:
- Configure (y cree) el núcleo con
CONFIG_PVPANIC=y
; esto produce un kernel con soporte compilado para elpvpanic
dispositivo. - Invocar
qemu-system-x86_64
con el-device pvpanic
opción; esto le indica a Qemu que atrape (y salga) de un kernel panic.
Un kernel panic provoca qemu-system-x86_64
para salir con éxito (estado de retorno 0
), pero al menos ya no se cuelga.
Muchas gracias a @dsstorefile1 por orientarme en la dirección correcta.
Referencias:
- https://cateee.net/lkddb/web-lkddb/PVPANIC.html
- https://github.com/qemu/qemu/blob/master/docs/specs/pvpanic.txt