国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

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

深入解析rk平臺Android Bootloader核心代碼:從啟動流程到AVB驗證

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

掃碼添加小助手

加入工程師交流群

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

一、代碼整體定位

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

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

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

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

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

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

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

1. BCB讀寫:啟動指令的“中轉(zhuǎn)站”

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

android_bootloader_message_load

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

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

android_bootloader_message_write

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

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

android_bcb_write

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

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

2.啟動模式判斷:決定設備“走哪條路”

android_bootloader_load_and_clear_mode

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

?關鍵邏輯

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

b.讀取BCB,匹配指令:

bootonce-bootloader:一次性進入Bootloader,讀取后清空BCB;

boot-recovery/boot-fastboot:進入Recovery模式;

無匹配指令:正常啟動模式。

android_boot_mode_str

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

3. Bootloader模式:進入Fastboot

android_bootloader_boot_bootloader

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

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

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

sysmem_alloc_uncomp_kernel

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

?關鍵邏輯

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

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

android_bootloader_boot_kernel

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

?關鍵邏輯

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

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

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

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

strjoin

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

android_assemble_cmdline

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

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

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

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

?設備序列號(androidboot.serialno=xxx);

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

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

6. AVB驗證:啟動安全性的“守門人”

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

android_slot_verify

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

?關鍵邏輯

a.檢查設備解鎖狀態(tài)(解鎖則跳過嚴格驗證);

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

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

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

slot_set_unbootable

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

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

7.設備樹適配:硬件適配的“靈活層”

android_get_dtbo&android_fdt_overlay_apply

?作用:加載并應用DTBO(設備樹疊加層);

?關鍵邏輯

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

b.選擇指定索引的設備樹條目;

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

8.核心啟動流程:android_bootloader_boot_flow

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

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

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

3.執(zhí)行AVB驗證(若開啟);

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

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

6.加載DTBO并應用疊加層;

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

三、核心啟動流程圖

wKgZPGlxXMqAGLZaAAHm2QeX1_g174.png

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

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

?可修改BCB指令邏輯,實現(xiàn)定制化啟動(如強制進入Recovery、修改Fastboot默認命令);

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

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

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

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

3.快速定位啟動故障

?啟動失敗(如無法進入Recovery、內(nèi)核崩潰)時,可通過函數(shù)日志定位問題:

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

?AVB驗證失敗→排查鏡像簽名/rollback索引;

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

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

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

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

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

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

五、總結(jié)

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

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

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

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

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

審核編輯 黃宇

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

    關注

    12

    文章

    4024

    瀏覽量

    133977
  • AVB
    AVB
    +關注

    關注

    0

    文章

    16

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

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

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

    技術分享 | RK3568 Android11 如何實現(xiàn)自啟動應用

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

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

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

    RK平臺UART開發(fā)!驅(qū)動配置測試全流程

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

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

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

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

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

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

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

    深入解析RK平臺Android/Linux Bootloader核心文件:android_bootloader.c

    .c是對接Android啟動邏輯的核心文件——它決定了設備是進入正常系統(tǒng)、Recovery模式還是Fastboot模式,同時承擔了AVBAndro
    的頭像 發(fā)表于 01-09 10:58 ?1195次閱讀
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平臺</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?平臺顯示驅(qū)動:格式支持、處理流程與實現(xiàn)原理

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

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

    在嵌入式系統(tǒng)中,U-Boot?作為引導加載程序,其啟動流程核心環(huán)節(jié)之一就是 重定位(Relocation) 。對于?RK3506?這類基于?ARM Cortex-A?架構(gòu)的芯片,重定
    的頭像 發(fā)表于 11-28 07:05 ?584次閱讀
    <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 平臺商品詳情接口高效調(diào)用方案:簽名驗證數(shù)據(jù)解析流程

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

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

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

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

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

    RK3128 Android 7.1 進入深度休眠流程分析

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