偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

手把手教你分析 Android 系統(tǒng)啟動流程

移動開發(fā) Android
Andorid 系統(tǒng)是在嵌入式行業(yè)中廣泛應(yīng)用的系統(tǒng),手機、平板、機器人、汽車中控系統(tǒng)都有使用安卓系統(tǒng)的,在應(yīng)用方面的優(yōu)勢是安卓系統(tǒng)自帶 UI,使用 Linux 需要自己用 QT 開發(fā)界面,并且界面沒那么好看。

[[424940]]

上一篇我們講了 Linux 系統(tǒng)的啟動流程,本文講解一下 Andorid 系統(tǒng)的啟動流程。

手把手教你分析 Linux 啟動流程

Andorid 系統(tǒng)是在嵌入式行業(yè)中廣泛應(yīng)用的系統(tǒng),手機、平板、機器人、汽車中控系統(tǒng)都有使用安卓系統(tǒng)的,在應(yīng)用方面的優(yōu)勢是安卓系統(tǒng)自帶 UI,使用 Linux 需要自己用 QT 開發(fā)界面,并且界面沒那么好看。

Android系統(tǒng)架構(gòu)圖:

由此圖可知,Android 系統(tǒng)基于 Linux 內(nèi)核。

Linux 之上有一個 HAL 層,這一層出現(xiàn)的原因:Linux 是開源的,基于它的修改也必須開源,所以 Andorid 在這里加了一個 HAL 層,這樣硬件廠商可以不公布自己的代碼。

Native 層由 C++ 語言實現(xiàn),F(xiàn)ramework 層和 app 層由 java 語言實現(xiàn),也就是說,你想搞懂 Android 系統(tǒng)需要精通三種語言:C、C++、java。

上一篇文章分析了Linux 系統(tǒng)的啟動流程,Android 系統(tǒng)的啟動流程和 Linux 相似,只是 init 進(jìn)程起來后,做了不一樣的事情。

Android 系統(tǒng)啟動流程如下:

1)Boot ROM 是固化在硬件中的一段代碼,它一般是固定的,它的作用是檢測基本的硬件是否存在,比如檢測 EMMC 是否存在,存在的話,把 bootloader 從EMMC 拷貝到 SRAM ,啟動系統(tǒng),后面交給 bootloader 。

2)Andorid 系統(tǒng)的啟動引導(dǎo)程序 bootloader 不是 uboot,是 LK(little kernel),專門用來啟動安卓系統(tǒng)。

3)bootloader 初始化完成后跳轉(zhuǎn)到 Linux 內(nèi)核的 start_kernel 函數(shù),此函數(shù)最后產(chǎn)生了 kernel_init 和 kthreadd,kernel_init 后面會從內(nèi)核空間跳轉(zhuǎn)到用戶空間,變成用戶空間的 init 進(jìn)程,PID=1,而 kthreadd(PID=2)是內(nèi)核進(jìn)程,專門用來監(jiān)聽創(chuàng)建內(nèi)核進(jìn)程的請求,它維護(hù)了一個鏈表,如果有創(chuàng)建內(nèi)核進(jìn)程的需求,就會在鏈表上創(chuàng)建。

當(dāng)然你可以看到圖中還有一個swapper(PID=0)進(jìn)程,它是系統(tǒng)中唯一一個不使用 fork 創(chuàng)建的進(jìn)程,kernel_init 和 kthreadd 就是由它創(chuàng)建的,swapper 也叫 idle 進(jìn)程,空閑進(jìn)程,它運行的時候就是系統(tǒng)處于空閑狀態(tài)的時候。

4)當(dāng) kernel_init 轉(zhuǎn)變?yōu)橛脩艨臻g的 init 進(jìn)程以后,會在 Andorid 系統(tǒng)中創(chuàng)建一個最重要的進(jìn)程:Zygote,此進(jìn)程會創(chuàng)建安卓所需要的所有進(jìn)程。

Android 層級分析

這個圖中 kernel 和 native 層的通信是 syscall,這個大家都很熟悉,就是系統(tǒng)調(diào)用,畢竟 C++ 調(diào)用 C 語言還是很簡單的。

而 FrameWork 層和 Native 層通信就比較復(fù)雜了,java 如何調(diào)用 C++ 語言,這里會有一個 JNI 機制,JNI 有特定的語法,類似于 C 語言但又不是 C 語言,他可以實現(xiàn) java 調(diào)用 C++的函數(shù),這個過程需要 Android Runtime(ART) 安卓虛擬機的配合。

