GNU/Linux >> Linux Esercitazione >  >> Linux

Posso far uscire Qemu con errore in caso di kernel panic?

QEMU -no-reboot + CLI del kernel kernel.panic=-1

  • qemu-system-X -no-reboot Opzione QEMU CLI:fa uscire QEMU quando il guest prova a riavviarsi
  • kernel.panic=-1 parametro di avvio del kernel:fa in modo che Linux tenti di riavviarsi immediatamente dopo un errore:https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931

Restituisce anche 0 come pvpanic , ma presenta i seguenti vantaggi:

  • non è necessario ricompilare nulla, solo un parametro di avvio
  • funziona su arm e aarch64 -M virt così come x86, mentre pvpanic sembra specifico per x86 poiché è sotto arch/x86

Testato con questa configurazione.

Traccia l'panic simbolo con GDB

Un altro modo per farlo potrebbe essere quello di rilevare quando l'indirizzo del panic viene raggiunta la funzione, quindi provare a far uscire QEMU.

Puoi sicuramente rompere GDB su panic come spiegato su:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642

Ma poi TODO:come far uscire QEMU con stato 1? Usando monitor quit , dall'interno di GDB, che inoltra quit al monitor QEMU da GDB, si avvicina molto, ma non del tutto poiché non esce con lo stato 0 .

gem5 esegue questo monitoraggio per impostazione predefinita in modo nativo, il che è davvero fantastico.

Questo accade su:https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73

Forse gli sviluppatori di QEMU possono trarre ispirazione da questa tecnica e implementare qualcosa di simile.


Ho qualcosa che funziona:

  • Configura (e compila) il kernel con CONFIG_PVPANIC=y; questo produce un kernel con supporto compilato per pvpanic dispositivo.
  • Richiama qemu-system-x86_64 con il -device pvpanic opzione; questo indica a Qemu di catturare (e uscire) da un kernel panic.

Un kernel panic causa qemu-system-x86_64 per uscire correttamente (restituire lo stato 0 ), ma almeno non si blocca più.

Mille grazie a @dsstorefile1 per avermi indicato la giusta direzione.

Riferimenti:

  • https://cateee.net/lkddb/web-lkddb/PVPANIC.html
  • https://github.com/qemu/qemu/blob/master/docs/specs/pvpanic.txt

Linux
  1. Un "panico del kernel"?

  2. Puoi eseguire Xcode in Linux?

  3. Come eseguire il debug del kernel Linux con GDB e QEMU?

  4. Impossibile creare menuconfig

  5. Come può un kernel Linux essere così piccolo?

Crea musica su Linux con Ardor

Come effettuare una richiesta POST con cURL

Cosa fare in caso di panico del kernel Linux

Linux make Command con esempi

Posso creare una distribuzione Linux con libc invece di glibc

Debug del kernel Linux con QEMU