kern/init_main.c
mi_startup(), 171行. 由 locore 呼叫, locore 為 kernel binary 最先被執行
的程式區段. locore 對機器環境進行初始, 準備一個讓 kernel 可以
順利執行的環境, 例如準備一個可以讓 gcc compile 的式碼執行的
環境. 在 locore 的最後會呼叫, mi_startup(). mi_startup() 利
用 linker 會主動將同一 section 的資料組合成連續區塊的特性, 收
集所有 sub-system 的 initial function. 這部分功能由 macro
SYSINIT(), sys/kernel.h, 225行, 達成. mi_startup 依據收集到
的資料, 依其順序執行各 sub-system 的 initial function. 各個
sub-system 的執行順序定義在 sysinit_sub_id, sys/kernel.h, 107行,
mi_startup 從小到大依序執行. 同一 sub-system 若有多個 initial
function, 則由 sysinit_elem_order, sys/kernel.h, 163行, 定
義之次序執行.