0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

深入解析rk平台Android Bootloader核心代码:从启动流程到AVB验证

jf_44130326 来源:Linux1024 作者:Linux1024 2026-01-22 07:06 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

作为Android设备启动的第一道“闸门”,Bootloader(以U-Boot为主)承担着初始化硬件、加载内核、验证镜像完整性的核心职责。今天我们拆解Rockchip平台下android_bootloader.c的核心代码,带你读懂Android设备从Bootloader到内核的完整启动逻辑,以及开发者关注这些代码的核心价值。

一、代码整体定位

这份代码是Rockchip(瑞芯微)平台U-Boot中Android Bootloader的核心实现,核心作用是衔接硬件初始化与内核启动,主要负责:

•读写Bootloader控制块(BCB),判断设备启动模式(正常/Recovery/Bootloader);

•执行Android Verified Boot(AVB)验证,保障镜像完整性;

•加载内核/设备树镜像,组装内核命令行,最终启动内核;

•适配A/B分区、DTBO叠加层等Android特性。

二、核心函数解析:从启动模式判断到内核启动

我们按“启动流程链路”拆解关键函数,理解每个环节的核心作用:

1. BCB读写:启动指令的“中转站”

BCB(Bootloader Control Block)是存储在misc分区的启动控制信息,决定设备下次启动的模式,核心操作由两个函数完成:

android_bootloader_message_load

作用:从misc分区读取BCB数据到内存;

关键逻辑:检查misc分区大小是否足够容纳BCB结构体→调用blk_dread读取指定扇区→失败则输出日志并返回错误。

android_bootloader_message_write

作用:将内存中的BCB数据写入misc分区;

关键逻辑:与读操作逻辑对称,调用blk_dwrite写入→支持“一次性指令”(如bootonce-bootloader)的清空。

android_bcb_write

作用:向BCB写入自定义启动命令(如boot-recovery);

关键逻辑:初始化空BCB结构体→查找misc分区→写入指定命令(如强制进入Recovery)。

2.启动模式判断:决定设备“走哪条路”

android_bootloader_load_and_clear_mode

作用:核心启动模式决策函数;

关键逻辑

a.先检查Fastboot缓冲区(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)转换为字符串(如recovery),便于日志输出和调试。

3. Bootloader模式:进入Fastboot

android_bootloader_boot_bootloader

作用:触发Fastboot模式;

关键逻辑:读取环境变量fastbootcmd(无则用默认值fastboot usb 0)→执行该命令,让设备进入Fastboot刷机模式。

4.内核加载与启动:核心执行环节

sysmem_alloc_uncomp_kernel

作用:为解压后的内核分配内存;

关键逻辑

a.根据内核压缩类型(LZ4/GZIP/LZO等),按压缩比反向计算解压后大小(如GZIP按40%压缩比,分配2.5倍原大小);

b.释放压缩内核占用的内存→分配解压内核所需内存,避免内存溢出。

android_bootloader_boot_kernel

作用:最终启动内核的“临门一脚”;

关键逻辑

a.解析内核地址、压缩类型(如LZ4),输出启动日志;

b.调用sysmem_alloc_uncomp_kernel分配解压内存;

c.调用do_bootm_states执行内核启动流程(加载OS、初始化RAMDisk、执行内核)。

5.内核命令行:给内核的“启动参数”

strjoin

作用:基础工具函数,将字符串数组用指定分隔符(如空格)拼接成完整字符串。

android_assemble_cmdline

作用:组装内核启动命令行(bootargs);

关键逻辑:拼接以下参数,生成最终bootargs:

○环境变量默认bootargs;

○A/B分区后缀(如androidboot.slot_suffix=_a);

○设备序列号(androidboot.serialno=xxx);

○Root设备路径(root=/dev/xxx);

○额外参数(如Normal模式的skip_initramfs)。

6. AVB验证:启动安全性的“守门人”

AVB(Android Verified Boot)是Android的镜像验证机制,防止恶意镜像刷入,核心函数如下:

android_slot_verify

作用:核心AVB验证函数;

关键逻辑

a.检查设备解锁状态(解锁则跳过严格验证);

b.获取A/B分区元数据,确定当前启动slot(_a/_b);

c.调用avb_slot_verify验证boot/recovery/vendor_boot等分区镜像;

d.验证失败则标记该slot为不可启动→验证成功则分发镜像到指定内存地址。

slot_set_unbootable

作用:将指定A/B分区标记为“不可启动”;

关键逻辑:清空分区优先级、剩余尝试次数、启动成功标记,防止设备启动损坏的镜像。

