91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

深入解析rk平臺(tái)Android Bootloader核心代碼:從啟動(dòng)流程到AVB驗(yàn)證

jf_44130326 ? 來(lái)源:Linux1024 ? 作者:Linux1024 ? 2026-01-22 07:06 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作為Android設(shè)備啟動(dòng)的第一道“閘門(mén)”,Bootloader(以U-Boot為主)承擔(dān)著初始化硬件、加載內(nèi)核、驗(yàn)證鏡像完整性的核心職責(zé)。今天我們拆解Rockchip平臺(tái)下android_bootloader.c的核心代碼,帶你讀懂Android設(shè)備從Bootloader到內(nèi)核的完整啟動(dòng)邏輯,以及開(kāi)發(fā)者關(guān)注這些代碼的核心價(jià)值。

一、代碼整體定位

這份代碼是Rockchip(瑞芯微)平臺(tái)U-Boot中Android Bootloader的核心實(shí)現(xiàn),核心作用是銜接硬件初始化與內(nèi)核啟動(dòng),主要負(fù)責(zé):

?讀寫(xiě)B(tài)ootloader控制塊(BCB),判斷設(shè)備啟動(dòng)模式(正常/Recovery/Bootloader);

?執(zhí)行Android Verified Boot(AVB)驗(yàn)證,保障鏡像完整性;

?加載內(nèi)核/設(shè)備樹(shù)鏡像,組裝內(nèi)核命令行,最終啟動(dòng)內(nèi)核;

?適配A/B分區(qū)、DTBO疊加層等Android特性。

二、核心函數(shù)解析:從啟動(dòng)模式判斷到內(nèi)核啟動(dòng)

我們按“啟動(dòng)流程鏈路”拆解關(guān)鍵函數(shù),理解每個(gè)環(huán)節(jié)的核心作用:

1. BCB讀寫(xiě):?jiǎn)?dòng)指令的“中轉(zhuǎn)站”

BCB(Bootloader Control Block)是存儲(chǔ)在misc分區(qū)的啟動(dòng)控制信息,決定設(shè)備下次啟動(dòng)的模式,核心操作由兩個(gè)函數(shù)完成:

android_bootloader_message_load

?作用:從misc分區(qū)讀取BCB數(shù)據(jù)到內(nèi)存;

?關(guān)鍵邏輯:檢查misc分區(qū)大小是否足夠容納BCB結(jié)構(gòu)體→調(diào)用blk_dread讀取指定扇區(qū)→失敗則輸出日志并返回錯(cuò)誤。

android_bootloader_message_write

?作用:將內(nèi)存中的BCB數(shù)據(jù)寫(xiě)入misc分區(qū);

?關(guān)鍵邏輯:與讀操作邏輯對(duì)稱(chēng),調(diào)用blk_dwrite寫(xiě)入→支持“一次性指令”(如bootonce-bootloader)的清空。

android_bcb_write

?作用:向BCB寫(xiě)入自定義啟動(dòng)命令(如boot-recovery);

?關(guān)鍵邏輯:初始化空BCB結(jié)構(gòu)體→查找misc分區(qū)→寫(xiě)入指定命令(如強(qiáng)制進(jìn)入Recovery)。

2.啟動(dòng)模式判斷:決定設(shè)備“走哪條路”

android_bootloader_load_and_clear_mode

?作用:核心啟動(dòng)模式?jīng)Q策函數(shù);

?關(guān)鍵邏輯

a.先檢查Fastboot緩沖區(qū)(CONFIG_FASTBOOT_BUF_ADDR),若有reboot-bootloader指令,直接判定為Bootloader模式;

b.讀取BCB,匹配指令:

bootonce-bootloader:一次性進(jìn)入Bootloader,讀取后清空BCB;

boot-recovery/boot-fastboot:進(jìn)入Recovery模式;

無(wú)匹配指令:正常啟動(dòng)模式。

android_boot_mode_str

?作用:將枚舉類(lèi)型的啟動(dòng)模式(如ANDROID_BOOT_MODE_RECOVERY)轉(zhuǎn)換為字符串(如recovery),便于日志輸出和調(diào)試。

3. Bootloader模式:進(jìn)入Fastboot

android_bootloader_boot_bootloader

?作用:觸發(fā)Fastboot模式;

?關(guān)鍵邏輯:讀取環(huán)境變量fastbootcmd(無(wú)則用默認(rèn)值fastboot usb 0)→執(zhí)行該命令,讓設(shè)備進(jìn)入Fastboot刷機(jī)模式。

4.內(nèi)核加載與啟動(dòng):核心執(zhí)行環(huán)節(jié)

sysmem_alloc_uncomp_kernel

?作用:為解壓后的內(nèi)核分配內(nèi)存;

?關(guān)鍵邏輯

a.根據(jù)內(nèi)核壓縮類(lèi)型(LZ4/GZIP/LZO等),按壓縮比反向計(jì)算解壓后大?。ㄈ鏕ZIP按40%壓縮比,分配2.5倍原大?。?;

b.釋放壓縮內(nèi)核占用的內(nèi)存→分配解壓內(nèi)核所需內(nèi)存,避免內(nèi)存溢出。

android_bootloader_boot_kernel

?作用:最終啟動(dòng)內(nèi)核的“臨門(mén)一腳”;

?關(guān)鍵邏輯

a.解析內(nèi)核地址、壓縮類(lèi)型(如LZ4),輸出啟動(dòng)日志;

b.調(diào)用sysmem_alloc_uncomp_kernel分配解壓內(nèi)存;

c.調(diào)用do_bootm_states執(zhí)行內(nèi)核啟動(dòng)流程(加載OS、初始化RAMDisk、執(zhí)行內(nèi)核)。

5.內(nèi)核命令行:給內(nèi)核的“啟動(dòng)參數(shù)”

strjoin

?作用:基礎(chǔ)工具函數(shù),將字符串?dāng)?shù)組用指定分隔符(如空格)拼接成完整字符串。

android_assemble_cmdline

?作用:組裝內(nèi)核啟動(dòng)命令行(bootargs);

?關(guān)鍵邏輯:拼接以下參數(shù),生成最終bootargs:

?環(huán)境變量默認(rèn)bootargs;

?A/B分區(qū)后綴(如androidboot.slot_suffix=_a);

?設(shè)備序列號(hào)(androidboot.serialno=xxx);

?Root設(shè)備路徑(root=/dev/xxx);

?額外參數(shù)(如Normal模式的skip_initramfs)。

6. AVB驗(yàn)證:?jiǎn)?dòng)安全性的“守門(mén)人”

AVB(Android Verified Boot)是Android的鏡像驗(yàn)證機(jī)制,防止惡意鏡像刷入,核心函數(shù)如下:

android_slot_verify

?作用:核心AVB驗(yàn)證函數(shù);

?關(guān)鍵邏輯

a.檢查設(shè)備解鎖狀態(tài)(解鎖則跳過(guò)嚴(yán)格驗(yàn)證);

b.獲取A/B分區(qū)元數(shù)據(jù),確定當(dāng)前啟動(dòng)slot(_a/_b);

c.調(diào)用avb_slot_verify驗(yàn)證boot/recovery/vendor_boot等分區(qū)鏡像;

d.驗(yàn)證失敗則標(biāo)記該slot為不可啟動(dòng)→驗(yàn)證成功則分發(fā)鏡像到指定內(nèi)存地址。

slot_set_unbootable

?作用:將指定A/B分區(qū)標(biāo)記為“不可啟動(dòng)”;

?關(guān)鍵邏輯:清空分區(qū)優(yōu)先級(jí)、剩余嘗試次數(shù)、啟動(dòng)成功標(biāo)記,防止設(shè)備啟動(dòng)損壞的鏡像。

7.設(shè)備樹(shù)適配:硬件適配的“靈活層”

android_get_dtbo&android_fdt_overlay_apply

?作用:加載并應(yīng)用DTBO(設(shè)備樹(shù)疊加層);

?關(guān)鍵邏輯

a.從dtbo/recovery分區(qū)讀取DTBO鏡像;

b.選擇指定索引的設(shè)備樹(shù)條目;

c.將DTBO疊加到主設(shè)備樹(shù)(適配不同硬件配置)→失敗則恢復(fù)原設(shè)備樹(shù)。

8.核心啟動(dòng)流程:android_bootloader_boot_flow

這是整個(gè)Bootloader啟動(dòng)的“總控函數(shù)”,串聯(lián)所有環(huán)節(jié):

1.讀取misc分區(qū),判斷啟動(dòng)模式(Normal/Recovery/Bootloader);

2.處理A/B分區(qū)slot后綴;

3.執(zhí)行AVB驗(yàn)證(若開(kāi)啟);

4.加載boot/recovery鏡像到指定內(nèi)存;

5.組裝內(nèi)核命令行;

6.加載DTBO并應(yīng)用疊加層;

7.調(diào)用android_bootloader_boot_kernel啟動(dòng)內(nèi)核。

