GNU/Linux >> Znalost Linux >  >> Linux

Mohu Qemu ukončit se selháním při panice jádra?

QEMU -no-reboot + kernel CLI kernel.panic=-1

  • qemu-system-X -no-reboot Možnost QEMU CLI:způsobí ukončení QEMU, když se host pokusí restartovat
  • kernel.panic=-1 spouštěcí parametr jádra:způsobí, že se Linux pokusí restartovat okamžitě po panice:https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931

Vrátí také 0 jako pvpanic , ale má následující výhody:

  • není třeba nic překompilovat, stačí spouštěcí parametr
  • funguje na arm a aarch64 -M virt stejně jako x86, zatímco pvpanic se zdá být specifický pro x86, protože je pod arch/x86

Testováno s tímto nastavením.

Sledujte panic symbol s GDB

Dalším způsobem, jak toho dosáhnout, může být zjistit, kdy je adresa panic je dosaženo funkce a poté se pokuste QEMU ukončit.

GDB na panic určitě prolomíte jak je vysvětleno na:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642

Ale pak TODO:jak ukončit QEMU se stavem 1? Pomocí monitor quit , zevnitř GDB, která přepošle quit k monitoru QEMU z GDB se opravdu přiblíží, ale ne tak docela, protože neukončí se stavem 0 .

gem5 provádí toto sledování ve výchozím nastavení nativně, což je docela úžasné.

To se děje na:https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73

Možná se vývojáři QEMU mohou touto technikou trochu inspirovat a implementovat něco podobného.


Mám něco, co funguje:

  • Nakonfigurujte (a sestavte) jádro pomocí CONFIG_PVPANIC=y; tím vznikne jádro se zakompilovanou podporou pro pvpanic zařízení.
  • Vyvolejte qemu-system-x86_64 s -device pvpanic volba; to dává Qemu pokyn, aby zachytil (a ukončil) jadernou paniku.

Panika jádra způsobí qemu-system-x86_64 pro úspěšné ukončení (vrácení stavu 0 ), ale alespoň už nevisí.

Mnohokrát děkuji @dsstorefile1 za to, že mě ukázal správným směrem.

Reference:

  • https://cateee.net/lkddb/web-lkddb/PVPANIC.html
  • https://github.com/qemu/qemu/blob/master/docs/specs/pvpanic.txt

Linux
  1. Trasování jádra pomocí trace-cmd

  2. Analyzujte linuxové jádro pomocí ftrace

  3. Proč se mohu přihlásit pomocí částečných hesel?

  1. Nelze vytvořit menuconfig

  2. Jak může být linuxové jádro tak malé?

  3. Mohu vytvořit linuxové distro s libc místo glibc

  1. Moduly linuxového jádra, bez kterých nemůžeme žít

  2. "Panika jádra"?

  3. Nechat Tail -f vyjet na prasklé potrubí?