轉自Gityuan的Android開篇,對自我學習作進一步整理。
Android系統以
Linux核心
作為基底,上層採用Native層
和Java層
。系統分為核心空間和使用者空間,並通過系統呼叫(Syscall
)連通。使用者空間主要採用C++和Java程式碼實現,通過JNI
技術連通Java層和Native層(C/C++)。
Loader層
- Boot ROM: 電源按下,引導晶片程式碼開始從預定義的地方(固化在ROM)開始執行.載入載入程式到
RAM
,然後執行. - Boot Loader: 這是
Android
系統系統之前的載入程式,主要用來檢測外部的RAM
以及設定網路、記憶體、初始化硬體引數等.
Kernel層
Kernel層是指Android
核心層,到這裡才剛剛開始進入Android
系統。
- 啟動
Kernel
的swapper程式(pid=0):該程式又稱為idle
程式, 系統初始化過程Kernel
由無到有開創的第一個程式, 用於初始化程式管理、記憶體管理,載入Display,Camera Driver,Binder Driver
等相關工作(圖中kernel
層藍色區塊); - 啟動kthreadd程式(pid=2):是
Linux
系統的核心程式,會建立核心工作執行緒kworkder
,軟中斷執行緒ksoftirqd,thermal
等一系列核心守護程式。kthreadd程式是所有核心程式的父程式。
Linux
核心載入主要包括初始化kernel
核心(記憶體初始化,開啟中斷,初始化程式表等)、初始化驅動、啟動核心後臺(daemons
)執行緒、安裝根(root
)檔案系統等。後續啟動第一個使用者級程式init
(pid=1).
Native層
Native層
主要包括啟動init程式
(Android
的第一個使用者空間程式)、HAL層
(硬體抽象層)以及開機動畫
等。init程式是所有使用者程式的鼻祖
。同時init程式
也會孵化一系列使用者程式,還會啟動關鍵的服務以及孵化Zygote程式
。
init程式
會孵化出ueventd、logd、healthd、installd、adbd、lmkd
等使用者守護程式;init程式
還啟動servicemanager(binder服務管家)、bootanim(開機動畫)
等重要服務init程式
孵化出Zygote程式
,Zygote程式
是Android系統的第一個Java程式
,Zygote是所有Java程式的父程式
,Zygote程式
本身是由init程式
孵化而來的。
- kthreadd程式: 是所有核心程式的父程式
- init程式 : 是所有使用者程式的父程式(或者父父程式)
- zygote程式 : 是所有上層Java程式的父程式,另外zygote的父程式是init程式。
Framework層
如圖,Framework層
分為Java Frameword
和C++ Framework
,分別由system_server程式
和media_server程式
負責啟動和管理。
Zygote
本身是一個Native
的應用程式,剛開始的名字為“app_process”
,執行過程中,通過系統呼叫將自己名字改為Zygote
。在圖中的紅色線,便是Zygote fork
出來的程式,所有的App程式
都是由Zygote fork
產生的。
Zygote程式
,是由init程式通過解析init.rc檔案後fork生成的,Zygote程式主要包含:
載入ZygoteInit類,註冊Zygote Socket服務端套接字;
載入虛擬機器;
preloadClasses;
preloadResouces。System Server程式
,是由Zygote程式fork而來,System Server是Zygote孵化的第一個程式,System Server負責啟動和管理整個Java framework,包含ActivityManager,PowerManager等服務。Media Server程式
,是由init程式fork而來,負責啟動和管理整個C++ framework,包含AudioFlinger,Camera Service,等服務。
App層
Zygote程式孵化出的第一個App程式是Launcher
,這是使用者看到的桌面App;- Zygote程式還會建立Browser,Phone,Email等App程式,每個App至少執行在一個程式上。
- 所有的App程式都是由Zygote程式fork生成的。
Syscall && JNI
- Native與Kernel之間有一層系統呼叫(SysCall)層,見Linux系統呼叫(Syscall)原理;
- Java層與Native(C/C++)層之間的紐帶JNI,見Android JNI原理分析。