三、核心啟動(dòng)流程圖

wKgZPGlxXMqAGLZaAAHm2QeX1_g174.png

四、開(kāi)發(fā)者關(guān)注這部分代碼的核心意義

1.定制啟動(dòng)邏輯,適配產(chǎn)品需求

?可修改BCB指令邏輯,實(shí)現(xiàn)定制化啟動(dòng)(如強(qiáng)制進(jìn)入Recovery、修改Fastboot默認(rèn)命令);

?適配不同Android版本特性(如動(dòng)態(tài)分區(qū)下skip_initramfs替換為androidboot.force_normal_boot=1)。

2.保障啟動(dòng)安全性,合規(guī)Android規(guī)范

?AVB驗(yàn)證是Google Play認(rèn)證的核心要求,理解android_slot_verify等函數(shù),可確保鏡像驗(yàn)證邏輯符合Android安全規(guī)范;

?處理A/B分區(qū)元數(shù)據(jù),避免設(shè)備因鏡像損壞無(wú)法啟動(dòng)(標(biāo)記不可啟動(dòng)slot)。

3.快速定位啟動(dòng)故障

?啟動(dòng)失?。ㄈ鐭o(wú)法進(jìn)入Recovery、內(nèi)核崩潰)時(shí),可通過(guò)函數(shù)日志定位問(wèn)題:

?misc分區(qū)讀寫(xiě)失敗→檢查分區(qū)大小/扇區(qū)地址;

?AVB驗(yàn)證失敗→排查鏡像簽名/rollback索引;

?內(nèi)存分配失敗→調(diào)整內(nèi)核解壓內(nèi)存計(jì)算邏輯。

4.適配硬件與內(nèi)核,提升兼容性

?DTBO疊加層邏輯可適配同芯片不同硬件配置(如不同屏幕/傳感器);

?內(nèi)核壓縮格式適配(LZ4/GZIP等),優(yōu)化啟動(dòng)速度(代碼中已標(biāo)注RK3308不同壓縮格式的啟動(dòng)耗時(shí),LZ4最優(yōu))。

5.定制內(nèi)存布局,優(yōu)化啟動(dòng)性能

?sysmem_alloc_uncomp_kernel函數(shù)決定內(nèi)核解壓內(nèi)存的分配策略,合理調(diào)整壓縮比計(jì)算邏輯,可避免內(nèi)存溢出,同時(shí)優(yōu)化啟動(dòng)速度。

五、總結(jié)

android_bootloader.c是Rockchip平臺(tái)Android Bootloader的“心臟”,串聯(lián)了啟動(dòng)模式判斷、安全驗(yàn)證、鏡像加載、內(nèi)核啟動(dòng)全鏈路。對(duì)于開(kāi)發(fā)者而言:

?理解它,能定制符合產(chǎn)品需求的啟動(dòng)邏輯;

?掌握它,能快速定位啟動(dòng)故障,保障設(shè)備穩(wěn)定性;

?吃透它,能適配Android安全規(guī)范,兼顧功能性與安全性。

無(wú)論是做Android底層定制、設(shè)備刷機(jī)工具開(kāi)發(fā),還是解決Bootloader啟動(dòng)問(wèn)題,這份代碼都是繞不開(kāi)的核心——它不僅是代碼,更是Android設(shè)備從“硬件初始化”到“系統(tǒng)啟動(dòng)”的完整邏輯閉環(huán)。

