RK3566 Android 适配踩坑:AB 分区未适配引发开机分区缺失,设备无法进入系统 电子说
在瑞芯微 RK3566 平台 Android 系统定制开发过程中,GKI 内核搭配 AB 双分区升级机制是新版固件常用架构,但硬件分区表未同步适配时,盲目开启 AB 镜像模式极易触发启动异常。本文记录一次开启 AB 分区后设备卡恢复模式、无法正常进系统的排错、分析与修复全过程,给同平台开发小伙伴参考避坑。
一、故障现场现象
完成固件编译烧录后,开发板上电启动异常,无法跳转至安卓桌面主界面,系统反复停滞在 recovery 恢复流程。
伴随明显启动卡顿、外设初始化报错,ADB、USB 功能也同步异常,整机无法正常使用。

二、启动日志关键报错分析
抓取内核启动日志,核心报错集中在分区节点缺失、分区挂载失败两大方向,后续衍生出 USB 设备初始化异常连锁问题:
1.misc 分区块设备查找失败
recovery: failed to stat /dev/block/by-name/misc try 1: No such file or directory
系统启动 recovery 流程时,反复检索 misc 分区软链接节点,连续多次尝试均无法找到对应块设备,基础分区校验直接失败。
2.cache 分区挂载彻底异常
Failed to open '/dev/block/by-name/cache': No such file or directoryFailed to mount /cache: No such file or directoryCan't mount /cache/recovery/last_locale
系统找不到 cache 分区设备,无法挂载缓存目录,recovery 读取恢复命令、系统配置参数全部中断,恢复流程卡死。
3.分区异常引发外设连锁报错
分区基础故障后,后续 USB Gadget、ADB 服务初始化接连报错:系统无法识别 USB 控制器属性、设备节点创建失败、软链接重复报错,整机外设功能同步失效,最终彻底卡在启动阶段。
三、故障根因定位
从报错特征结合编译配置文件溯源,问题根源在于编译配置与硬件分区布局不匹配:
1.平台配置文件BoardConfig.mk中,BOARD_BUILD_GKI参数控制 GKI 内核与 AB 分区架构联动开关
2.原配置默认BOARD_BUILD_GKI := true,参数触发条件判断逻辑,自动启用 AB 双镜像、虚拟 AB 分区压缩、系统 AB 切换机制
3.AB 分区架构有硬性前置要求:硬件分区表、设备树必须提前划分 misc、cache、A/B 系统分区等专属分区节点
4.当前设备并未做 AB 分区适配调试,硬件分区布局仍是传统单分区结构,固件却强制按照 AB 架构寻址分区,最终出现分区节点不存在、挂载失败,系统无法正常启动
简单来说:未规划 AB 分区硬件布局,强行开启 GKI+AB 模式,软硬件配置错位导致启动崩盘。
四、实战修复配置修改
核心修复思路:暂时关闭 GKI 与 AB 分区机制,降级为传统单分区启动模式,适配现有硬件分区结构。
修改device/rockchip/rk356x/rk3566_u/BoardConfig.mk配置文件,改动如下:
--- a/device/rockchip/rk356x/rk3566_u/BoardConfig.mk+++ b/device/rockchip/rk356x/rk3566_u/BoardConfig.mk@@ -18,9 +18,9 @@ BUILD_WITH_GO_OPT := false TARGET_BOARD_CPU := RK3566-BOARD_BUILD_GKI := true+BOARD_BUILD_GKI := false ##在这个文件定义##devicerockchipcommonBoardConfig.mkifeq ($(strip $(BOARD_BUILD_GKI)), true) # AB image definition BOARD_USES_AB_IMAGE := true BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE := true BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION := trueelse BOARD_USES_AB_IMAGE ?= false BOARD_ROCKCHIP_VIRTUAL_AB_ENABLE ?= false BOARD_ROCKCHIP_VIRTUAL_AB_COMPRESSION ?= falseendif
修改逻辑说明
1.将BOARD_BUILD_GKI由true改为false,跳出 AB 架构启用分支
2.自动进入 else 逻辑,批量关闭 AB 镜像、虚拟 AB 分区、分区压缩全部相关功能
3.系统切换为经典单分区启动逻辑,不再寻址 AB 专属 misc、cache 分区,规避分区缺失报错
五、参数联动原理梳理
RK 平台该组配置存在强绑定关系,开关改动直接改变整套系统启动架构:
•开启 BOARD_BUILD_GKI:启用 GKI 通用内核 + AB 双系统分区,支持 OTA 差分升级、系统故障回滚、双系统兜底,对分区表、fstab 挂载、设备树分区定义要求严苛
•关闭 BOARD_BUILD_GKI:回归传统单分区固件模式,无 AB 分区切换逻辑,分区结构简单通用,适配未做分区改造的硬件设备
本次设备无 AB 分区硬件基础,强行开启高级架构必然启动失败,关闭后即可兼容现有分区正常运行。
六、修复效果验证
配置修改完成后,执行全量编译、烧录固件,设备启动恢复正常:
1.启动日志不再出现 misc、cache 分区找不到、挂载失败报错
2.recovery 恢复流程平稳跑完,无卡顿卡死现象
3.USB 控制器识别、ADB 服务初始化恢复正常,外设报错全部消除
4.设备顺利进入安卓主系统桌面,整机业务功能恢复可用
七、开发避坑总结 & 后续优化建议
日常适配避坑要点
1.RK3566/RK3568 系列 Android 开发中,GKI 内核开关和 AB 分区深度绑定,不可随意默认开启
2.AB 双分区架构不能只改编译配置,必须提前配套修改分区表、设备树分区节点、fstab 挂载规则
3.新项目初期未完成分区调试、OTA 升级适配前,优先关闭 AB 模式,保障基础系统稳定启动
后续进阶优化方向
1.若业务需要 OTA 差分升级、系统故障回滚功能,重新规划硬件分区,补充 misc、cache、AB 系统分区
2.同步修正设备树分区定义、开机挂载配置,全部适配完成后,再重新开启 GKI 与 AB 分区开关
3.固件编译前统一核对 BoardConfig 全局分区配置,杜绝编译架构与硬件分区不匹配问题
写在最后
嵌入式 Android 系统定制中,各类编译参数开关背后,对应的是一整套系统架构逻辑。分区类启动故障,优先核对编译配置与硬件分区布局的一致性,不要盲目调试驱动、外设代码。理清参数联动关系,匹配硬件实际规格,才能从根源解决启动异常问题。
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !