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...