審核編輯 黃宇

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

    關(guān)注

    12

    文章

    4023

    瀏覽量

    133955
  • AVB
    AVB
    +關(guān)注

    關(guān)注

    0

    文章

    16

    瀏覽量

    5657
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    深入解析U-Boot image.c:RK平臺(tái)鏡像處理核心邏輯

    在瑞芯微(RK平臺(tái)的嵌入式開(kāi)發(fā)中,U-Boot作為核心啟動(dòng)加載程序,負(fù)責(zé)完成鏡像解析、校驗(yàn)、加載等關(guān)鍵
    的頭像 發(fā)表于 02-24 16:46 ?1403次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>U-Boot image.c:<b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>鏡像處理<b class='flag-5'>核心</b>邏輯

    一文吃透RK平臺(tái)OTA升級(jí)開(kāi)發(fā):邏輯調(diào)試的完整指南

    在 Rockchip(簡(jiǎn)稱(chēng) RKAndroid 平臺(tái)開(kāi)發(fā)中,OTA(Over The Air)升級(jí)是實(shí)現(xiàn)設(shè)備軟件迭代的核心方式。無(wú)論是本地卡刷升級(jí),還是在線(xiàn)無(wú)縫更新,掌握 OTA 升
    的頭像 發(fā)表于 02-09 16:26 ?275次閱讀
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>OTA升級(jí)開(kāi)發(fā):<b class='flag-5'>從</b>邏輯<b class='flag-5'>到</b>調(diào)試的完整指南

    技術(shù)分享 | RK3568 Android11 如何實(shí)現(xiàn)自啟動(dòng)應(yīng)用

    隨著Android版本的不斷升級(jí),對(duì)于應(yīng)用權(quán)限的管理會(huì)更加苛刻。我司IAC-RK3568-Kit開(kāi)發(fā)板默認(rèn)搭載Android11,相比較之前RK3288的產(chǎn)品安卓版本變更較大,有些客戶(hù)
    的頭像 發(fā)表于 02-05 17:26 ?390次閱讀
    技術(shù)分享 | <b class='flag-5'>RK</b>3568 <b class='flag-5'>Android</b>11 如何實(shí)現(xiàn)自<b class='flag-5'>啟動(dòng)</b>應(yīng)用

    U-Boot SPL核心文件spl.c深度解析啟動(dòng)流程調(diào)試優(yōu)化

    解析 U-Boot 中 spl.c 文件的功能與作用,探討其在系統(tǒng)調(diào)試和優(yōu)化中的價(jià)值,并通過(guò)流程圖和腦圖幫助開(kāi)發(fā)者快速掌握核心要點(diǎn)。
    的頭像 發(fā)表于 02-05 14:08 ?126次閱讀
    U-Boot SPL<b class='flag-5'>核心</b>文件spl.c深度<b class='flag-5'>解析</b>:<b class='flag-5'>從</b><b class='flag-5'>啟動(dòng)</b><b class='flag-5'>流程</b><b class='flag-5'>到</b>調(diào)試優(yōu)化

    RK平臺(tái)UART開(kāi)發(fā)!驅(qū)動(dòng)配置測(cè)試全流程

    完善的 UART 開(kāi)發(fā)支持,本文將結(jié)合官方開(kāi)發(fā)指南,功能特點(diǎn)、驅(qū)動(dòng)配置、測(cè)試驗(yàn)證三個(gè)維度,帶大家快速掌握 RK 平臺(tái) UART 開(kāi)發(fā)技巧,文末還附上知識(shí)腦圖方便梳理思路~
    的頭像 發(fā)表于 02-04 17:44 ?1736次閱讀
    <b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>UART開(kāi)發(fā)!<b class='flag-5'>從</b>驅(qū)動(dòng)配置<b class='flag-5'>到</b>測(cè)試全<b class='flag-5'>流程</b>

    深入解析RK平臺(tái)編譯核心:build.sh的知識(shí)點(diǎn)、調(diào)試技巧與開(kāi)發(fā)價(jià)值

    在瑞芯微(RK)Linux SDK 開(kāi)發(fā)中,build.sh是整個(gè)編譯構(gòu)建系統(tǒng)的“入口中樞”—— 它統(tǒng)一管理環(huán)境配置、命令解析、模塊構(gòu)建與日志輸出,幾乎所有芯片(如 RK3588、RV1126)的固件編譯、內(nèi)核構(gòu)建、根文件系統(tǒng)定
    的頭像 發(fā)表于 02-03 16:02 ?1850次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>編譯<b class='flag-5'>核心</b>:build.sh的知識(shí)點(diǎn)、調(diào)試技巧與開(kāi)發(fā)價(jià)值

    深入解析RK平臺(tái)GPIO驅(qū)動(dòng):原理到調(diào)試,開(kāi)發(fā)者必看指南

    平臺(tái)上,GPIO 驅(qū)動(dòng)的實(shí)現(xiàn)直接影響著硬件交互的穩(wěn)定性與效率。本文將帶你深入剖析 RK 平臺(tái) GPIO 驅(qū)動(dòng)的核心邏輯、使用方法,以及對(duì)調(diào)
    的頭像 發(fā)表于 02-03 15:53 ?1012次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b>GPIO驅(qū)動(dòng):<b class='flag-5'>從</b>原理到調(diào)試,開(kāi)發(fā)者必看指南

    深度解析SPL階段A/B分區(qū)啟動(dòng):spl_ab.c代碼全拆解

    解析、核心流程、開(kāi)發(fā)意義三個(gè)維度,徹底拆解這段代碼。 ? ? 一、 A/B 分區(qū)與 SPL 的核心作用 ? ? A/B 分區(qū)將系統(tǒng)分為兩個(gè)獨(dú)
    的頭像 發(fā)表于 01-20 07:07 ?9489次閱讀
    深度<b class='flag-5'>解析</b>SPL階段A/B分區(qū)<b class='flag-5'>啟動(dòng)</b>:spl_ab.c<b class='flag-5'>代碼</b>全拆解

    深入解析RK平臺(tái)Android/Linux Bootloader核心文件:android_bootloader.c

    .c是對(duì)接Android啟動(dòng)邏輯的核心文件——它決定了設(shè)備是進(jìn)入正常系統(tǒng)、Recovery模式還是Fastboot模式,同時(shí)承擔(dān)了AVBAndro
    的頭像 發(fā)表于 01-09 10:58 ?1187次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平臺(tái)</b><b class='flag-5'>Android</b>/Linux <b class='flag-5'>Bootloader</b><b class='flag-5'>核心</b>文件:<b class='flag-5'>android_bootloader</b>.c

    深入解析?RK?平臺(tái)顯示驅(qū)動(dòng):格式支持、處理流程與實(shí)現(xiàn)原理

    、驅(qū)動(dòng)處理流程、核心實(shí)現(xiàn)原理三個(gè)維度,帶您深入了解? RK? 平臺(tái)顯示驅(qū)動(dòng)的工作機(jī)制。 一、 RK
    的頭像 發(fā)表于 12-02 07:10 ?309次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b>?<b class='flag-5'>RK</b>?<b class='flag-5'>平臺(tái)</b>顯示驅(qū)動(dòng):格式支持、處理<b class='flag-5'>流程</b>與實(shí)現(xiàn)原理

    深入理解?RK3506 U-Boot?重定位:代碼原理

    在嵌入式系統(tǒng)中,U-Boot?作為引導(dǎo)加載程序,其啟動(dòng)流程核心環(huán)節(jié)之一就是 重定位(Relocation) 。對(duì)于?RK3506?這類(lèi)基于?ARM Cortex-A?架構(gòu)的芯片,重定
    的頭像 發(fā)表于 11-28 07:05 ?576次閱讀
    <b class='flag-5'>深入</b>理解?<b class='flag-5'>RK</b>3506 U-Boot?重定位:<b class='flag-5'>從</b><b class='flag-5'>代碼</b><b class='flag-5'>到</b>原理

    VVIC 平臺(tái)商品詳情接口高效調(diào)用方案:簽名驗(yàn)證數(shù)據(jù)解析流程

    本文詳解VVIC平臺(tái)商品詳情接口調(diào)用全流程,涵蓋參數(shù)配置、簽名生成、異常處理與數(shù)據(jù)解析,提供可復(fù)用的Python代碼及避坑指南,助力開(kāi)發(fā)者高效實(shí)現(xiàn)安全、穩(wěn)定的數(shù)據(jù)對(duì)接。
    的頭像 發(fā)表于 09-23 10:28 ?678次閱讀

    代碼物聯(lián)網(wǎng)平臺(tái)典型場(chǎng)景落地全流程需求實(shí)現(xiàn)的路徑解析

    代碼物聯(lián)網(wǎng)平臺(tái)將物聯(lián)網(wǎng)的設(shè)備接入、數(shù)據(jù)傳輸、分析決策與低代碼的可視化開(kāi)發(fā)深度融合,為工業(yè)監(jiān)控、智慧農(nóng)業(yè)、智能家居等場(chǎng)景提供了高效落地路徑。其核心邏輯是通過(guò)封裝物聯(lián)網(wǎng)協(xié)議、預(yù)制設(shè)備組件
    的頭像 發(fā)表于 08-21 16:26 ?826次閱讀

    代碼物聯(lián)網(wǎng)云平臺(tái)功能解析設(shè)備接入智能應(yīng)用

    設(shè)備、數(shù)據(jù)與應(yīng)用的核心樞紐,其功能覆蓋了設(shè)備接入數(shù)據(jù)處理、應(yīng)用開(kāi)發(fā)的全流程。以下是其主要功能的詳細(xì)說(shuō)明: 一、設(shè)備接入與管理 物聯(lián)網(wǎng)云平臺(tái)
    的頭像 發(fā)表于 07-31 15:23 ?940次閱讀

    RK3128 Android 7.1 進(jìn)入深度休眠流程分析

    RK3128 Android 7.1 進(jìn)入深度休眠流程分析RK3128是瑞芯微電子推出的一款低功耗四核Cortex-A7處理器,運(yùn)行Android
    發(fā)表于 07-22 10:45