標籤:
跟蹤分析Linux核心的啟動過程沙雨濟 20122137原創作品轉載請註明出處 + 《Linux核心分析》MOOC課程http://mooc.study.163.com/course/USTC-1000029000 一 、實驗內容:使用gdb跟蹤調試核心從start_kernel到init進程啟動。 二 、實驗過程:(附)首先進入實驗樓環境,進入LinuxKernel檔案夾,可以看到檔案裡linux-3.18.6已經編譯完成,前期工作已完成。根據提示代碼,我們將其啟動。代碼:
- cd LinuxKernel/
- qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img
核心啟動完成,可執行檔init被執行起來。輸入help,可看見三個命令。至此,linux系統構建完畢。
接下來我們用gdb跟蹤核心運行過程,在之前代碼中加入參數—S -s,再次啟動核心。代碼:
- qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 關於-s和-S選項的說明:
- # -S freeze CPU at startup (use ’c’ to start execution)
- # -s shorthand for -gdb tcp::1234 若不想使用1234連接埠,則可以使用-gdb tcp:xxxx來取代-s選項
可見,視窗運行被凍結。
另外開啟一個視窗,用gdb把帶有符號表的核心鏡像載入進來,連結gdb server,設定斷點來跟蹤核心。
至此,實驗結束。至於自己搭建的linux環境,由於網速限制並沒有構建成功。
ㄒoㄒ)/~~ 三 、實驗總結:通過本次實驗,初次認識了Linux核心的代碼,通過核心啟動,凍結,恢複和跟蹤 更加深入了對start_kernel函數的執行。
跟蹤分析Linux核心的啟動過程