在 Native 層中,有很多 C++ 寫的系統(tǒng)服務(wù),供上層使用,比如最重要的ServiceManager,管理所有其他服務(wù)的服務(wù)。

案例分析

手機 app 想要控制喇叭、LED 等硬件,要從 app 傳遞到 kernel,操作硬件,這個流程要比 Linux 的應(yīng)用程序復(fù)雜得多。并且方式不止一種,舉例:

1、app 通過直接讀寫 kernel 節(jié)點,向其寫入數(shù)據(jù),這就類似于在 Linux 命令行直接 echo,這是最簡單的方式。因為 java 本身也有文件讀寫函數(shù),有按字節(jié)讀寫和字符串讀寫兩種方式。

2、app 的 java 語言調(diào)用 JNI 文件,JNI 調(diào)用 C 語言,在 C 函數(shù)中去操作節(jié)點。

3、也可以用 C++ 寫一個 Native 服務(wù),APP 通過 binder 通信訪問這個服務(wù),在這個服務(wù)中操作節(jié)點。當(dāng)然 socket 通信也可以。

Android 權(quán)限問題

當(dāng)然,以上所有的操作都需要權(quán)限,安卓系統(tǒng)的權(quán)限限制的比較嚴(yán)格,防止黑客破解。

如果你有 root 權(quán)限,那么你可以在安卓系統(tǒng)命令行中輸入 setenforce 0 來關(guān)閉Android 系統(tǒng)的 SELinux 檢查機制,那基本上你所有操作都可以被允許。

在 Linux 系統(tǒng)中,安全機制是:我是 root,我派出去的程序訪問任何東西也應(yīng)該是 root 權(quán)限,沒有人可以阻止我。

在 Andorid 系統(tǒng)中,安全機制是:不管你是誰,做任何事情都要提前申請,否則會被 SELinux 檢查,沒有提前申請的行為都會被拒絕,看 log 會發(fā)現(xiàn)很多 avc deny。

舉個形象一點的例子:一個公司老板,派他的兒子去自己的公司上班,按理來說是應(yīng)該類似于 root 權(quán)限,誰能擋我?實際上呢,到公司上班可以,因為老板提前說了,但是去衛(wèi)生間要申請權(quán)限,用電腦要申請權(quán)限,用打印機要申請權(quán)限,除了過來上班,其余任何沒有提前說明的行為都會被拒絕。

這就是 Andorid 系統(tǒng)嚴(yán)格的安全機制,防止了黑客破解 root 權(quán)限以后亂搞你的手機,比如:內(nèi)置一個程序,定期訪問你的 xxx 文件,然后通過網(wǎng)絡(luò)發(fā)出去。

本文轉(zhuǎn)載自微信公眾號「嵌入式Linux系統(tǒng)開發(fā)」

 

責(zé)任編輯:姜華 來源: 嵌入式Linux系統(tǒng)開發(fā)
相關(guān)推薦

2021-09-18 14:26:49

Linux Linux 啟動流程Linux 系統(tǒng)

2021-12-28 08:38:26

Linux 中斷喚醒系統(tǒng)Linux 系統(tǒng)

2022-01-08 20:04:20

攔截系統(tǒng)調(diào)用

2024-10-16 11:40:47

2020-04-14 10:20:12

MySQL數(shù)據(jù)庫死鎖

2025-05-07 00:31:30

2011-01-10 14:41:26

2011-05-03 15:59:00

黑盒打印機

2017-05-18 12:45:35

數(shù)據(jù)分析數(shù)據(jù)理解數(shù)據(jù)

2021-07-14 09:00:00

JavaFX開發(fā)應(yīng)用

2021-12-15 08:49:21

gpio 子系統(tǒng)pinctrl 子系統(tǒng)API

2019-04-09 08:20:54

Windows 7Windows 10

2025-02-26 07:40:25

運營分析體系運營策略

2021-02-26 11:54:38

MyBatis 插件接口

2011-02-22 13:46:27

微軟SQL.NET

2022-11-06 14:46:28

腳本windows文件

2022-12-07 08:42:35

2023-04-26 12:46:43

DockerSpringKubernetes

2022-03-14 14:47:21

HarmonyOS操作系統(tǒng)鴻蒙

2022-07-27 08:16:22

搜索引擎Lucene
點贊
收藏

51CTO技術(shù)棧公眾號