Bootloader是Android设备启动的第一道“关卡”,负责初始化硬件、加载系统镜像并完成内核启动的前置准备。在基于U-Boot的Android设备中,android_bootloader.c是对接Android启动逻辑的核心文件——它决定了设备是进入正常系统、Recovery模式还是Fastboot模式,同时承担了AVB(Android Verified Boot)验证、内核加载、命令行参数组装等关键工作。(这个启动流程android和linux共用)
本文将从文件定位、核心函数、执行流程三个维度,拆解这个文件的底层逻辑。
一、文件核心定位
android_bootloader.c是U-Boot中实现Android启动流程的核心模块,核心职责包括:
1.解析BCB(Bootloader Control Block)信息,决策设备启动模式(正常/Recovery/Fastboot);
2.处理AVB验证逻辑,保障系统镜像的完整性;
3.加载Android内核/Recovery镜像到指定内存地址;
4.组装内核启动参数(cmdline),传递系统启动所需的关键信息;
5.处理DTBO(Device Tree Overlay)叠加,适配不同硬件配置;
6.对接Android A/B分区机制,支持槽位切换与验证。
该文件依赖android_bootloader_message.h(BCB结构体定义)、android_avb(AVB验证)、bootm.h(内核启动)等核心头文件,是Bootloader与Android系统之间的“桥梁”。
二、核心函数拆解
按功能模块划分,文件中的核心函数可分为6大类,以下是关键函数的细节解析:
1. BCB(启动控制块)操作模块
BCB存储在misc分区,是Bootloader与Android系统交互启动指令的核心载体,相关函数负责BCB的读写与解析。
(1)android_bootloader_message_load/write
•作用:从misc分区读取/写入BCB结构体(android_bootloader_message);
•关键逻辑:
○计算BCB所需的扇区数,检查misc分区大小是否足够;
○调用blk_dread/blk_dwrite完成分区读写;
○读写失败时打印错误日志,返回负值。
(2)android_bootloader_load_and_clear_mode
•作用:解析启动模式,是整个文件的“决策中枢”;
•关键逻辑:
a.先检查RAM中是否有Fastboot指令(如reboot-bootloader),有则直接返回BOOTLOADER模式;
b.加载misc分区的BCB,解析command字段:
bootonce-bootloader:单次进入Bootloader,读取后清空BCB;
boot-recovery/boot-fastboot:进入Recovery模式;
无匹配指令:默认NORMAL模式。
(3)android_bcb_write
•作用:向misc分区写入启动指令(如Recovery启动命令);
•关键限制:指令长度不能超过32字节,否则返回内存错误。
2. AVB验证模块
AVB是Android的镜像验证机制,保障系统镜像未被篡改,相关函数处理验证流程与镜像分发。
(1)android_slot_verify
•作用:核心AVB验证函数,完成分区验证与状态更新;
•关键逻辑:
a.检测设备解锁状态(解锁则跳过严格验证);
b.分配内存缓冲区,加载boot/vendor_boot/init_boot等分区;
c.调用avb_slot_verify执行哈希树验证;
d.根据验证结果更新androidboot.verifiedbootstate(green/orange/yellow/red);
e.验证失败时标记当前槽位为不可启动。
(2)avb_image_distribute_prepare/finish
•作用:AVB验证前后的镜像内存管理;
○prepare:分配连续内存缓冲区,规划boot/vendor_boot/init_boot的内存布局;
○finish:将验证后的镜像分发到指定内存地址,修复v3+版本的boot.img头部。
3.镜像加载模块
负责从指定分区加载Android镜像到内存,是内核启动的前置步骤。
(1)android_image_load_by_partname
•作用:根据分区名(如boot/recovery)加载镜像到指定内存;
•关键逻辑:
a.通过分区名获取分区信息(起始扇区、大小);
b.调用android_image_load将镜像加载到内存,并返回加载后的地址。
(2)android_bootloader_boot_flow
•作用:整合所有启动流程的“主函数”;
•核心流程:启动模式检测→ AVB验证→镜像加载→命令行组装→内核启动。
4.内核启动模块
负责内核启动的最终执行,包括内存分配、参数传递。
android_bootloader_boot_kernel
•作用:启动Android内核;
•关键逻辑:
a.解析内核压缩类型(GZIP/LZ4/LZO等),计算解压所需内存;
b.分配解压内存,释放压缩镜像占用的内存;
c.组装bootm参数(内核地址、设备树地址);
d.调用do_bootm_states执行内核启动流程。
5.命令行组装模块
内核启动参数(cmdline)的核心组装逻辑,决定系统启动的行为。
android_assemble_cmdline
•作用:整合多源参数,生成最终的内核cmdline;
•整合内容:
a.环境变量中的bootargs基础参数;
b.A/B分区的槽位后缀(如androidboot.slot_suffix=_a);
c.设备序列号(androidboot.serialno=xxx);
d.根设备信息(root=/dev/xxx);
e.启动模式参数(如skip_initramfs/androidboot.force_normal_boot=1)。
6. DTBO叠加模块
适配不同硬件配置的设备树叠加逻辑。
android_fdt_overlay_apply
•作用:加载DTBO分区,将设备树叠加层应用到主设备树;
•关键逻辑:
a.根据启动模式(正常/Recovery)选择DTBO分区;
b.读取DTBO头部,选择匹配的设备树条目;
c.扩容主设备树内存,应用叠加层;
d.失败时回滚主设备树备份。
三、核心执行流程(附流程图)
android_bootloader.c的整体执行流程可分为5个阶段,以下是流程拆解与可视化流程图:
1.流程总览

