GNU/Linux >> Tutoriels Linux >  >> Linux

Puis-je faire quitter Qemu avec un échec lors d'une panique du noyau ?

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émarrer
  • kernel.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 sous arch/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 le pvpanic 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

Linux
  1. Une «panique du noyau»?

  2. Pouvez-vous utiliser des ancres ^ $ avec Ls ?

  3. Bloquer les mises à jour du noyau avec Dpkg ?

  4. Pouvez-vous exécuter Xcode sous Linux ?

  5. Comment déboguer le noyau Linux avec GDB et QEMU ?

Faire de la musique sur Linux avec Ardour

Comment faire une requête POST avec cURL

Que faire en cas de panique du noyau Linux

Linux make Commande avec des exemples

Puis-je créer une distribution Linux avec libc au lieu de glibc

Débogage du noyau Linux avec QEMU