QEMU -no-reboot
+ kernel CLI kernel.panic=-1
qemu-system-X -no-reboot
Opsi QEMU CLI:membuat QEMU keluar saat tamu mencoba melakukan boot ulangkernel.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 bawaharch/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 untukpvpanic
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