/******************************************************************************************** ********************************************************************************************/ 第一步:系統(tǒng)引導(dǎo)bootloader,,即RK29xxLoaderXXX.bin文件 加電后,CPU將先執(zhí)行 bootloader程序,然后bootloader首先會讀寄存器地址base + APP_DATA1的內(nèi)容, 根據(jù)這個地址的值決定是否進(jìn)入recovery模式或者其它模式。bootloader還會讀取MISC分區(qū)第一塊的內(nèi)容,, 決定進(jìn)入recovery模式還是升級基帶Baseband Processor(BP)或做其它事情 而上述寄存器與分區(qū)的值是有按鍵觸發(fā)或者軟件觸發(fā)的,。 a) 開機按reset+返回鍵,系統(tǒng)進(jìn)入recovery模式,,加載recovery.img,,recovery.img包含內(nèi)核,基本的文件系統(tǒng),,用于工程模式的燒寫 b) 開機按Power,,正常啟動系統(tǒng),加載boot.img,,boot.img包含內(nèi)核,,基本文件系統(tǒng),用于正常啟動機器(以下只分析正常啟動的情況)
第二步: 啟動內(nèi)核kernel 1) 源碼:kernel/* 2) 說明:kernel由bootloader加載 第三步: 文件系統(tǒng)(rootfs)及應(yīng)用初始化(init) 1) 源碼:system/core/init/* 2) 配置文件:system/rootdir/init.rc,, 3) 說明:init是一個由內(nèi)核啟動的用戶級進(jìn)程,,它按照init.rc中的設(shè)置執(zhí)行:啟動服務(wù)(這里的服務(wù)指linux底層服務(wù),如adbd提供adb支持,,vold提供SD卡掛載等),,執(zhí)行命令和按其中的配置語句執(zhí)行相應(yīng)功能 第四步: 重要的后臺程序zygote 1) 源碼:frameworks/base/cmds/app_main.cpp等 2) 說明:zygote是一個在init.rc中被指定啟動的服務(wù),該服務(wù)對應(yīng)的命令是/system/bin/app_process a) 建立Java Runtime,,建立虛擬機 b) 建立Socket接收ActivityManangerService的請求,,用于Fork應(yīng)用程序 c) 啟動SystemServer 第五步: 系統(tǒng)服務(wù)system server 1) 源碼:frameworks/base/services/java/com/android/server/SystemServer.java 2) 說明:被zygote啟動,通過System Manager管理android的服務(wù)(這里的服務(wù)指frameworks/base/services下的服務(wù),,如衛(wèi)星定位服務(wù),,剪切板服務(wù)等) 第六步:桌面launcher 1) 源碼:ActivityManagerService.java為入口,packages/apps/launcher*實現(xiàn) 2) 說 明:系統(tǒng)啟動成功后SystemServer使用xxx.systemReady()通知各個服務(wù),,系統(tǒng)已經(jīng)就緒,,桌面程序Home就是在 ActivityManagerService.systemReady()通知的過程中建立的,最終調(diào)用 ()啟launcher 第七步: 解鎖 1) 源碼: 2) 說 明:系統(tǒng)啟動成功后SystemServer調(diào)用wm.systemReady()通知WindowManagerService,,進(jìn)而調(diào)用 PhoneWindowManager,,最終通過LockPatternKeyguardView顯示解鎖界面,跟蹤代碼可以看到解鎖界面并不是一個 Activity,,這是只是向特定層上繪圖,,其代碼了存放在特殊的位置 第八步: 開機自啟動的第三方應(yīng)用程序 1) 源碼: 2) 說 明:系統(tǒng)啟動成功后SystemServer調(diào)用ActivityManagerNative.getDefault().systemReady()通知ActivityManager啟動成功,ActivityManager會通過置變量mBooting,,通知它的另一線程,該線程會發(fā)送廣播android.intent.action.BOOT_COMPLETED以告知已注冊的第三方程序在開機時自動啟動,。 第九步: 總結(jié) 10. 參考 http://blog.csdn.net/basonjiang_sz/category/648399.aspx
|
|