QEMU -no-reboot
+ Kernel-CLI kernel.panic=-1
qemu-system-X -no-reboot
QEMU-CLI-Option:bewirkt, dass QEMU beendet wird, wenn der Gast versucht, neu zu startenkernel.panic=-1
Kernel-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 virt
sowie x86, während pvpanic x86-spezifisch zu sein scheint, da es unterarch/x86
ist
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ürpvpanic
Gerät. - Rufen Sie
qemu-system-x86_64
auf mit dem-device pvpanic
Mö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