7.设备树适配:硬件适配的“灵活层”

android_get_dtbo&android_fdt_overlay_apply

作用:加载并应用DTBO(设备树叠加层);

关键逻辑

a.从dtbo/recovery分区读取DTBO镜像;

b.选择指定索引的设备树条目;

c.将DTBO叠加到主设备树(适配不同硬件配置)→失败则恢复原设备树。

8.核心启动流程:android_bootloader_boot_flow

这是整个Bootloader启动的“总控函数”,串联所有环节:

1.读取misc分区,判断启动模式(Normal/Recovery/Bootloader);

2.处理A/B分区slot后缀;

3.执行AVB验证(若开启);

4.加载boot/recovery镜像到指定内存;

5.组装内核命令行;

6.加载DTBO并应用叠加层;

7.调用android_bootloader_boot_kernel启动内核。

三、核心启动流程图

wKgZPGlxXMqAGLZaAAHm2QeX1_g174.png

四、开发者关注这部分代码的核心意义

1.定制启动逻辑,适配产品需求

•可修改BCB指令逻辑,实现定制化启动(如强制进入Recovery、修改Fastboot默认命令);

•适配不同Android版本特性(如动态分区下skip_initramfs替换为androidboot.force_normal_boot=1)。

2.保障启动安全性,合规Android规范

•AVB验证是Google Play认证的核心要求,理解android_slot_verify等函数,可确保镜像验证逻辑符合Android安全规范;

•处理A/B分区元数据,避免设备因镜像损坏无法启动(标记不可启动slot)。

3.快速定位启动故障

•启动失败(如无法进入Recovery、内核崩溃)时,可通过函数日志定位问题:

○misc分区读写失败→检查分区大小/扇区地址;

○AVB验证失败→排查镜像签名/rollback索引;

○内存分配失败→调整内核解压内存计算逻辑。

4.适配硬件与内核,提升兼容性

•DTBO叠加层逻辑可适配同芯片不同硬件配置(如不同屏幕/传感器);

•内核压缩格式适配(LZ4/GZIP等),优化启动速度(代码中已标注RK3308不同压缩格式的启动耗时,LZ4最优)。

5.定制内存布局,优化启动性能

•sysmem_alloc_uncomp_kernel函数决定内核解压内存的分配策略,合理调整压缩比计算逻辑,可避免内存溢出,同时优化启动速度。

五、总结

android_bootloader.c是Rockchip平台Android Bootloader的“心脏”,串联了启动模式判断、安全验证、镜像加载、内核启动全链路。对于开发者而言:

•理解它,能定制符合产品需求的启动逻辑;

•掌握它,能快速定位启动故障,保障设备稳定性;

•吃透它,能适配Android安全规范,兼顾功能性与安全性。

