GNU/Linux >> Tutoriales Linux >  >> Linux

¿Puedo hacer que Qemu salga con falla en kernel panic?

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 reiniciar
  • kernel.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 de arch/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 el pvpanic 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

Linux
  1. Módulos del kernel de Linux sin los que no podemos vivir

  2. ¿Un “pánico del núcleo”?

  3. ¿Bloqueando las actualizaciones del kernel con Dpkg?

  4. ¿Se puede ejecutar Xcode en Linux?

  5. ¿Cómo depurar el kernel de Linux con GDB y QEMU?

Haz música en Linux con Ardor

Seguimiento del kernel con trace-cmd

Analizar el kernel de Linux con ftrace

Cómo hacer una solicitud POST con cURL

Qué hacer en caso de pánico en el kernel de Linux

Comando make de Linux con ejemplos