QEMU -no-reboot + CLI noyau kernel.panic=-1
qemu-system-X -no-rebootOption CLI QEMU :fait quitter QEMU lorsque l'invité tente de redémarrerkernel.panic=-1paramè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 virtainsi 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 lepvpanicappareil. - Appelez
qemu-system-x86_64avec le-device pvpanicoption; 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