1)bootloader(引導載入器)執行到一定階段後,將載入並啟動linux核心。準備啟動核心時,bootloader需要傳入核心使用的啟動引數。檢視啟動引數可使用下面的命令:
cat /proc/cmdline
root=/dev/nfs nfsroot=192.168.6.158:/home/houshuaihui/nfs/bcm7241-rootfs rw, ip=192.168.6.159:192.168.6.158:192.168.88.1:255.255.0.0:ccdt-stb:eth0:on mtdparts=spi0.0:1m(cfe),64
k(macadr),64k(nvram),64k(stbid),64k(disp_format),64k(encryption),-(others);brcmnand.0:10m(kernel),20m(recovery),10m(splash),10m(misc),300m(ubi_fs),1200m(ubi_data),400m(ubi_cache),80m(ubi_dvb) init=/init bmem=128m@128m bmem=345m@512m
2)linux核心執行和載入根檔案系統。根檔案系統可以有核心引數「root」來指定。如上一條紅色標註(root=/dev/nfs
),標示使用nfs網路檔案系統。
3)linux核心執行根檔案系統中乙個名稱為init的可執行程式,作為使用者空間的第乙個程序。init程式執行後,程式將會在根目錄中找到名稱為init.rc的檔案作為啟動指令碼。
4)掛載各個檔案系統,當幾個檔案系統(system、data、cache等
)被載入後,才可以使用system/lib中的動態庫和system/bin中的可執行程式。 5)
系統各個程序的執行,init可執行程式後,其執行的第乙個子程序的名稱為uevent的可執行程式。它在系統的初始化的最初階段執行,在預設的init.rc中,on early-init定義了啟動uevent的可執行程式。init執行完成初始化後,將會按照init.rc指令碼中的內容執行系統中的各個服務。
使用ps命令可以看到系統中的各個程序:
user pid ppid vsize rss wchan pc name
root 1 0 412 260 00000000 0008bd64 s /init
root 2 0 0 0 00000001 00000000 s kthreadd
root 3 2 0 0 00000000 00000000 s ksoftirqd/0
root 4 2 0 0 00000000 00000000 s kworker/0:0
system 2136 1 1100 308 00000000 7742db84 s /system/bin/servicemanager
root 2138 1 5112 860 ffffffff 77d65544 s /system/bin/vold
root 2273 1 416796 16920 ffffffff 7751ed34 s zygote
1號程序為使用者空間程序init,2號程序為核心空間程序kthreadd。通常情況下使用者空間的各個程序均以1號程序作為祖先,核心空間程序均以2號程序作為祖先。(ppid為父程序號)
android系統啟動簡述
下面我將用最簡單的話來描述這個過程 1.bootloader主要是在系統載入前,初始化硬體裝置,建立記憶體空間的映像圖,為最終呼叫系統核心準備好環境,常見的引導程式就是uboot,uboot的第一條指令從cpu arm920t start.s檔案開始,它最終跳轉到核心。若使用者在啟動剛開始按了指定的...
Android系統啟動
rom是唯讀儲存器 read only memory 的簡稱,是一種只能讀出事先所存資料的固態半導體儲存器。其特性是一旦儲存資料就無法再將之改變或刪除。通常用在不需經常變更資料的電子或電腦系統中,並且資料不會因為電源關閉而消失。bootloader 參考計算的bios,系統啟動載入器。linux k...
Android系統啟動過程
android系統啟動過程由以下幾個大步驟組成 bootrom,bootloader,linux kernel,android啟動 bootrom沒有源 bootloader 主要在 bootable下,包括對normal startup,及recovery mode,fastboot mode的處...