Kernel
如何在螢幕上不顯示消息的情況下解決核心無法啟動的問題
我一直在嘗試嘗試應用 Ingo Molnar 的實時更新檔,但遇到了一個空白螢幕並且根本沒有消息的情況。即核心恐慌,或其他。
鑑於我想更好地了解核心,特別是實時更新檔,是否有一套方法可以讓我了解在這種狀態下出了什麼問題?
是否有寫在某處的日誌,我可以通過將磁碟插入另一個 Linux 系統來研究,或者核心配置選項會使核心更加冗長,並可能產生某種工件或產生記憶體轉儲的方法?
事實上,核心開發人員使用什麼來測試和排除核心故障?
非常感謝您的幫助!
確保不遺漏核心消息的一種方法是在虛擬機中對其進行調試。
例如,以下腳本用於
qemu
啟動具有自定義核心的虛擬機:qemu-system-x86_64\ -kernel arch/x86/boot/bzImage\ -drive file=/home/lgeorget/VM/image.qcow2,if=virtio\ -append "root=/dev/vda1"\ -netdev user,id=mynet0 -device e1000,netdev=mynet0\ -enable-kvm\ -S
這裡的重要選項是
-S
讓 qemu 啟動 GDB 伺服器並等待調試器在啟動前準備好。在另一個控制台中,轉到您的 Linux 開發樹,在那裡您編譯了您的自定義核心,並在此處啟動 GDB
gdb vmlinux
以載入核心符號。接下來,在提示符下,鍵入:target remote :1234
這將連接到 qemu 啟動的 gdb 伺服器(在 localhost 上,預設為埠 1234)。然後,您幾乎可以將調試器用於任何程序,設置斷點,使用 command 繼續執行
continue
等。您應該能夠檢查和轉儲記憶體,如果您想分析它們,還可以複製日誌。請注意,這不會增加核心的詳細程度。網上有很多教程,還有一些官方文件。
https://stackoverflow.com/questions/11408041/how-to-debug-the-linux-kernel-with-gdb-and-qemu http://wiki.osdev.org/Kernel_Debugging http://elinux.org/Debugging_The_Linux_Kernel_Using_Gdb