PID0:
這個就是最後idle task (cpu_idle),它是從start_kernel開始,在一連串的初始化及folk 出pid1 (kernel_init) 及pid2(kthreadd)後,就進入cpu_idle.
cpu_idle 會引用pm_idle,這是函數指標,在initcall 的期間,設定相應的平台對應函數,例如:late_initcall(omap2_pm_init),過此,idle休眠與平台的關係就建立起來了。
其中initcall 是在kernel_init thread 中,於 (pid0)fork init前,do_basic_setup()裡引用do_initcalls()。
initcall 裡會去執行driver 的module_init,其中platform_driver_reg的動作與start_kernel下setup_arch裡的platform_device_reg中,已註冊過的device 作名字的比對配對,然後作對上的driver module init的流程。
PID1:
同上面提到PID1 從kernel_init 這個thread 開始,最終folk 出init 這個process。
值得一提的是,init 最後常駐在記憶体中,它主要是將init.rc的內容,parsing 為action_list 及 service_list, 分類依序配置及執行,同時最後的loop 會去watch 那些不是oneshot 的service,一旦被kill掉時,利用SIGCHLD的通知,把它們再re-start出來。