2010年12月20日 星期一

android boot process

1.power on and boot ROM code execution
    一開始可用的 ram 只有 internal ram
    電源 ok 時會從 boot ROM code 開始執行 這是在 CPU 硬體內建的 code
    boot ROM code 會偵測 boot media 中的 boot loader 並把它 load 到 internal ram 中
    跳到 boot loader 執行

2.boot loader
    boot loader 是用來設定及初始化 memory 並且 load kernel 到 memory 中
    boot loader first stage 一開始偵測並設定 external ram (boot loader 太大時就會分為兩份 1st stage boot loader 會塞到 MBR 中的前 446 bytes)
    設定完成便 load main boot loader(second stage boot loader) 到 external ram
    second stage boot loader 會設定 file system, memory, network support, 還有可能設定 low level memory protections and security options
    接著就從 boot media 中把 kernel load 到 ram 中
    load kernel 完成便跳到 kernel 執行

3.linux kernel
    kernel 設定系統要 run 起來一切所需的事情, interrupt controllers, memory protections, cache and scheduling
    等到 MMU and cache 初始化之後系統可以用 virtual memory 和 啟動 user space process
    kernel 去 system/core/init 下找 init process 並且啟動它成為第一個 user space process

4.init process
    init process 是系統裡所有 process 的祖先
    init process 會去找 init.rc 檔 這是一個 描述一些system service, file system, 或是參數的 script
    init process 去 parse init.rc 並且啟動 system service processes

5.Zygote and Dalvik
    Zygote 被 init process 啟動並且初始化 Dalvik VM

6.the system server
    system server 是系統中第一個跑起來的 java 元件
    他會啟動一些 android service 像是 telephony service 和 bluetooth
    啟動的 service 都寫在 system server 的 run method 裡面 system server 的 source code 就在 frameworks/base/service/java/com/android/server/SystemServer.java

7.boot complete
    一但 system server 跑起來而且系統 boot 完成就會有一個 broadcast action 叫做 ACTION_BOOT_COMPLETE
    在你的 application 中 register 要接收這個 broadcast 就可以在系統 boot 完成後啟動你自己的 service

資料來源:
http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html

沒有留言:

張貼留言