跟蹤分析Linux內(nèi)核的啟動過程

曹朋輝
原創(chuàng)作品轉(zhuǎn)載請注明出處
《Linux內(nèi)核分析》MOOC課程

計算機有三個法寶:

  • 存儲程序計算機
  • 函數(shù)調(diào)用堆棧
  • 中斷

操作系統(tǒng)兩把寶劍:

  • 中斷上下文的切換-保存現(xiàn)場、恢復(fù)現(xiàn)場
  • 進程上下文的切換

Linux內(nèi)核代碼目錄結(jié)構(gòu)(部分)

arch -CPU相關(guān)
  x86/ (關(guān)心 )
fs -file system
init -  (重要)
  -main.c
    -start_kernel()
ipc -進程間通信
kernel -  (關(guān)鍵)
lib 
mm -memery management 
net

先來看看menu os啟動后的樣子

menuos啟動

這個字符menu os還是挺好看的,如果直接在顯示器全屏顯示效果應(yīng)該更好

好了接下來繼續(xù)做實驗,用GDB跟蹤Linux啟動過程,步驟如下
0 搭建menu OS

# 下載內(nèi)核源代碼編譯內(nèi)核
cd ~/LinuxKernel/
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.18.6.tar.xz
xz -d linux-3.18.6.tar.xz
tar -xvf linux-3.18.6.tar
cd linux-3.18.6
make i386_defconfig
make # 一般要編譯很長時間,少則20分鐘多則數(shù)小時
 
# 制作根文件系統(tǒng)
cd ~/LinuxKernel/
mkdir rootfs
git clone https://github.com/mengning/menu.git  # 如果被墻,可以使用附件menu.zip 
cd menu
gcc -o init linktable.c menu.c test.c -m32 -static –lpthread
cd ../rootfs
cp ../menu/init ./
find . | cpio -o -Hnewc |gzip -9 > ../rootfs.img
 
# 啟動MenuOS系統(tǒng)
cd ~/LinuxKernel/
qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img

# 重新配置編譯Linux使之?dāng)y帶調(diào)試信息
1. 在原來配置的基礎(chǔ)上,make menuconfig選中如下選項重新配置Linux,使之?dāng)y帶調(diào)試信息
2. 
kernel hacking—>
[*] compile the kernel with debug info

3. make重新編譯(時間較長)

1 啟動Linux內(nèi)核并凍結(jié)

qemu -kernel linux-3.18.6/arch/x86/boot/bzImage -initrd rootfs.img -s -S # 關(guān)于-s和-S選項的說明:
# -S freeze CPU at startup (use ’c’ to start execution)
# -s shorthand for -gdb tcp::1234 若不想使用1234端口,則可以使用-gdb tcp:xxxx來取代-s選項

2 打開一個新的終端對內(nèi)核的啟動過程進行跟蹤分析

(gdb)file linux-3.18.6/vmlinux # 在gdb界面中targe remote之前加載符號表(gdb)target remote:1234 # 建立gdb和gdbserver之間的連接,按c 讓qemu上的Linux繼續(xù)運行(gdb)break start_kernel # 斷點的設(shè)置可以在target remote之前,也可以在之后

start_kernel分析:

trap_init 中斷相關(guān)
mm_init 內(nèi)存管理模塊
sched_init 調(diào)度模塊

rest_init 0號進程
kernel_init1號進程

在大概熟悉了start_kernel的代碼之后,我們便可以使用gdb對其做進一步跟蹤分析。

GDB跟蹤
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容