QEMU -no-reboot + Kernel-CLI kernel.panic=-1
qemu-system-X -no-rebootQEMU-CLI-Option:bewirkt, dass QEMU beendet wird, wenn der Gast versucht, neu zu startenkernel.panic=-1Kernel-Boot-Parameter:lässt Linux nach einer Panik sofort einen Neustart versuchen:https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931
Es gibt auch 0 zurück wie pvpanic , hat aber folgende Vorteile:
- keine Neukompilierung nötig, nur ein Boot-Parameter
- funktioniert auf arm und aarch64
-M virtsowie x86, während pvpanic x86-spezifisch zu sein scheint, da es unterarch/x86ist
Getestet mit diesem Setup.
Verfolgen Sie die panic Symbol mit GDB
Eine andere Möglichkeit, dies zu tun, könnte darin bestehen, zu erkennen, wann die Adresse des panic Funktion erreicht ist, und versuchen Sie dann, QEMU zum Beenden zu bringen.
Sie können GDB definitiv auf panic brechen wie erklärt unter:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642
Aber dann TODO:Wie kann man QEMU mit Status 1 beenden? Mit monitor quit , innerhalb von GDB, die quit weiterleitet zum QEMU-Monitor von GDB, kommt sehr nahe, aber nicht ganz, da es nicht mit dem Status 0 beendet wird .
gem5 führt dieses Tracking standardmäßig nativ durch, was ziemlich großartig ist.
Dies geschieht unter:https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73
Vielleicht können sich QEMU-Entwickler von dieser Technik inspirieren lassen und etwas Ähnliches implementieren.
Ich habe etwas, das funktioniert:
- Konfiguriere (und baue) den Kernel mit
CONFIG_PVPANIC=y; dies erzeugt einen Kernel mit einkompilierter Unterstützung fürpvpanicGerät. - Rufen Sie
qemu-system-x86_64auf mit dem-device pvpanicMöglichkeit; dies weist Qemu an, eine Kernel-Panik abzufangen (und zu beenden).
Eine Kernel Panic verursacht qemu-system-x86_64 um erfolgreich zu beenden (Rückgabestatus 0 ), aber wenigstens hängt es nicht mehr.
Vielen Dank an @dsstorefile1 für den Hinweis auf die richtige Richtung.
Referenzen:
- https://cateee.net/lkddb/web-lkddb/PVPANIC.html
- https://github.com/qemu/qemu/blob/master/docs/specs/pvpanic.txt