Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android白話啟動篇(Android booting process)

Android白話啟動篇(Android booting process)

編輯:關於Android編程

今天我們將深入Android的啟動流程,從用戶按下開機鍵到Android界面的過程。在谷歌上搜索“Android boot process”會得到很多很好英文文章,講解Android啟動這一過程,每個人講述的角度不一樣,通過閱讀,對於Android的理解將會更加深刻。鏈接在此,打不開的請翻牆!謝謝!

\

 

首先,貼出一張比較宏觀的流程圖,主要分為六步:

\

 

  1. Step 1 : Power On and SystemStartup
  2. Step 2 : Bootloader
  3. Step 3: Kernel
  4. Step 4: init process
  5. Step 5: Zygote and Dalvik
  6. Step 6: SystemService or Services

 

Step 1 : Power On and SystemStartup

開機鍵按下,CPU上電,固化在CPU內部的ROM程序運行,加載放在某固定地址的bootloader到內存(RAM)中,然後PC指針跳過去執行bootloader。

Step 2 : Bootloader

Bootloader核心任務就是要初始化內存,把boot.img(kernel + ramdisk)從flash上copy到RAM上面,然後交出對CPU的控制權給kernel。當然,這個過程bootloader還會初始化一下LCM、串口、時鐘神馬的。

Step 3: Kernel

PC指針指向Kernel區,kernel要做的事情比較多:kernel剛開始會匹配一下硬件CPU和板子,後面軟件會創建內存頁表,開啟MMU(虛擬內存管理單元,負責把邏輯地址轉化為物理地址),CPU尋址就會通過MMU獲取實際物理地址。虛擬內存管理是操作系統的一個重要概念,用戶進程使用邏輯地址,它看到4G的內存空間,而且每個進程都認為自己有這麼大的空間。對於虛擬地址如何轉為物理地址,這個轉換過程有操作系統和CPU共同完成.操作系統為CPU設置好頁表。CPU通過MMU單元進行地址轉換。接下來就是常見系統第一個進程init進程!

Step 4: init process

Init 進程首先進行一系列的硬件初始化,然後通過命令行傳遞過來的參數掛載根文件系統。掛載procfs,sysfs文件系統,啟動udev創建設備驅動節點。對於Android來講,解析init.rc是進入Android世界的關鍵核心任務。

init process can be found at init : /system/core/init init.rc file can be found in source tree at /system/core/rootdir/init.rc

Init.rc配置很多本地的守護進程(本地服務native service)其實就是一個個進程死循環while(1)! 這些進程擁有自己的地址空間,受到Linux process manager策略的約束,不斷地被排隊,被調度!關於進程管理這一塊可以看下書,基本模型如下(這張圖比較標准,網上很多圖大同小異!):

\

 

言歸正傳,下表就是init.rc中啟動的主要的本地服務:

Action / Service

Description

on early-init

Set init and its forked children's oom_adj.
Set the security context for the init process.

on init

setup the global environment
Create cgroup mount point for cpu accounting
and many

on fs

mount mtd partitions

on post-fs

change permissions of system directories

on post-fs-data

change permission of /data folders and sub folders

on boot

basic network init ,Memory Management ,etc

service servicemanager

start system manager to manage all native services like location, audio, shared preference etc..

service zygote

start zygote as app_process


 

到這個階段你會看到Android的log顯示在顯示屏上面!

Step 5: Zygote and Dalvik
Step 6: SystemService or Services

 

第五階段是一些本地守護進程和VM虛擬機的啟動,其中重點關注兩個進程:①servicemanager②service zygote 。

Zygote是受精卵的意思,其深意就是不斷分裂Android應用進程,豐富Android的世界。Servicemanager是系統服務的管理者,這些系統服務包括硬件服務和軟件服務,一般SDK都定義好了這些服務提供的API接口,如果我們自己加上自己的系統服務也是可行的。同事servicemanager也是BINDER的管理者,binder是Android提出的進程通信的一種機制,研究起來挺復雜的,這裡我們就知道它的作用就好了。

\

 

Binder的C/S模型如上圖,任何一個環節都需要binder的通信。因為三者處於三個進程當中!

舉個例子:

Zygote啟動後會fork出嫡長子system server進程,這個進程是干什麼的呢?就是上面圖中server的角色注冊一大堆系統服務,前面說了,這些服務有硬件服務和軟件服務!client一般就是以APP的形式存在,也是有Zygotefork出來的進程。這個過程也可以從下圖中窺知一二:

\

 

這裡補充一下VM虛擬機的啟動,受精卵zygote啟動了Android Runtime,開啟了Java世界的大門,下面是Zygote總結:

Zygote是在android系統中創建java世界的盤古,它創建了第一個java虛擬機。同時,它又是女娲,它成功的繁殖了framework的核心system_server進程。主要步驟如下:

1、 創建AppRuntime對象,並調用其start函數。之後zygote的核心初始化都由AppRuntime中。

2、 調用startVm創建java虛擬機,然後調用startReg來注冊JNI函數。

3、 通過JNI調用com.android.internal.os.ZygoteInit類的main函數,從此進入了java世界。

4、 調用registerZygoteSocket創建可以響應子孫後代請求的socket。同時,zygote調用preload函數預加載了常用的類、資源等,為java世界添磚加瓦。

5、 調用startSystemServer函數分裂了一個子進程system_server來為java世界服務。

6、 Zygote完成了java世界的初創工作,便調用runSelectLoop來讓自己沉沉的睡去。之後,如果收到子孫後代的請求,它便會醒來為他們工作。

第六步主要設計注冊的的系統服務如下,另外注冊方法也可以參考如下網址:

Core Services:

1. Starting Power Manager

2. Creating Activity Manager

3. Starting Telephony Registry

4. Starting Package Manager

5. Set Activity Manager Service as System Process

6. Starting Context Manager

7. Starting System Context Providers

8. Starting Battery Service

9. Starting Alarm Manager

10. Starting Sensor Service

11. Starting Window Manager

12. Starting Bluetooth Service

13. Starting Mount Service


Other services

1. Starting Status Bar Service

2. Starting Hardware Service

3. Starting NetStat Service

4. Starting Connectivity Service

5. Starting Notification Manager

6. Starting DeviceStorageMonitor Service

7. Starting Location Manager

8. Starting Search Service

9. Starting Clipboard Service

10. Starting Checkin Service

11. Starting Wallpaper Service

12. Starting Audio Service

13. Starting HeadsetObserver

14. Starting AdbSettingsObserver

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved