GNU/Linux >> Belajar Linux >  >> Linux

Bisakah saya membuat Qemu keluar dengan kegagalan pada kepanikan kernel?

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

  • qemu-system-X -no-reboot Opsi QEMU CLI:membuat QEMU keluar saat tamu mencoba melakukan boot ulang
  • kernel.panic=-1 parameter boot kernel:membuat Linux mencoba mem-boot ulang segera setelah panik:https://github.com/torvalds/linux/blob/v4.17/Documentation/admin-guide/kernel-parameters.txt#L2931

Itu juga mengembalikan 0 seperti pvpanic , tetapi memiliki keuntungan sebagai berikut:

  • tidak perlu mengkompilasi ulang apa pun, hanya parameter boot
  • berfungsi pada lengan dan aarch64 -M virt serta x86, sedangkan pvpanic tampaknya khusus x86 karena berada di bawah arch/x86

Diuji dengan pengaturan ini.

Lacak panic simbol dengan GDB

Cara lain untuk melakukannya mungkin dengan mendeteksi kapan alamat dari panic fungsi tercapai, lalu coba buat QEMU keluar.

Anda pasti dapat merusak GDB di panic seperti yang dijelaskan di:https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu/33203642#33203642

Tapi kemudian TODO:bagaimana cara membuat QEMU keluar dengan status 1? Menggunakan monitor quit , dari dalam GDB, yang meneruskan quit ke monitor QEMU dari GDB, menjadi sangat dekat, tetapi tidak cukup karena tidak keluar dengan status 0 .

gem5 melakukan pelacakan ini secara bawaan secara default, yang cukup mengagumkan.

Ini terjadi di:https://github.com/gem5/gem5/blob/1da285dfcc31b904afc27e440544d006aae25b38/src/arch/arm/linux/system.cc#L73

Mungkin pengembang QEMU dapat mengambil inspirasi dari teknik ini dan menerapkan hal serupa.


Saya punya sesuatu yang berfungsi:

  • Konfigurasi (dan bangun) kernel dengan CONFIG_PVPANIC=y; ini menghasilkan kernel dengan dukungan terkompilasi untuk pvpanic perangkat.
  • Aktifkan qemu-system-x86_64 dengan -device pvpanic pilihan; ini menginstruksikan Qemu untuk menangkap (dan keluar dari) kepanikan kernel.

Kepanikan kernel menyebabkan qemu-system-x86_64 untuk keluar dengan sukses (kembalikan status 0 ), tapi setidaknya sudah tidak hang lagi.

Terima kasih banyak kepada @dsstorefile1 karena mengarahkan saya ke arah yang benar.

Referensi:

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

Linux
  1. "Kepanikan kernel"?

  2. Bisakah Anda Menggunakan Jangkar ^ $ Dengan Ls?

  3. Memblokir Pembaruan Kernel Dengan Dpkg?

  1. Bagaimana cara men-debug kernel Linux dengan GDB dan QEMU?

  2. Tidak dapat membuat menuconfig

  3. Bagaimana kernel linux bisa sangat kecil?

  1. Modul kernel Linux kita tidak bisa hidup tanpanya

  2. Membuat Tail -f Keluar Pada Pipa Rusak?

  3. Mengapa Saya Bisa Masuk Dengan Kata Sandi Sebagian??