一. 內核鏡像Izmage被bootloader裝載到內存中。zImage的入口代碼是自引導程序。包含一些初始化代碼。第一條指令在head.S文件中。解壓內核,然後調用call_kernel啟動vmlinux(解壓後在正確位置上的內核)
二. vmlinux開始部分的代碼對應的文件也叫head.S.這個是體系結構相關的代碼,進行頁表的初級初始化後打開MMU,跳轉到start_kernel函數中去。
三. start_kernel負責初始化內核的各個子系統,然後調用rest_init().
四.reset_init 調用kernel_thread啟動init內核線程,執行init函數,init函數負責掛載跟文件系統,初始化設備驅動程序,啟動用戶空間的init進程。這些工作是內核中最重要的過程
五. 用戶空間init進程執行,init程序在根文件系統的/sbin下,負責啟動一系列程序與腳本文件。init進程是所有的進程的發起著與控制者。init進程有兩種啟動方式:
1.system V啟動流程,這是一般桌面版Linux的啟動方式,如Ubuntu。
(1).執行的地一個腳本是/etc/rc.d/rc.sysinit,包含如下內容:檢查磁盤,掛在其他的文件系統等
(2).執行缺醒的運行級別,這個在/etc/inittab中確定
(3).執行/etc/rc.c/rc.local腳本文件,用戶可以在這個文件中添加啟動後需要執行的命令
(4).執行/bin/login程序,提示用戶輸入用戶名與密碼,如果吻合則初始化環境,並將控制權轉交shell
2.busybox 啟動流程,這是嵌入式系統的啟動流程,init程序在/sbin下面,這個是一個符號鏈接,鏈接到/bin/busybox上
(1).為init進程設置信號處理程序
(2).對控制台進行初始化(串口終端)
(3).解析/etc/inittab文件
(4).運行/etc/init.d/rcS腳本,這個腳本設置一些環境變量,運行啟動時的程序