无论是做Android底层定制、设备刷机工具开发,还是解决Bootloader启动问题,这份代码都是绕不开的核心——它不仅是代码,更是Android设备从“硬件初始化”到“系统启动”的完整逻辑闭环。

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Android
    +关注

    关注

    12

    文章

    4035

    浏览量

    134501
  • AVB
    AVB
    +关注

    关注

    0

    文章

    16

    浏览量

    5705
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    深度解析 | DMA-BUF适配AndroidRK特性核心Patch:高性能内存管理升级方案

    support ANDROID and RK feature,通过12个文件的深度改造与重构,为DMA-BUF机制注入了Android生态适配与RK
    的头像 发表于 03-16 08:16 2983次阅读
    深度<b class='flag-5'>解析</b> | DMA-BUF适配<b class='flag-5'>Android</b>与<b class='flag-5'>RK</b>特性<b class='flag-5'>核心</b>Patch:高性能内存管理升级方案

    基于瑞芯微平台的 eMMC 颗粒验证流程指南

    启动慢如蜗牛不同批次颗粒混用,稳定性像开盲盒别再只用dd随便测一下了!眺望电子基于RK平台产线经验,整理出一套【eMMC三工具联合验证法】,
    的头像 发表于 03-12 11:01 217次阅读
    基于瑞芯微<b class='flag-5'>平台</b>的 eMMC 颗粒<b class='flag-5'>验证</b>全<b class='flag-5'>流程</b>指南

    深入解析U-Boot image.c:RK平台镜像处理核心逻辑

    在瑞芯微(RK平台的嵌入式开发中,U-Boot作为核心启动加载程序,负责完成镜像解析、校验、加载等关键
    的头像 发表于 02-24 16:46 1810次阅读
    <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升级开发:逻辑调试的完整指南

    在 Rockchip(简称 RKAndroid 平台开发中,OTA(Over The Air)升级是实现设备软件迭代的核心方式。无论是本地卡刷升级,还是在线无缝更新,掌握 OTA 升
    的头像 发表于 02-09 16:26 741次阅读
    一文吃透<b class='flag-5'>RK</b><b class='flag-5'>平台</b>OTA升级开发:<b class='flag-5'>从</b>逻辑<b class='flag-5'>到</b>调试的完整指南

    技术分享 | RK3568 Android11 如何实现自启动应用

    随着Android版本的不断升级,对于应用权限的管理会更加苛刻。我司IAC-RK3568-Kit开发板默认搭载Android11,相比较之前RK3288的产品安卓版本变更较大,有些客户
    的头像 发表于 02-05 17:26 680次阅读
    技术分享 | <b class='flag-5'>RK</b>3568 <b class='flag-5'>Android</b>11 如何实现自<b class='flag-5'>启动</b>应用

    深入解析RK平台编译核心:build.sh的知识点、调试技巧与开发价值

    在瑞芯微(RK)Linux SDK 开发中,build.sh是整个编译构建系统的“入口中枢”—— 它统一管理环境配置、命令解析、模块构建与日志输出,几乎所有芯片(如 RK3588、RV1126)的固件编译、内核构建、根文件系统定
    的头像 发表于 02-03 16:02 3361次阅读
    <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的知识点、调试技巧与开发价值

    深入解析RK平台GPIO驱动:原理到调试,开发者必看指南

    平台上,GPIO 驱动的实现直接影响着硬件交互的稳定性与效率。本文将带你深入剖析 RK 平台 GPIO 驱动的核心逻辑、使用方法,以及对调
    的头像 发表于 02-03 15:53 1261次阅读
    <b class='flag-5'>深入</b><b class='flag-5'>解析</b><b class='flag-5'>RK</b><b class='flag-5'>平台</b>GPIO驱动:<b class='flag-5'>从</b>原理到调试,开发者必看指南

    深度解析SPL阶段A/B分区启动:spl_ab.c代码全拆解

    解析核心流程、开发意义三个维度,彻底拆解这段代码。     一、 A/B 分区与 SPL 的核心作用     A/B 分区将系统分为两个独
    的头像 发表于 01-20 07:07 1w次阅读
    深度<b class='flag-5'>解析</b>SPL阶段A/B分区<b class='flag-5'>启动</b>:spl_ab.c<b class='flag-5'>代码</b>全拆解

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

    .c是对接Android启动逻辑的核心文件——它决定了设备是进入正常系统、Recovery模式还是Fastboot模式,同时承担了AVBAndro
    的头像 发表于 01-09 10:58 1428次阅读
    <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 平台显示驱动:格式支持、处理流程与实现原理

    、驱动处理流程核心实现原理三个维度,带您深入了解  RK  平台显示驱动的工作机制。 一、 RK
    的头像 发表于 12-02 07:10 516次阅读
    <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>与实现原理

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

    在嵌入式系统中,U-Boot 作为引导加载程序,其启动流程核心环节之一就是 重定位(Relocation) 。对于 RK3506 这类基于 ARM Cortex-A 架构的芯片,重定
    的头像 发表于 11-28 07:05 996次阅读
    <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 平台商品详情接口高效调用方案:签名验证数据解析流程

    本文详解VVIC平台商品详情接口调用全流程,涵盖参数配置、签名生成、异常处理与数据解析,提供可复用的Python代码及避坑指南,助力开发者高效实现安全、稳定的数据对接。
    的头像 发表于 09-23 10:28 800次阅读

    代码物联网平台典型场景落地全流程需求实现的路径解析

    代码物联网平台将物联网的设备接入、数据传输、分析决策与低代码的可视化开发深度融合,为工业监控、智慧农业、智能家居等场景提供了高效落地路径。其核心逻辑是通过封装物联网协议、预制设备组件
    的头像 发表于 08-21 16:26 989次阅读

    代码物联网云平台功能解析设备接入智能应用

    设备、数据与应用的核心枢纽,其功能覆盖了设备接入数据处理、应用开发的全流程。以下是其主要功能的详细说明: 一、设备接入与管理 物联网云平台
    的头像 发表于 07-31 15:23 1164次阅读

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

    RK3128 Android 7.1 进入深度休眠流程分析RK3128是瑞芯微电子推出的一款低功耗四核Cortex-A7处理器,运行Android
    发表于 07-22 10:45