本文介紹在archlinux環境下,如何進行核心使用gdb配合qemu進行除錯。
1. 安裝qemu
2. 編譯linux kernel
選擇最新的核心版本,規避gcc編譯出錯的問題具體步驟如下
2.1 make mrproper
2.2 make arch=i386 menuconfig
選中kernel hacking->compile the kernel with debug info
2.3 make
3.編譯簡單的init程式
#include #include#include
int main(int argc, char**argv)
return0;
}
編譯生成init
#gcc -static -o init hello.c
4. 建立根檔案系統
ddif=/dev/zero of=myinitrd4m.img bs=4096 count=1024
mke2fs -t ext3 myinitrd4m.img
mkdir -p rootfs/dev
mount -o loop myinitrd4m.img rootfs
mknod rootfs/dev/console c 5
1mknod rootfs/dev/ram b 10cp
init rootfs
umount rootfs
建立必要的目錄
裝置檔為了使用 command line 以及開機,我們需要新增三項裝置 console 、 null 以及 ttyama0 ,在 _install/dev 下鍵入
sudo mknod console c 5 1sudo mknod null c 1 3
sudo mknod ttyama0 c 204 64
5. 執行核心
在乙個終端執行
在另乙個終端執行如下命令啟動gdb並除錯
#gdb vmlinux
gdb)target remote:1234
gdb)break start_kernel
gdb)c
開始核心除錯之旅吧
每天學點GDB(二)
預設情況下,日誌是沒有開啟的,所有的除錯資訊都會在螢幕中顯示,即預設是輸出到stdout中的。那麼有沒有可能將輸出到螢幕中的內容儲存到檔案裡呢。答案自然是肯定的,這裡面有個地方遇要注意一下子,具體會在下面的示例中提及。將日誌檔案開啟,不指定檔名的話,預設的檔名是gdb.txt。gdb set log...
每天學點GDB 2
在一中提到gdb最最基本的用法,在本節主要講述一下如何讓gdb在斷點處列印一下診斷資訊,但程式執行本身不會中斷。先稍微改一改源程式 include include int main int argc,char argv return 0 假設要在執行期間檢視i值的變化。如果是step by step...
每天學點GDB 3
預設情況下,日誌是沒有開啟的,所有的除錯資訊都會在螢幕中顯示,即預設是輸出到stdout中的。那麼有沒有可能將輸出到螢幕中的內容儲存到檔案裡呢。答案自然是肯定的,這裡面有個地方遇要注意一下子,具體會在下面的示例中提及。將日誌檔案開啟,不指定檔名的話,預設的檔名是gdb.txt gdb set log...