GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann ich Qemu mit einem Fehler bei einer Kernel-Panik beenden?

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 starten
  • kernel.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 unter arch/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ür pvpanic 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

Linux
  1. Machen Sie Tail -f Exit auf einem kaputten Rohr?

  2. Können Sie Anker ^ $ mit Ls verwenden?

  3. Blockieren von Kernel-Updates mit Dpkg?

  4. Können Sie Xcode unter Linux ausführen?

  5. Kann ich eine Linux-Distribution mit libc anstelle von glibc erstellen?

Machen Sie Musik unter Linux mit Ardour

Kernel-Tracing mit trace-cmd

Analysieren Sie den Linux-Kernel mit ftrace

So stellen Sie eine POST-Anfrage mit cURL

Was tun bei einer Linux-Kernel-Panik?

Linux-make-Befehl mit Beispielen