Android 啟動流程簡介

來源:互聯網
上載者:User

標籤:android   style   blog   java   c   tar   

Android 啟動流程: 1.  linux OS    Bootloader -> Linux kernel2.  Android/Init Runtime    Init Process -> Services -> Zygote/VM -> System Server3.  Framework HomeScreen    Server Manager -> Home Luncher如:Android 啟動流程: 1. 系統引導 Bootloader    1). 源碼 bootable/bootloader    2). 上電後,CPU將先執行bootloader 程式,此時有三種情況:          a. fastboot 模式即命令或SD卡燒寫入模式,不載入核心及檔案系統,此處可以進行原廠模式的燒寫          b. recovery 模式,載入recovery.img, 它包含有核心及基本的檔案系統,用於工程模式燒寫          c. 正常啟動,載入boot.img, 它包含核心及基本的檔案系統,用於正常啟動手機。     bootloader(組合語言)進行底層初始化,並載入核心代碼,最終跳轉到核心的boot程式。    簡單地說,BootLoader是在作業系統運行之前啟動並執行一段程式,它可以將系統的軟硬體環境帶到一個合適狀態,為運行作業系統做好準備。這樣描述是比較抽象的,但是它的任務確實不多,終極目標就是把OS拉起來運行。 2.  核心Kernel    1)kernel核心初始化(記憶體初始化,開啟中斷,初始化進程表等等);
    2)驅動初始化;
    3)啟動核心後台(daemons)線程
    4)安裝根(root)檔案系統
    5) 啟動第一個使用者級進程init     kernel 就由bootloader 載入的,源碼:kernel 3.    Init     1) 源碼:system/core/init/* 
    2) 設定檔:system/rootdir/init.rc
    init進程的程式在system/core/init/init.c裡,它是android系統特定的初始化程式, 是一個由核心啟動的使用者級進程,最終它會以後台進程(daemon)的形式一直存在。該進程主要有如下功能:    3)建立/安裝裝置檔案/進程檔案/系統檔案節點;    4)解析啟動/init.rc和/init.<machine_name>.rc;
    5)顯示Logo畫面;
    6)開啟Device Socket,Property Socket, child進程通訊Socket;
    7)執行指令碼中指定的命令或動作,啟動指定服務;如最基本的servicemanamger 及Zygote
    8)進入死迴圈:檢查是否有action需要執行;是否需要restart某服務;監聽特定事件(child進程退出,Device相關事件,Property事件,新服務啟動) 4. Native 服務啟動  --servicemanagerServicemanager屬於NativeService。在執行init.rc時就會啟動,與Zygote一樣。在init.rc指令碼中Servicemanager的描述:serviceservicemanager/system/bin/servicemanager
源碼:frameworks/native/cmds/servicemanager/service_manager.c
 根據system/core/rootdir/init.rc, init進程通過open_keychord()從service_list(之前從.rc中解析出來的)中把所有service資訊寫入特定檔案,handle_keychord()逐個讀出然後調用service_start()建立(先fork()然後在子進程中調用execve()來執行相應的服務程式)指定的service進程。這裡建立的service都屬於native服務,運行在Linux空間,通過socket向上層提供特定的服務。例如: console: shell console服務.
servicemanager: Binder服務管理員,管理所有Android系統服務
vold: volume Daemon,支援儲存外設的熱插拔
adbd: Android Debug Bridge Daemon,提供adb相關功能
mountd: 裝置安裝Daemon,負責裝置安裝及狀態通知
debuggerd: Debug Daemon,處理調試進程的請求
rild: 無線介面層(radio interface layer)Daemon.
zygote: 啟動Android Dalvik Runtime並負責進程孵化服務.
mediaserver: 啟動AudioFlinger, MediaPlayerService and CameraService.負責多媒體播放相關的功能,包括音視頻解碼、顯示輸出等。
installd: 包安裝Daemon,提供包安裝/刪除/dex處理等底層功能 5. Zygote重要的背景程式zygote   1) 源碼:frameworks/base/cmds/app_process/app_main.cpp等 
   2) 說明:zygote是一個在init.rc中被指定啟動的服務,該服務對應的命令是/system/bin/app_process 
        a)  建立Java Runtime,建立虛擬機器 
        b) 建立Socket接收ActivityManangerService的請求,用於Fork應用程式 
        c) 啟動System Server 
6.  系統服務system server 
1)        源碼:frameworks/base/services/java/com/android/server/SystemServer.java 
2)        說明:被zygote啟動,通過System Manager管理android的服務(這裡的服務指frameworks/base/services下的服務,如衛星定位服務,剪下板服務等) 
System Server作為Zygote的第1個子進程,是Android Framework的核心,它主要負責Android系統初始化並啟動其他服務。其它的Android服務都由SystemServer啟動並運行在該進程空間 7.   案頭   l auncher 1)        源碼:ActivityManagerService.java為入口,packages/apps/launcher*實現 
2)        說明:系統啟動成功後SystemServer使用xxx.systemReady()通知各個服務,系統已經就緒,傳統型程式Home就是在ActivityManagerService.systemReady()通知的過程中建立的,最終調用 ()啟launcher  Android 端啟動過程詳解1. init 進程啟動   a. system/core/rootdir/init.rc   b. system/core/init/init.c  ,init_parser.c   c. init 通過init.c 裡的main ->init_parse_config_file("/init.rc")->parse_config->parse_new_section->parse_service-> 最終將所有service 加入到service_list        Ref:http://blog.csdn.net/maxleng/article/details/5508372http://blog.sina.com.cn/s/blog_415bf60a0100wxd9.htmlhttp://wenku.baidu.com/view/42ebf459be23482fb4da4c33

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.