2.流程分步解析
阶段1:启动模式检测(核心是BCB解析)
Bootloader启动后,首先读取misc分区的BCB结构体,同时检查RAM中是否有Fastboot遗留指令(如reboot-bootloader)。根据BCB的command字段,决策设备进入NORMAL(正常)、RECOVERY(恢复)或BOOTLOADER(Fastboot)模式。
阶段2:AVB验证(可选)
•若设备锁定且启用AVB,执行分区验证:分配连续内存缓冲区,加载boot/vendor_boot/init_boot等分区,通过AVB哈希树验证镜像完整性;
•若设备解锁,跳过严格验证,仅标记验证状态为orange(未验证);
•验证完成后,将镜像分发到内核启动所需的内存地址。
阶段3:镜像加载
根据启动模式选择对应的分区(正常模式选boot,Recovery模式选recovery/boot),调用android_image_load将镜像加载到指定内存地址。
阶段4:命令行组装
整合环境变量、A/B槽位、序列号、启动模式参数等,生成最终的内核cmdline,并更新bootargs环境变量(如添加androidboot.slot_suffix=_a、skip_initramfs等)。
阶段5:内核启动
•适配DTBO叠加层(若有),扩容主设备树并应用叠加;
•根据内核压缩类型分配解压内存,释放压缩镜像内存;
•调用do_bootm_states执行内核启动流程,完成Bootloader到Android内核的交接。
四、核心亮点与设计思路
1.灵活性适配:支持A/B分区、AVB验证、DTBO叠加等Android核心特性,兼容不同版本的Android启动逻辑;
2.容错机制:BCB读取失败时默认进入正常模式,AVB验证失败时标记槽位为不可启动,保障设备基础可用性;
3.内存高效管理:AVB验证时分配连续内存缓冲区,统一管理boot/vendor_boot/init_boot的内存布局,避免内存碎片;
4.启动模式兼容:兼顾传统Recovery分区与A/B分区的Recovery逻辑(无Recovery分区时复用boot分区)。
五、总结
android_bootloader.c是U-Boot对接Android启动逻辑的“核心枢纽”——它上承Bootloader的硬件初始化,下启Android内核的启动流程,同时兼顾了安全性(AVB)、灵活性(A/B分区)和兼容性(DTBO)。
理解这个文件的逻辑,不仅能掌握Android/linux设备的启动流程,更能为定制化Bootloader、排查启动故障(如Recovery无法进入、AVB验证失败)提供核心思路。对于Android底层开发、设备调试人员来说,这个文件是必须深入理解的核心模块。
审核编辑 黄宇
- 随机文章
- 热门文章
- 热评文章
- 数码博主EDC,件件实用,快来看看自己都有吗?
- 今日好券|8.2上新:京东超市领满200-20元券!中国移动免费领15GB流量!
- 壹号本 OneXPlayer M1 迷你主机上市,搭酷睿Ultra 9 185H、一键加速、能接显卡扩展坞
- 气质显白的大牌口红,绝对不踩雷系列!
- 广西南宁市人大:“四项举措”书写民生答卷
- 抗衰老疫苗助力健康晚年
- 医生谈AI:AI与医生是协同,并非替代
- 辽宁吉林云南等地降雨仍较强 南方地区高温天气发展
- 封测厂商净利润同比增长超200%!行业景气叠加AI爆发,拉升先进封装需求
- 水内冷直流高压发生器MESZ-700操作说明——每日了解电力知识
- 各地各部门全力抢险救灾 抓紧灾后恢复
- 详谈比斯特方型铝壳自动分选机的组成部分
- 小盾构大效率
- 1西南地区持续阴雨天气 华北黄淮等地大气扩散条件逐步转差
- 2在中超联赛赛场北京成都球迷高呼:北京加油,成都雄起
- 3防风防寒!北京今天晴朗伴大风寒意十足 周末将迎小幅升温
- 4新手如何开始跑步?
- 5大雾黄色预警:京津冀等8省市部分地区有大雾 局地强浓雾
- 6春晚、哪吒带动文化经济高燃开年,中国IP大有可为!
- 7敏芯股份营收暴涨超35% MEMS传感器业务全面复苏
- 8洞察:人形机器人传感器产业链概览
- 9超80亿美元!中芯国际2024年营收创历史新高,净利润减两成
- 10hyper 内存,Hyper内存:如何监控与优化hyper-v虚拟机的内存使用
- 11课间延长、学籍管理新规……新学期,这些变化与你有关
- 12AI智算驱动光模块上市公司业绩飙涨!新易盛净利涨3倍
- 13年底冲刺,家电换新求“新”更求“质”
- 1Rab 睿坡 Xenon 2.0 男子保暖夹克
- 2中国移动 流量福利活动 免费领4GB流量券
- 3百亿补贴:Lenovo 联想 小新Pro 16 2022款 锐龙版 16英寸笔记本电脑(R7-6800H、16GB、512GB)
- 4China unicom 中国联通 爆款卡 20年29元月租(160G通用流量+100分钟通话+自主激活+送靓号)返10元红包
- 5联想拯救者 R7000 游戏本增配,搭最新 AMD 锐龙7 8745H + RTX 40 独显6699元起
- 6中国电信:汛期地区欠费用户也能用天通卫星服务
- 7全马跑者推荐,南卡Runner Pro5,跑步必备,骨传导音质天花板,潜艇级防水技术,值得入手
- 8清爽宅家~有台神仙茶吧机~你就会爱上喝水
- 9“宝宝巴士”极氪MIX最新官图公布,预计下半年上市
- 10胶囊收纳难?纠结喝点啥?一个抓娃娃机搞定所有难题!
- 11给大家种草一款护眼神器 米家防蓝光眼镜Pro 复古好看性价比高
- 12广西“八大米粉”排行,螺蛳粉垫底,游客:本地人果然更懂米粉
- 13泡椒鸡爪的家常做法分享





