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
沒有留言:
張貼留言