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

描述

前言:

瑞芯微 RK3588 很多项目都用到Ubuntu 22.04 系统,若是遇到进不了桌面、只能输密码进维护终端,反复登录报错,项目调试直接卡住。这种问题90% 是 userdata、oem 分区损坏 / 挂载失败导致的,系统启动时挂载校验不通过,就会强制进入安全保护模式。

今天这篇技术笔记,把我们踩过的坑复现、定位、根治方案一次性讲透,收藏备用,下次遇到直接照抄命令。

一、问题复现

 

 1.1  开发环境

主控:眺望电子 瑞芯微 RK3588 评估板

系统:Ubuntu 22.04

内核:Linux 6.1

触发原因:oem / userdata 分区文件系统损坏、分区丢失、/etc/fstab 配置错误

 1.2  故障现象

开机直接出现:

  •  
  •  
  •  
  •  
  •  
  •  
  •  

You are in emergency mode. After logging in, type "journalctl -xb" to view
Login incorrect
Give root password for maintenance(or press Control-D to continue):Login incorrect

系统拒绝进入正常桌面,只能停在维护终端。

 1.3  快速定位

进入紧急模式后,先输入 root 密码登录,执行:

  •  

journalctl -xb

搜索关键词:mount、fail、oem、userdata,直接定位失败的分区。


 

二、4种解决方案

 

 2.1  直接修复损坏分区

使用指令e2fsck、mkfs.ext4等工具进行修复或者重新格式化

用e2fsck自动修复 ext4 分区:

  •  
  •  
  •  
  •  
  •  
  •  
  •  

# 先卸载(如果提示占用可跳过)umount /dev/mmcblk0pX  # X替换为你的oem/userdata分区号# 自动修复e2fsck -y /dev/mmcblk0pX# 修复完重新挂载mount /oemmount /userdata

修复完成后,执行reboot重启即可正常进系统。

若分区彻底损坏无法修复,可重新格式化:

  •  

mkfs.ext4 /dev/mmcblk0pX

 2.2  屏蔽 fstab,跳过错误分区

如果暂时不需要挂载oem/userdata,直接注释掉/etc/fstab:
 

  •  

vi /etc/fstab

注释掉这两行:

  •  
  •  

# PARTLABEL=oem      /oem      ext4  defaults    0 2# PARTLABEL=userdata /userdata ext4  defaults    0 2

保存重启,系统会跳过这两个分区,不再进紧急模式。RK3588RK3588RK3588

 2.3  合并分区,集合rootfs

适合不想维护多余分区的场景,修改parameter.txt:

  •  

CMDLINE: mtdparts=:0x00002000@0x00004000(uboot),0x00002000@0x00006000(mis c),0x00020000@0x00008000(boot),0x00040000@0x00028000(recovery),0x00010000@0 x00068000(backup),-@0x00078000(rootfs:grow)

把 rootfs 设为grow自动扩容,删除 oem/userdata 分区,从根源避免挂载失败。

 2.4  改服务进程,挂载失败也能正常启动(硬核)

Ubuntu 是通过systemd判断挂载失败后触发紧急模式,我们直接关闭这个保护机制:

1.编辑服务文件:

  •  

vi /lib/systemd/system/local-fs.target

2.把OnFailure和OnFailureJobMode屏蔽掉释掉:

  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

[Unit]  Description=Local File Systems  Documentation=man:systemd.special(7)  DefaultDependencies=no  Conflicts=shutdown.target  After=local-fs-pre.target# OnFailure=emergency.target# OnFailureJobMode=replace-irreversibly

3.重载配置并重启,以后就算分区挂载失败,系统也正常启动,进系统后再手动修复即可。

三、思路分享

 

很多同学好奇:为什么是改local-fs.target?分享下定位思路:

1. 搜紧急模式依赖:

  •  
  •  

grep emergency.target -r /lib/systemd/systemgrep emergency.target -r /etc/systemd/system

RK3588

2. 看服务依赖关系:

  •  

systemctl list-dependencies

RK3588

能看到local-fs.target依赖oem.mount、userdata.mount,失败就触发emergency.target。

3. 手动模拟复现故障:

  •  

dd if=/dev/zero of=/dev/mmcblk0p8 bs=1 count=1024 seek=1024 conv=notrunc

破坏分区后重启,即可复现紧急模式,用于验证修复方案。

四、总结

 

这套流程在眺望电子RK3588、RK3576、RK3568 等瑞芯微平台通用,无论是Ubuntu22.04还是20.04均能参考,遇到别慌,照着做就行。

希望这篇技术分享对你有帮助,关注我司公众号或者转发分享。如果有实现细节想了解或者其他开发板问题,欢迎评论区留言!


 

 

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

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分