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

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

3天内不再提示

RK3566 Android 适配踩坑:AB 分区未适配引发开机分区缺失,设备无法进入系统

jf_44130326 来源:Linux1024 作者:Linux1024 2026-05-26 09:41 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞芯微RK3566平台Android系统定制开发过程中,GKI内核搭配AB双分区升级机制是新版固件常用架构,但硬件分区表未同步适配时,盲目开启AB镜像模式极易触发启动异常。本文记录一次开启AB分区后设备卡恢复模式、无法正常进系统的排错、分析与修复全过程,给同平台开发小伙伴参考避坑。

一、故障现场现象

完成固件编译烧录后,开发板上电启动异常,无法跳转至安卓桌面主界面,系统反复停滞在recovery恢复流程。
伴随明显启动卡顿、外设初始化报错,ADB、USB功能也同步异常,整机无法正常使用。

wKgZPGoU-x6ARpevAAaj6_egQCM796.png

二、启动日志关键报错分析

抓取内核启动日志,核心报错集中在分区节点缺失分区挂载失败两大方向,后续衍生出USB设备初始化异常连锁问题:

1.misc分区块设备查找失败

recovery: failed to stat /dev/block/by-name/misctry1: No suchfileordirectory

系统启动recovery流程时,反复检索misc分区软链接节点,连续多次尝试均无法找到对应块设备,基础分区校验直接失败。

2.cache分区挂载彻底异常

Failed toopen'/dev/block/by-name/cache': No such fileordirectoryFailed to mount /cache: No such fileordirectoryCan'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:=falseTARGET_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系统定制中,各类编译参数开关背后,对应的是一整套系统架构逻辑。分区类启动故障,优先核对编译配置硬件分区布局的一致性,不要盲目调试驱动、外设代码。理清参数联动关系,匹配硬件实际规格,才能从根源解决启动异常问题。

