Andorid 系統(tǒng)是在嵌入式行業(yè)中廣泛應(yīng)用的系統(tǒng),手機(jī)、平板、機(jī)器人、汽車中控系統(tǒng)都有使用安卓系統(tǒng)的,在應(yīng)用方面的優(yōu)勢(shì)是安卓系統(tǒng)自帶 UI,使用Linux 需要自己用 QT 開發(fā)界面,并且界面沒(méi)那么好看。
Linux 之上有一個(gè) HAL 層,這一層出現(xiàn)的原因:Linux 是開源的,基于它的修改也必須開源,所以 Andorid 在這里加了一個(gè) HAL層,這樣硬件廠商可以不公布自己的代碼。
Native 層由 C++ 語(yǔ)言實(shí)現(xiàn),F(xiàn)ramework 層和 app 層由 java 語(yǔ)言實(shí)現(xiàn),也就是說(shuō),你想搞懂 Android系統(tǒng)需要精通三種語(yǔ)言:C、C++、java。
上一篇文章分析了Linux 系統(tǒng)的啟動(dòng)流程,Android 系統(tǒng)的啟動(dòng)流程和 Linux 相似,只是 init 進(jìn)程起來(lái)后,做了不一樣的事情。
Android 系統(tǒng)啟動(dòng)流程如下:
1)Boot ROM 是固化在硬件中的一段代碼,它一般是固定的,它的作用是檢測(cè)基本的硬件是否存在,比如檢測(cè) EMMC 是否存在,存在的話,把bootloader 從EMMC 拷貝到 SRAM ,啟動(dòng)系統(tǒng),后面交給 bootloader 。
2)Andorid 系統(tǒng)的啟動(dòng)引導(dǎo)程序 bootloader 不是 uboot,是 LK(little kernel),專門用來(lái)啟動(dòng)安卓系統(tǒng)。
3)bootloader 初始化完成后跳轉(zhuǎn)到 Linux 內(nèi)核的 start_kernel 函數(shù),此函數(shù)最后產(chǎn)生了 kernel_init 和kthreadd,kernel_init 后面會(huì)從內(nèi)核空間跳轉(zhuǎn)到用戶空間,變成用戶空間的 init 進(jìn)程,PID=1,而
kthreadd(PID=2)是內(nèi)核進(jìn)程,專門用來(lái)監(jiān)聽創(chuàng)建內(nèi)核進(jìn)程的請(qǐng)求,它維護(hù)了一個(gè)鏈表,如果有創(chuàng)建內(nèi)核進(jìn)程的需求,就會(huì)在鏈表上創(chuàng)建。
當(dāng)然你可以看到圖中還有一個(gè)swapper(PID=0)進(jìn)程,它是系統(tǒng)中唯一一個(gè)不使用 fork 創(chuàng)建的進(jìn)程,kernel_init 和kthreadd 就是由它創(chuàng)建的,swapper 也叫 idle 進(jìn)程,空閑進(jìn)程,它運(yùn)行的時(shí)候就是系統(tǒng)處于空閑狀態(tài)的時(shí)候。
4)當(dāng) kernel_init 轉(zhuǎn)變?yōu)橛脩艨臻g的 init 進(jìn)程以后,會(huì)在 Andorid系統(tǒng)中創(chuàng)建一個(gè)最重要的進(jìn)程:Zygote,此進(jìn)程會(huì)創(chuàng)建安卓所需要的所有進(jìn)程。
-
嵌入式
+關(guān)注
關(guān)注
5045文章
18816瀏覽量
298460 -
Android
+關(guān)注
關(guān)注
12文章
3903瀏覽量
126611 -
Linux
+關(guān)注
關(guān)注
87文章
11123瀏覽量
207896 -
系統(tǒng)
+關(guān)注
關(guān)注
1文章
1002瀏覽量
21217
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論