Android 系統(tǒng)啟動(dòng)--01:系統(tǒng)架構(gòu)

本文轉(zhuǎn)載自:Android系統(tǒng)架構(gòu)

本文基于Android 10.0源碼分析

1.摘要

??本節(jié)主要來講解Android的系統(tǒng)架構(gòu)。

2.概述

??本文主要介紹Android的系統(tǒng)架構(gòu),Android使用linux內(nèi)核(Marco kernel),但是Android的架構(gòu)又與Linux系統(tǒng)有所不同,因此在介紹Android系統(tǒng)架構(gòu)之前,我們先一起來了解一下Linux系統(tǒng)的架構(gòu)。

3.Linux系統(tǒng)架構(gòu)

(1)Linux架構(gòu)

系統(tǒng)啟動(dòng)1-1.png
  • Computer Resources:硬件資源;

  • Kernel:內(nèi)核;

  • Shell:shell是系統(tǒng)的用戶界面,提供了用戶與內(nèi)核進(jìn)行交互操作的一種接口。它接收用戶輸入的命令并把它送入內(nèi)核去執(zhí)行,是一個(gè)命令解釋器;

  • Programs/Utilities/Tools:庫(kù)函數(shù)、工具等;

  • File systems:文件系統(tǒng)是文件存放在磁盤等存儲(chǔ)設(shè)備上的組織方法。Linux系統(tǒng)能支持多種目前流行的文件系統(tǒng),如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660;

  • User Application:Linux應(yīng)用,標(biāo)準(zhǔn)的Linux系統(tǒng)一般都有一套被稱為應(yīng)用程序的程序集,它包括文本編輯器、編程語言、X Window、辦公套件、Internet工具和數(shù)據(jù)庫(kù)等。

(2)Linux系統(tǒng)說明

  1. Linux系統(tǒng)一般由4個(gè)組成部分:內(nèi)核Kernel、shell、文件系統(tǒng)和應(yīng)用程序。內(nèi)核、shell和文件系統(tǒng)一起組成了基本的操作系統(tǒng)結(jié)構(gòu),它們讓用戶可以管理文件、運(yùn)行程序并使用系統(tǒng);

  2. Linux開機(jī)后,內(nèi)核啟動(dòng),激活內(nèi)核空間,抽象硬件、初始化硬件參數(shù)等,運(yùn)行并維護(hù)虛擬內(nèi)存、調(diào)度器、信號(hào)及進(jìn)程間通信(IPC);

  3. 內(nèi)核啟動(dòng)后,再加載Shell和用戶應(yīng)用程序,用戶應(yīng)用程序使用C\C++編寫,被編譯成機(jī)器碼,形成一個(gè)進(jìn)程,通過系統(tǒng)調(diào)用(Syscall)與內(nèi)核系統(tǒng)進(jìn)行聯(lián)通。進(jìn)程間交流需要使用特殊的進(jìn)程間通信(IPC)機(jī)制。

4.Android系統(tǒng)架構(gòu)

??看完了Linux架構(gòu),我們?cè)賮硪黄鹂纯碅ndroid系統(tǒng)架構(gòu)。Android的系統(tǒng)非常復(fù)雜和龐大,底層以Linux內(nèi)核為基礎(chǔ),上層采用帶有虛擬機(jī)的JAVA層,通過JNI技術(shù),將上下層打通。

??先來看一張Google提供經(jīng)典Android架構(gòu)圖,從上往下依次為應(yīng)用層(System Apps)、應(yīng)用框架層(Java API Framework)、運(yùn)行層(系統(tǒng)Native庫(kù)和Android運(yùn)行時(shí)環(huán)境)、硬件抽象層(HAL)、Liunx 內(nèi)核(Marco Kernel)。每一層都有對(duì)應(yīng)的進(jìn)程、系統(tǒng)庫(kù)。

系統(tǒng)啟動(dòng)1-2.png
  • 應(yīng)用層(System Apps)

??該層中包含所有的Android應(yīng)用程序,包括電話、相機(jī)、日歷等,我們自己開發(fā)的Android應(yīng)用程序也被安裝在這層;大部分的應(yīng)用使用JAVA開發(fā),現(xiàn)在Google也開始力推kotlin進(jìn)行開發(fā)。

  • 應(yīng)用框架層(Java API Framework)

??這一層主要提供構(gòu)建應(yīng)用程序是可能用到的各種API,Android自帶的一些核心應(yīng)用就是使用這些API完成的,開發(fā)者也可以通過使用API來構(gòu)建自己的應(yīng)用程序。

  • 運(yùn)行層
  1. 系統(tǒng)Native庫(kù)
    ??Android包含一些C/C++庫(kù),這些庫(kù)能被Android系統(tǒng)中不同的組件使用

  2. Android運(yùn)行時(shí)環(huán)境
    ??Android包括了一個(gè)核心庫(kù),該核心庫(kù)提供了Java編程語言核心庫(kù)的大多數(shù)功能。虛擬機(jī)也在該層啟動(dòng)。每個(gè)Android應(yīng)用都有一個(gè)專有的進(jìn)程,這些進(jìn)程每個(gè)都有一個(gè)Dalivik虛擬機(jī)實(shí)例,并在該實(shí)例中運(yùn)行。

  • 硬件抽象層(HAL)

??Android的硬件驅(qū)動(dòng)與Linux不同,傳統(tǒng)的Liunx內(nèi)核驅(qū)動(dòng)完全存在于內(nèi)核空間中。但是Android在內(nèi)核外部增加了一個(gè)硬件抽象層(HAL-Hardware Abstraction Layer),把一部分硬件驅(qū)動(dòng)放到了HAL層。

?? 為什么Android要這么做呢?

  1. Linux內(nèi)核采用了GPL協(xié)議,如果硬件廠商需要支持Linux系統(tǒng),就需要遵照GPL協(xié)議公開硬件驅(qū)動(dòng)的源代碼,這勢(shì)必會(huì)影響到硬件廠家的核心利益;

  2. Android的HAL層運(yùn)行在用戶空間,HAL是一個(gè)“空殼”,Android會(huì)根據(jù)不同的需要,加載不同的動(dòng)態(tài)庫(kù)。這些動(dòng)態(tài)庫(kù)由硬件廠家提供。硬件廠家把相關(guān)硬件功能寫入動(dòng)態(tài)庫(kù),內(nèi)核中只開放一些基本的讀寫接口操作。這樣一些硬件廠家的驅(qū)動(dòng)功能就由內(nèi)核空間移動(dòng)到了用戶空間;

  3. Android的HAL層遵循Apache協(xié)議,并不要求它的配套程序,因此廠家提供的驅(qū)動(dòng)庫(kù)不需要進(jìn)行開放,保護(hù)了硬件廠家的核心利益。

  • Liunx內(nèi)核(Marco Kernel)

??Android平臺(tái)的基礎(chǔ)是Linux內(nèi)核,比如ART虛擬機(jī)最終調(diào)用底層Linux內(nèi)核來執(zhí)行功能。Linux內(nèi)核的安全機(jī)制為Android提供相應(yīng)的保障,也允許設(shè)備制造商為內(nèi)核開發(fā)硬件驅(qū)動(dòng)程序。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容