Android的開機流程

Android的開機流程

1. 系統引導bootloader
1) 源碼:bootable/bootloader/*
2) 說明:加電後,CPU將先執行bootloader程序,此處有三種選擇
a) 開機按Camera+Power啓動到fastboot,即命令或SD卡燒寫模式,不加載內核及文件系統,此處能夠進行工廠模式的燒寫
b) 開機按Home+Power啓動到recovery模式,加載recovery.img,recovery.img包含內核,基本的文件系統,用於工程模式的燒寫
c) 開機按Power,正常啓動系統,加載boot.img,boot.img包含內核,基本文件系統,用於正常啓動手機(如下只分析正常啓動的狀況) 2. 內核kernel
1) 源碼:kernel/*
2) 說明:kernel由bootloader加載 3. 文件系統及應用init
1) 源碼:system/core/init/*
2) 配置文件:system/rootdir/init.rc,
3) 說明:init是一個由內核啓動的用戶級進程,它按照init.rc中的設置執行:啓動服務(這裏的服務指linux底層服務,如adbd提供adb支持,vold提供SD卡掛載等),執行命令和按其中的配置語句執行相應功能 4. 重要的後臺程序zygote
1) 源碼:frameworks/base/cmds/app_main.cpp等
2) 說明:zygote是一個在init.rc中被指定啓動的服務,該服務對應的命令是/system/bin/app_process
a) 創建Java Runtime,創建虛擬機
b) 創建Socket接收ActivityManangerService的請求,用於Fork應用程序 c) 啓動System Server
5. 系統服務system server
1) 源碼:frameworks/base/services/java/com/android/server/SystemServer.java
2) 說明:被zygote啓動,經過System Manager管理android的服務(這裏的服務指frameworks/base/services下的服務,如衛星定位服務,剪切板服務等) 6. 桌面launcher
1) 源碼:ActivityManagerService.java爲入口,packages/apps/launcher*實現
2) 說明:系統啓動成功後SystemServer使用xxx.systemReady()通知各個服務,系統已經就緒,桌面程序Home就是在ActivityManagerService.systemReady()通知的過程當中創建的,最終調用 ()啓launcher 7. 解鎖
1) 源碼:
frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*
2) 說明:系統啓動成功後SystemServer調用wm.systemReady()通知WindowManagerService,進而調用PhoneWindowManager,最終經過LockPatternKeyguardView顯示解鎖界面,跟蹤代碼能夠看到解鎖界面並非一個Activity,這是隻是向特定層上繪圖,其代碼了存放在特殊的位置 8. 開機自啓動的第三方應用程序java

相關文章
相關標籤/搜索