跟蹤分析Linux核心的啟動過程

2021-08-14 04:41:18 字數 1216 閱讀 9483

1. 除錯gdb

(1)執行qemu

(2)執行gdb並鏈結remote

(3)設定斷點break start_kernel,break rest_init

2. 分析start_kernel

在斷點處停止:

分析start_kernel

asmlinkage __visible void __init start_kernel(void)
函式中最後一行呼叫

rest_init();
進入rest_init()

393static noinline void __init_refok rest_init(void)

394

檢視cpu_startup_entry

256void cpu_startup_entry(enum cpuhp_state state)

257

進入cpu_idle_loop檢視

189static void cpu_idle_loop(void)

190230

239 preempt_set_need_resched();

240 tick_nohz_idle_exit();

241 __current_clr_polling();

242249 smp_mb__after_atomic();

250251 sched_ttwu_pending();

252 schedule_preempt_disabled();

253 }

254}

在cpu_idle_loop中while(1)一直迴圈,作為零號程序等待新的程序的建立

3. 總結

linux核心的啟動過程就是:

start_kernel啟動,呼叫rest_init函式,生成零號程序並一直迴圈執行;

零號程序中又通過kernel_init建立了一號程序,並通過kthread建立了其他的核心執行緒。

跟蹤分析Linux核心的啟動過程

在linux作業系統中,系統的啟動都是從start kernel 這個函式開始的。start kernel 是核心的彙編與 語言的交接點,在該函式以前,核心的 都是用彙編寫的,完成一些最基本的初始化與環境設定工作,比如核心 載入記憶體並解壓縮 現在的核心一般都經過壓縮 cpu 的最基本初始化,為c ...

跟蹤分析Linux核心的啟動過程

說明 在實驗樓裡做該實驗時,發現實驗樓環境老卡死,折騰幾個小時都如此,根本沒有辦法完成作業。因此此處只能提供一張截圖。後面的內容都是根據老師的課程整理出來的。開啟shell 使用gdb跟蹤除錯核心 gdb file linux 3.18.6 vmlinux 說明 在gdb介面中targe remot...

實驗三 跟蹤分析Linux核心的啟動過程

linux核心分析 mooc課程 一 linux核心原始碼 arch目錄下儲存有各個平台的源 fs檔案系統linux核心的原始碼放在kernel目錄中。原始碼的目錄結構如下圖所示 二 乙個簡單的linux系統menuos 三 使用gdb跟蹤除錯linux核心的方法 s freeze cpu at s...