核心的編譯和環境的搭建過程如圖
分析核心原始碼
#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...