Google官方提供了一張經典的四層架構圖,從下往上依次分為:Linux內核、系統庫和Android運行時環境、框架層、應用層,其中每一層都包含大量的子模塊或子系統。
Android系統啟動過程從下往上的一個過程:
Loader - > Kernel - > Native - > Framework - > App
1、Loader
Boot ROM:當手機處于關機狀態時,長按Power鍵開機,引導芯片開始從固化在ROM里的預設出代碼開始執行,然后加載引導程序到RAM;
Boot Loader:這是啟動Android系統之前的引導程序,主要是檢查RAM,初始化硬件參數等功能。
2、Kernel
到這里才剛剛開始進入Android系統.
啟動Kernel的0號進程:初始化進程管理、內存管理,加載Display,Camera Driver,Binder Driver等相關工作;
啟動kthreadd進程(pid=2):是Linux系統的內核進程,會創建內核工作線程kworkder,軟中斷線程ksoftirqd,thermal等內核守護進程。kthreadd進程是所有內核進程的鼻祖。
Android基于Linux 提供核心系統服務,
例如:安全、內存管理、進程管理、網絡堆棧、驅動模型。Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細節而為上層提供統一的服務。如果你只是做應用開發,就不需要深入了解Linux Kernel層
3、Native
啟動init進程(pid=1),是Linux系統的用戶進程,init進程是所有用戶進程的鼻祖。
init進程啟動Media Server(多媒體服務)、servicemanager(binder服務管家)、bootanim(開機動畫)等重要服務;
init進程還會孵化出installd(用于App安裝)、ueventd、adbd、lmkd(用于內存管理)等用戶守護進程;
init進程孵化出Zygote進程,Zygote進程是Android系統的第一個Java進程,Zygote是所有Java進程的父進程,Zygote進程本身是由init進程孵化而來的。
4、Framework
Zygote進程,是由init進程通過解析init.rc文件后fork生成的,Zygote進程主要包含:- 加載ZygoteInit類,注冊Zygote Socket服務端套接字;-加載虛擬機;- PreloadClasses;-PreloadResouces。
Zygote進程fork出System Server進程,System Server是Zygote孵化的第一個進程,地位非常重要。
System Server進程:負責啟動和管理整個Java framework,包含ActivityManager,PowerManager等服務。
Media Server進程:負責啟動和管理整個C++ framework,包含AudioFlinger,Camera Service等服務。
5、App
Zygote進程孵化出的第一個App進程是Launcher,這是用戶看到的桌面App;
Zygote進程還會創建Browser,Phone,Email等App進程,每個App至少運行在一個進程上。
所有的App進程都是由Zygote進程fork生成的。
-
Android
+關注
關注
12文章
3935瀏覽量
127352 -
RAM
+關注
關注
8文章
1368瀏覽量
114650
原文標題:Android系統架構及啟動流程
文章出處:【微信號:Imgtec,微信公眾號:Imagination Tech】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論