Andorid 系統是在嵌入式行業中廣泛應用的系統,手機、平板、機器人、汽車中控系統都有使用安卓系統的,在應用方面的優勢是安卓系統自帶 UI,使用Linux 需要自己用 QT 開發界面,并且界面沒那么好看。
Linux 之上有一個 HAL 層,這一層出現的原因:Linux 是開源的,基于它的修改也必須開源,所以 Andorid 在這里加了一個 HAL層,這樣硬件廠商可以不公布自己的代碼。
Native 層由 C++ 語言實現,Framework 層和 app 層由 java 語言實現,也就是說,你想搞懂 Android系統需要精通三種語言:C、C++、java。
上一篇文章分析了Linux 系統的啟動流程,Android 系統的啟動流程和 Linux 相似,只是 init 進程起來后,做了不一樣的事情。
Android 系統啟動流程如下:
1)Boot ROM 是固化在硬件中的一段代碼,它一般是固定的,它的作用是檢測基本的硬件是否存在,比如檢測 EMMC 是否存在,存在的話,把bootloader 從EMMC 拷貝到 SRAM ,啟動系統,后面交給 bootloader 。
2)Andorid 系統的啟動引導程序 bootloader 不是 uboot,是 LK(little kernel),專門用來啟動安卓系統。
3)bootloader 初始化完成后跳轉到 Linux 內核的 start_kernel 函數,此函數最后產生了 kernel_init 和kthreadd,kernel_init 后面會從內核空間跳轉到用戶空間,變成用戶空間的 init 進程,PID=1,而
kthreadd(PID=2)是內核進程,專門用來監聽創建內核進程的請求,它維護了一個鏈表,如果有創建內核進程的需求,就會在鏈表上創建。
當然你可以看到圖中還有一個swapper(PID=0)進程,它是系統中唯一一個不使用 fork 創建的進程,kernel_init 和kthreadd 就是由它創建的,swapper 也叫 idle 進程,空閑進程,它運行的時候就是系統處于空閑狀態的時候。
4)當 kernel_init 轉變為用戶空間的 init 進程以后,會在 Andorid系統中創建一個最重要的進程:Zygote,此進程會創建安卓所需要的所有進程。
-
嵌入式
+關注
關注
5092文章
19177瀏覽量
307682 -
Android
+關注
關注
12文章
3945瀏覽量
127934 -
Linux
+關注
關注
87文章
11345瀏覽量
210397 -
系統
+關注
關注
1文章
1019瀏覽量
21429
發布評論請先 登錄
相關推薦
評論