Linux核心啟動原始碼跟蹤 gdb除錯篇

2021-06-29 06:51:02 字數 2891 閱讀 9015

核心的編譯和環境的搭建過程如圖

分析核心原始碼

#include 13

14static struct signal_struct init_signals = init_signals(init_signals);

15static struct sighand_struct init_sighand = init_sighand(init_sighand);

1617/* initial task structure */

18struct task_struct init_task = init_task(init_task);

19export_symbol(init_task);

2021/*

22 * initial thread structure. alignment of this is handled by a special

23 * linker map entry.

24 */

25union thread_union init_thread_union __init_task_data =

26 ;

init/init_task.c

0號程序pcb初始化方法:核心從init/main.c裡面的start_kernel函式開始執行, 如下**設定了中斷初始化:

/*

525 * interrupts are still disabled. do necessary setups, then

526 * enable them

527 */

528 boot_cpu_init();

529 page_address_init();

530 pr_notice("%s", linux_banner);

531 setup_arch(&command_line);

532 mm_init_cpumask(&init_mm);

533 setup_command_line(command_line);

534 setup_nr_cpu_ids();

535 setup_per_cpu_areas();

536 smp_prepare_boot_cpu(); /* arch-specific boot-cpu hooks */

537538 build_all_zonelists(null, null);

539 page_alloc_init();

540541 pr_notice("kernel command line: %s\n", boot_command_line);

542 parse_early_param();

可見在上述過程中對cpu進行必要的設定準備好中斷的初始環境

如下**是start_kernel中對記憶體,陷阱等的初始化入口

/*

554 * these use large bootmem allocations and must precede

555 * kmem_cache_init()

556 */

557 setup_log_buf(0);

558 pidhash_init();

559 vfs_caches_init_early();

560 sort_main_extable();

561 trap_init();

562 mm_init();

以下是rest_init部分的相關**初始化了第乙個使用者態程序並且使用kernel_thread初始化管理系統資源

呼叫idle程序,這個idle程序建立了1號程序kernel_init和其他服務的核心執行緒

static noinline void __init_refok rest_init(void)

394

以下下是init_task的具體專案:

#define init_task(tsk)	\

174{ \

175 .state = 0, \

176 .stack = &init_thread_info, \

177 .usage = atomic_init(2), \

178 .flags = pf_kthread, \

179 .prio = max_prio-20, \

180 .static_prio = max_prio-20, \

181 .normal_prio = max_prio-20, \

182 .policy = sched_normal, \

183 .cpus_allowed = cpu_mask_all, \

184 .nr_cpus_allowed= nr_cpus, \

185 .mm = null, \

186 .active_mm = &init_mm,

萬輝(與最後申請證書的姓名務必一致) + 《linux核心分析》mooc課程

linux核心原始碼

1.機器當前使用的核心版本 apuser jianzhangubtnb uname a linux jianzhangubtnb 3.2.0 23 generic 36 ubuntu smp tue apr 10 20 39 51 utc 2012 x86 64 x86 64 x86 64 gnu ...

Linux核心原始碼目錄

linux核心原始碼目錄 1 arch architecture的縮寫,意思是架構,九鼎在做移植的時候就刪掉了。其他的目錄都跟你沒有任何的關係,所以你完全可以把他們刪除。2 block 英文是塊的意思,表示是塊裝置。以塊 多個位元組組成的整體,以塊為單位來整體訪問 比如說我們的sd卡,inand n...

phpcms原始碼跟蹤(1)

本次跟蹤解決幾個問題 1 快取檔案從 來,過程中被刪除了怎麼辦 2 模板html是如何被引入的 進入首頁時,通過最初的呼叫,進入控制器 phpcms modules content index.php init 中 public function init else siteid globals s...