0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Android系統(tǒng)啟動(dòng)流程

麥辣雞腿堡 ? 來(lái)源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:Jasonangel ? 2023-10-07 14:58 ? 次閱讀

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)程。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(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
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    TL3588--系統(tǒng)啟動(dòng)卡制作及系統(tǒng)固化

    TL3588--系統(tǒng)啟動(dòng)卡制作及系統(tǒng)固化
    的頭像 發(fā)表于 01-25 09:50 ?1453次閱讀
    TL3588--<b class='flag-5'>系統(tǒng)啟動(dòng)</b>卡制作及<b class='flag-5'>系統(tǒng)</b>固化

    android--系統(tǒng)啟動(dòng)--init進(jìn)程啟動(dòng)過(guò)程如何

    android--系統(tǒng)啟動(dòng)--init進(jìn)程啟動(dòng)過(guò)程
    發(fā)表于 05-29 10:35

    IAR系統(tǒng)啟動(dòng)流程及修改方法

    默認(rèn)情況下,直接進(jìn)入調(diào)試狀態(tài)后程序?qū)⑼T趍ain函數(shù)的開頭位置,但其實(shí)在進(jìn)入main函數(shù)之前,IAR已經(jīng)進(jìn)行了一個(gè)系統(tǒng)初始化的過(guò)程,本文將介紹在IAR環(huán)境中,系統(tǒng)啟動(dòng)流程中將執(zhí)行哪些步驟,主要包含
    發(fā)表于 08-06 13:57

    請(qǐng)問(wèn)怎樣去設(shè)計(jì)嵌入式系統(tǒng)啟動(dòng)程序?

    如何去編寫嵌入式系統(tǒng)啟動(dòng)程序?設(shè)計(jì)嵌入式系統(tǒng)啟動(dòng)程序的步驟流程有哪些?設(shè)計(jì)嵌入式系統(tǒng)啟動(dòng)程序有哪些技術(shù)難點(diǎn)?
    發(fā)表于 04-25 09:18

    關(guān)于Android系統(tǒng)啟動(dòng)的理解

    雖然第2章Android系統(tǒng)啟動(dòng)看得比較暈,但還是想把一些總結(jié)性的內(nèi)容做個(gè)筆記,加深自己對(duì)Android系統(tǒng)啟動(dòng)的理解。1. init進(jìn)程啟動(dòng)
    發(fā)表于 07-28 07:05

    Android系統(tǒng)啟動(dòng)流程總結(jié)

    Android系統(tǒng)是如何啟動(dòng)的?Android系統(tǒng)啟動(dòng)過(guò)程是怎樣的?
    發(fā)表于 10-22 07:14

    詳細(xì)分析嵌入式Linux系統(tǒng)啟動(dòng)流程

    在嵌入式Linux專題(一)中已經(jīng)對(duì)嵌入式Linux系統(tǒng)的架構(gòu)及啟動(dòng)流程有了初步的介紹,本文將詳細(xì)分析嵌入式Linux系統(tǒng)啟動(dòng)流程。
    發(fā)表于 11-05 09:25

    Linux文件系統(tǒng)啟動(dòng)流程

    與 Linux 命令的結(jié)合使用Linux 文件系統(tǒng)啟動(dòng)流程sysvinit服務(wù)的管理與裁剪systemd服務(wù)的管理與裁剪了解 qt4、qt5 的移植了解 yocto構(gòu)建文件系統(tǒng)常規(guī) Linux 應(yīng)用
    發(fā)表于 12-17 06:00

    為什么RK3288系統(tǒng)啟動(dòng)時(shí)會(huì)卡在Android字樣呢

    為什么RK3288系統(tǒng)啟動(dòng)時(shí)會(huì)卡在Android字樣呢?有何解決辦法?
    發(fā)表于 03-10 08:08

    系統(tǒng)啟動(dòng)過(guò)程

    系統(tǒng)啟動(dòng)過(guò)程系統(tǒng)啟動(dòng)過(guò)程主要由一下幾步組成(以硬盤啟動(dòng)為例):1. 開機(jī)2. BIOS 加電自檢 ( Power On Self Test -- POST ),內(nèi)存地址為 0ffff:00003. 將硬盤第一個(gè)
    發(fā)表于 10-11 12:17 ?2218次閱讀

    Android系統(tǒng)啟動(dòng)所必須加載的文件bootimage免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是Android系統(tǒng)啟動(dòng)所必須加載的文件bootimage免費(fèi)下載。
    發(fā)表于 03-21 08:00 ?1次下載

    UM2012_osxMotionXX系統(tǒng)啟動(dòng)

    UM2012_osxMotionXX系統(tǒng)啟動(dòng)
    發(fā)表于 11-22 19:24 ?0次下載
    UM2012_osxMotionXX<b class='flag-5'>系統(tǒng)啟動(dòng)</b>

    一張圖了解嵌入式系統(tǒng)啟動(dòng)流程

    如下圖所示是嵌入式系統(tǒng)啟動(dòng)流程圖,圖中紅色的數(shù)字圓點(diǎn)表示啟動(dòng)的先后順序。主要分為4個(gè)階段,分別是第一階段 bootloader,第二階段uboot,第三階段內(nèi)核啟動(dòng),第四階段app
    發(fā)表于 03-07 09:44 ?714次閱讀

    Rockchip 系統(tǒng)啟動(dòng)流程

    Rockchip 系統(tǒng)啟動(dòng)流程,包括 Boot ROM、Mask ROM、U-Boot、Linux 內(nèi)核等。 Boot ROM 階段: 在 Rockchip 系統(tǒng)啟動(dòng)的第一階段,處
    的頭像 發(fā)表于 01-04 15:54 ?960次閱讀

    Rockchip 3588 系統(tǒng)啟動(dòng)流程

    Rockchip 3588是一款高性能、低功耗的ARM處理器,廣泛應(yīng)用于智能電視、智能音箱和車載娛樂(lè)系統(tǒng)等領(lǐng)域。在本文中,我們將深入探討Rockchip 3588的系統(tǒng)啟動(dòng)流程。 系統(tǒng)啟動(dòng)
    的頭像 發(fā)表于 01-07 16:08 ?1884次閱讀