Android的開機流程

1.    系統引導bootloader

1)        源碼:bootable/bootloader/*

2)        說明:加電後,CPU將先執行bootloader程序,此處有三種選擇

a)        開機按Camera+Power啓動到fastboot,即命令或SD卡燒寫模式,不加載內核及文件系統,此處可以進行工廠模式的燒寫

b)        開機按Home+Power啓動到recovery模式,加載recovery.imgrecovery.img包含內核,基本的文件系統,用於工程模式的燒寫

c)        開機按Power,正常啓動系統,加載boot.imgboot.img包含內核,基本文件系統,用於正常啓動手機(以下只分析正常啓動的情況)

2.    內核kernel

1)        源碼:kernel/*

2)        說明:kernelbootloader加載

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()通知的過程中建立的,最終調用startHomeActivityLocked()launcher

7.    解鎖

1)        源碼:
frameworks/policies/base/phone/com/android/internal/policy/impl/*lock*

2)        說明:系統啓動成功後SystemServer調用wm.systemReady()通知WindowManagerService,進而調用PhoneWindowManager,最終通過LockPatternKeyguardView顯示解鎖界面,跟蹤代碼可以看到解鎖界面並不是一個Activity,這是隻是向特定層上繪圖,其代碼了存放在特殊的位置

8.    開機自啓動的第三方應用程序

1)        源碼:
frameworks/base/services/java/com/android/server/am/ActivityManagerService.java

2)        說明:系統啓動成功後SystemServer調用ActivityManagerNative.getDefault().systemReady()通知ActivityManager啓動成功,ActivityManager會通過置變量mBooting,通知它的另一線程,該線程會發送廣播android.intent.action.BOOT_COMPLETED以告知已註冊的第三方程序在開機時自動啓動。

9.    總結
綜上所述,系統層次關於啓動最核心的部分是zygote(app_process)system serverzygote它負責最基本的虛擬機的建立,以支持各個應用程序的啓動,而system server用於管理android後臺服務,啓動步驟及順序。

10. 參考

http://blog.csdn.net/basonjiang_sz/category/648399.aspx

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章