QEMU -no-reboot
+ CLI noyau kernel.panic=-1
qemu-system-X -no-reboot
Option CLI QEMU :fait quitter QEMU lorsque l'invité tente de redémarrerkernel.panic=-1
paramètre de démarrage du noyau :oblige Linux à essayer de redémarrer immédiatement après une panique :https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931
Il renvoie également 0
comme pvpanic
, mais présente les avantages suivants :
- pas besoin de recompiler quoi que ce soit, juste un paramètre de démarrage
- fonctionne sur arm et aarch64
-M virt
ainsi que x86, tandis que pvpanic semble spécifique à x86 puisqu'il est sousarch/x86
Testé avec cette configuration.
Suivez le panic
symbole avec GDB
Une autre façon de procéder pourrait être de détecter quand l'adresse du panic
fonction est atteinte, puis essayez de faire quitter QEMU.
Vous pouvez certainement casser GDB sur panic
comme expliqué sur :https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642
Mais alors TODO :comment faire sortir QEMU avec le statut 1 ? Utilisation de monitor quit
, depuis GDB, qui transmet quit
au moniteur QEMU de GDB, se rapproche vraiment, mais pas tout à fait puisqu'il ne sort pas avec le statut 0
.
gem5 effectue ce suivi par défaut de manière native, ce qui est plutôt génial.
Cela se produit à :https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73
Peut-être que les développeurs QEMU peuvent s'inspirer de cette technique et implémenter quelque chose de similaire.
J'ai quelque chose qui fonctionne :
- Configurer (et compiler) le noyau avec
CONFIG_PVPANIC=y
; cela produit un noyau avec un support compilé pour lepvpanic
appareil. - Appelez
qemu-system-x86_64
avec le-device pvpanic
option; ceci indique à Qemu d'attraper (et de quitter) une panique du noyau.
Une panique du noyau provoque qemu-system-x86_64
pour sortir avec succès (retourner le statut 0
), mais au moins ça ne bloque plus.
Un grand merci à @dsstorefile1 pour m'avoir orienté dans la bonne direction.
Références :
- https://cateee.net/lkddb/web-lkddb/PVPANIC.html
- https://github.com/qemu/qemu/blob/master/docs/specs/pvpanic.txt