审核编辑 黄宇

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

    关注

    12

    文章

    4043

    浏览量

    134824
  • RK3566
    +关注

    关注

    0

    文章

    162

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    RK3588 实录:Ubuntu分区挂载失败急救教程

    导致的,系统启动时挂载校验不通过,就会强制进入安全保护模式。今天这篇技术笔记,把我们过的复现、定位、根治方案一次性讲透,收藏备用,下次遇到直接照抄命令。一、问
    的头像 发表于 04-24 08:31 1244次阅读
    <b class='flag-5'>RK</b>3588 <b class='flag-5'>踩</b><b class='flag-5'>坑</b>实录:Ubuntu<b class='flag-5'>分区</b>挂载失败急救教程

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

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

    RK3588 CPU 隔离:AB/非 AB 系统双方案适配实战

    RK3588嵌入式产品开发中,CPU隔离是提升系统实时性的核心手段,能让关键任务独占核心资源,规避系统调度与中断干扰。本次基于RK3588原厂SDK, 同时实现
    的头像 发表于 02-09 07:12 703次阅读
    <b class='flag-5'>RK</b>3588 CPU 隔离:<b class='flag-5'>AB</b>/非 <b class='flag-5'>AB</b> <b class='flag-5'>系统</b>双方案<b class='flag-5'>适配</b>实战

    RK平台系统分区调整与自动分区工具介绍

    系统新增功能模块(如引入更复杂的应用、新增系统服务),或系统版本升级(如 Android 版本更新)时,原有分区可能
    的头像 发表于 02-06 16:37 2648次阅读
    <b class='flag-5'>RK</b>平台<b class='flag-5'>系统分区</b>调整与自动<b class='flag-5'>分区</b>工具介绍

    RK3576+Android15+Linux6.1调试EM05 4G模块全记录:从底层到上层的与破局

    )服务。最近我们在 RK3576 开发板 + Android15 系统 + Linux6.1 内核 环境下调试EM05 4G 模块 时,就遇到了从“RIL 起不来” 到 “库缺失” 再
    的头像 发表于 02-03 15:27 3793次阅读
    <b class='flag-5'>RK3576+Android</b>15+Linux6.1调试EM05 4G模块全记录:从底层到上层的<b class='flag-5'>踩</b><b class='flag-5'>坑</b>与破局

    硬核进阶:RK3576 Android15 驱动与系统开发实战指南

    android15,想与大家探讨更多,不仅仅是驱动,更包含android其他方面。 各位嵌入式与Android开发的朋友们,我们的  RK3576
    的头像 发表于 01-26 22:29 917次阅读
    硬核进阶:<b class='flag-5'>RK</b>3576 <b class='flag-5'>Android</b>15 驱动与<b class='flag-5'>系统</b>开发实战指南

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

    在嵌入式系统(尤其是 Rockchip 平台 Android 设备)中, A/B ( Seamless Update )无缝更新是保障系统更新不丢数据、更新失败可回滚的核心机制。而 S
    的头像 发表于 01-20 07:07 1w次阅读
    深度解析SPL阶段A/B<b class='flag-5'>分区</b>启动:spl_<b class='flag-5'>ab</b>.c代码全拆解

    实战复盘:RK3588 SPI+PCIe3x4方案启动修复,从节点配置到驱动适配全解析

          在 RK3588 嵌入式项目中, “ 接口配置不匹配 ” 是高频点 —— 近期 基于 linux6.1 内核 调试 SPI 闪存 +PCIe3x4 外设 方案时,就遇到了 “eMMC
    的头像 发表于 01-08 10:24 957次阅读
    实战复盘:<b class='flag-5'>RK</b>3588 SPI+PCIe3x4方案启动修复,从节点配置到驱动<b class='flag-5'>适配</b>全解析

    性能跃迁,鸿蒙开发新纪元!凌羽派RK3566鸿蒙开发板,开启全场景开发之旅

    【导语】还在为鸿蒙开发寻找强劲、稳定、高效的硬件平台?凌羽派RK3566鸿蒙开发板震撼登场!集高性能、全接口、强生态于一身,专为鸿蒙开发者、创客、企业与教育科研打造,助你轻松驾驭万物互联时代。一
    的头像 发表于 12-11 17:58 2834次阅读
    性能跃迁,鸿蒙开发新纪元!凌羽派<b class='flag-5'>RK3566</b>鸿蒙开发板,开启全场景开发之旅

    服务器数据恢复—重装系统后OceanStor存储上的分区数据丢失这样恢复

    二为xfs文件系统。 服务器存储故障: 工作人员重装系统操作失误导致磁盘分区变化,分区无法访问,数据丢失。
    的头像 发表于 09-02 15:32 839次阅读
    服务器数据恢复—重装<b class='flag-5'>系统</b>后OceanStor存储上的<b class='flag-5'>分区</b>数据丢失这样恢复

    系统适配 | RK3576适配Ubuntu20.04正式发布

    前言:为了满足广大开发者与嵌入式爱好者的需求!眺望电子正式宣布,已完成基于瑞芯微RK3576的开发板对Ubuntu20.04LTS操作系统的深度适配与优化。此次适配不仅成功移植了
    的头像 发表于 07-31 08:32 2433次阅读
    <b class='flag-5'>系统</b><b class='flag-5'>适配</b> | <b class='flag-5'>RK</b>3576<b class='flag-5'>适配</b>Ubuntu20.04正式发布

    【HZ-RK3568开发板免费体验】系统烧写

    简单介绍,RK3568固件文件一般有两种: 单个统一固件:统一固件是由分区表、bootloader、uboot、kernel、文件系统所有文件打包合并成的单个文件。这一般是量产采用的方式。 多个
    发表于 07-25 09:40

    Linux系统中磁盘分区与挂载详解

    磁盘分区是将物理硬盘划分为不同的逻辑部分,每个分区都可以被视为一个独立的存储设备。通过磁盘分区,我们可以更好地管理磁盘空间,实现数据的组织和隔离。
    的头像 发表于 06-17 15:08 2836次阅读
    Linux<b class='flag-5'>系统</b>中磁盘<b class='flag-5'>分区</b>与挂载详解

    迅为RK3568开发板ndroid 系统开发笔记-修改分区大小的方法

    ndroid 系统各个分区的大小有默认值,没有特殊需求直接用默认的配置就可以,如果需要修改某个分区的大小,可以在 Boardconfig.mk 里面用如下宏来定义分区大小,以修改 su
    发表于 06-16 11:06

    服务器数据恢复—重装系统导致XFS文件系统分区丢失的数据恢复案例

    。通过LVM扩容的方式将sdc1分区加入到了root_lv中,剩下的sdc2分区格式化为XFS文件系统。 服务器重装系统后,发现sdc2分区
    的头像 发表于 06-12 11:20 979次阅读
    服务器数据恢复—重装<b class='flag-5'>系统</b>导致XFS文件<b class='flag-5'>系统分区</b>丢失的数据恢复案例