【Rk3506】 fstab分区调整及残留问题排查
RK3506 Linux6.1 fstab分区调整及残留问题排查一、问题现象为了关掉系统自动挂载 OEM、UserData 分区的逻辑我在30-fstab.sh的分区遍历代码前面加了exit 0提前结束脚本运行本意是直接禁用这两个分区的自动写入fstab逻辑。改完脚本后我只单独跑了./build.sh rootfs增量编译结果发现/etc/fstab里依旧存在 oem、userdata 两条 PARTLABEL 挂载怎么改脚本都去不掉。PARTLABELoem /oem ubifs defaults 0 2 PARTLABELuserdata /userdata ubifs defaults 0 2预期效果加了 exit 0 截断代码后新编译出来的fstab不会再有这两个分区挂载。实际效果分区生成代码已经被禁用了但这两条挂载条目一直残留在文件里删不掉。二、脚本修改说明本次修改思路很简单在额外分区生成逻辑执行前直接退出脚本彻底不让OEM、UserData的挂载逻辑跑起来代码截断位置是没问题的。# 省略前文根文件系统初始化、基础虚拟分区挂载逻辑 # 人工新增提前退出禁用下方所有额外分区生成逻辑 exit 0 # 以下分区遍历代码完全失效不会执行 for idx in $(seq 1 $(rk_extra_part_num)); do DEV$(rk_extra_part_dev $idx) MOUNTPOINT$(rk_extra_part_mountpoint $idx) FS_TYPE$(rk_extra_part_fstype $idx) if rk_extra_part_builtin $idx; then del_part $DEV $MOUNTPOINT $FS_TYPE continue fi fixup_device_part $DEV $MOUNTPOINT $FS_TYPE \ $(rk_extra_part_options $idx) done三、问题根本原因最终定位经过加日志调试、对比文件变化确认问题不是代码改得不对也不是工具偷偷二次注入。真正原因很简单没清工程产物就增量编译旧的fstab残留文件一直存在被重复复用了。3.1 完整问题链路历史编译最开始脚本没加exit 0分区循环正常运行自动生成了oem、userdata的PARTLABEL挂载并且固化在了output输出目录的fstab中脚本修改后新增exit 0截断逻辑新版脚本已经不会主动生成这两个分区挂载了编译操作失误改完脚本后没有执行 ./build.sh cleanall 清空工程只单独编译了rootfsBuildroot机制增量编译不会删除target目录下的旧文件只会增量更新之前生成的旧fstab会被直接沿用脚本本身短板原脚本只用touch $FSTAB初始化文件这个命令只会刷新文件时间不会清空内容清理不了历史残留配置最终现象旧fstab的挂载条目被继承下来给人一种“脚本改了不生效”的错觉。四、辅助排查验证为了验证确实是文件残留导致的问题我在脚本开头加了强制删除fstab 分段打印日志的调试逻辑逐段观察fstab内容变化精准定位问题mkdir-p$TARGET_DIR/etcrm-f$TARGET_DIR/etc/fstabtouch$FSTABecho1111111111111111111111111cat$TARGET_DIR/etc/fstabcase$RK_ROOTFS_TYPEinext[234])fixup_root$RK_ROOTFS_TYPE;;*)fixup_root auto;;esacecho22222222222222222222222222222cat$TARGET_DIR/etc/fstabif[$(readlink$TARGET_DIR/sbin/init)!/lib/systemd/systemd];thenmessageFixup basic partitions for non-systemd init...fixup_basic_part proc /proc fixup_basic_part devtmpfs /dev fixup_basic_part devpts /dev/ptsmode0620,ptmxmode0000,gid5fixup_basic_part tmpfs /dev/shm nosuid,nodev,noexec fixup_basic_part sysfs /sys nosuid,nodev,noexec fixup_basic_part configfs /sys/kernel/config fixup_basic_part debugfs /sys/kernel/debug fixup_basic_part pstore /sys/fs/pstore nosuid,nodev,noexecfiecho3333333333333333333333333333333cat$TARGET_DIR/etc/fstabif[$POST_OSrecovery];thenfixup_device_part /dev/sda1 /mnt/udisk auto fixup_device_part /dev/mmcblk1p1 /mnt/sdcard autofiecho44444444444444444444444444444444cat$TARGET_DIR/etc/fstab# 原本此处加了exit 0增量编译残留导致前期误判foridxin$(seq1$(rk_extra_part_num));doDEV$(rk_extra_part_dev $idx)MOUNTPOINT$(rk_extra_part_mountpoint $idx)FS_TYPE$(rk_extra_part_fstype $idx)ifrk_extra_part_builtin$idx;thendel_part$DEV$MOUNTPOINT$FS_TYPEcontinuefifixup_device_part$DEV$MOUNTPOINT$FS_TYPE\$(rk_extra_part_options $idx)doneecho5555555555555555555555555555555555cat$TARGET_DIR/etc/fstab本次调试对应的完整编译运行 Log 如下可以清晰看到内容变化Fixing up /etc/fstab... 1111111111111111111111111 Fixing up rootfs type: auto 22222222222222222222222222222 Fixup basic partitions for non-systemd init... Fixing up basic partition: proc /proc Fixing up basic partition: devtmpfs /dev Fixing up basic partition: devpts /dev/pts mode0620,ptmxmode0000,gid5 Fixing up basic partition: tmpfs /dev/shm nosuid,nodev,noexec Fixing up basic partition: sysfs /sys nosuid,nodev,noexec Fixing up basic partition: configfs /sys/kernel/config Fixing up basic partition: debugfs /sys/kernel/debug Fixing up basic partition: pstore /sys/fs/pstore nosuid,nodev,noexec 3333333333333333333333333333333 proc /proc proc defaults 0 0 devtmpfs /dev devtmpfs defaults 0 0 devpts /dev/pts devpts mode0620,ptmxmode0000,gid5 0 0 tmpfs /dev/shm tmpfs nosuid,nodev,noexec 0 0 sysfs /sys sysfs nosuid,nodev,noexec 0 0 configfs /sys/kernel/config configfs defaults 0 0 debugfs /sys/kernel/debug debugfs defaults 0 0 pstore /sys/fs/pstore pstore nosuid,nodev,noexec 0 0 44444444444444444444444444444444 proc /proc proc defaults 0 0 devtmpfs /dev devtmpfs defaults 0 0 devpts /dev/pts devpts mode0620,ptmxmode0000,gid5 0 0 tmpfs /dev/shm tmpfs nosuid,nodev,noexec 0 0 sysfs /sys sysfs nosuid,nodev,noexec 0 0 configfs /sys/kernel/config configfs defaults 0 0 debugfs /sys/kernel/debug debugfs defaults 0 0 pstore /sys/fs/pstore pstore nosuid,nodev,noexec 0 0 Fixing up device partition: PARTLABELoem /oem ubifs defaults Fixing up device partition: PARTLABELuserdata /userdata ubifs defaults 5555555555555555555555555555555555 proc /proc proc defaults 0 0 devtmpfs /dev devtmpfs defaults 0 0 devpts /dev/pts devpts mode0620,ptmxmode0000,gid5 0 0 tmpfs /dev/shm tmpfs nosuid,nodev,noexec 0 0 sysfs /sys sysfs nosuid,nodev,noexec 0 0 configfs /sys/kernel/config configfs defaults 0 0 debugfs /sys/kernel/debug debugfs defaults 0 0 pstore /sys/fs/pstore pstore nosuid,nodev,noexec 0 0 PARTLABELoem /oem ubifs defaults 0 2 PARTLABELuserdata /userdata ubifs defaults 0 2Log 关键复盘点1、前期清空fstab后前序所有流程都不会生成 oem/userdata 挂载2、只有尾部分区循环执行后才会打印设备分区修复日志并生成两条 PARTLABEL 挂载3、结合最终结论该现象仅出现在「未cleanall增量编译」场景旧产物残留让我误以为exit0不生效清完工程重新编译后完全正常。五、修复方案方案一全量清理后再编译标准规范做法后续只要改fstab、分区配置、根文件系统相关脚本必须先清工程再编译避免增量编译复用旧文件出问题./build.sh cleanall ./build.sh rootfs方案二脚本内强制清空fstab兜底长效方案优化脚本初始化逻辑不再只用touch弱初始化每次执行脚本都强制重建fstab从代码层面杜绝残留问题mkdir -p $TARGET_DIR/etc # 清空历史残留文件强制重建纯净fstab rm -f $FSTAB touch $FSTAB六、最终结论本次添加的exit 0完全生效已经成功禁用了额外分区自动生成逻辑代码修改本身没有任何问题fstab里残留的两个分区挂载都是之前编译留下来的旧产物并不是本次编译生成的问题核心原因编译流程不规范改完脚本没清工程增量编译复用了旧文件导致配置残留原脚本初始化逻辑有缺陷单纯touch无法重置文件不能自动清理历史残留配置后续修改根文件系统、分区、fstab相关配置务必先cleanall再编译防止旧产物干扰调试结果。

相关新闻

从科研到应用:一站式盘点国内权威地理与统计数据库

从科研到应用:一站式盘点国内权威地理与统计数据库

1. 科研分析必备:高精度地理数据库实战指南做科研最头疼的就是找不到靠谱数据源。去年我做城市扩张研究时,花了整整两周时间在各大平台反复横跳,最后发现这几个数据库才是真香:地理空间数据云(gscloud.cn)绝…

2026/7/16 23:49:56 阅读更多 →
具身智能:定义、特征与原理详解(7)

具身智能:定义、特征与原理详解(7)

前沿技术探索:AI智能体视觉(TVA,Transformer-based Vision Agent)是依托Transformer架构与“因式智能体”理论所构建的颠覆性工业视觉技术,是集深度强化学习(DRL)、卷积神经网络(CNN…

2026/7/15 19:56:51 阅读更多 →
【项目编号:project57708】SpringBoot 电动两轮车电池换电管理系统:站点、电池、订单、套餐全流程实现

【项目编号:project57708】SpringBoot 电动两轮车电池换电管理系统:站点、电池、订单、套餐全流程实现

摘要电动两轮车电池换电管理系统属于业务流程型管理系统,围绕换电站点、电池信息、换电服务、套餐订单、购买订单和用户反馈展开。系统适合 SpringBoot 管理系统、智慧出行服务和换电业务场景项目参考。关键词:SpringBoot、换电系统、电池管理、订单管理…

2026/7/16 20:44:06 阅读更多 →

最新新闻

电脑维修行业的内幕,你知道几个?

电脑维修行业的内幕,你知道几个?

电脑出故障本就让人烦躁,要是再遇上不规范维修,钱财、设备双重受损。整个维修行业,不少商家靠着硬件信息差、用户着急的心理牟利,整套牟利流程早已形成固定套路。第一阶段:预约环节预埋陷阱很多坑从你线上预约维修时就…

2026/7/16 23:47:58 阅读更多 →
华为MetaERP Oracle EBS 和 Oracle Fusion 在 PO(采购订单)接收环节中,PPV、IPV、不可抵扣税、汇率变化 四大业务场景的会计核算详细分析,配合具体数据举例说明分录

华为MetaERP Oracle EBS 和 Oracle Fusion 在 PO(采购订单)接收环节中,PPV、IPV、不可抵扣税、汇率变化 四大业务场景的会计核算详细分析,配合具体数据举例说明分录

Oracle EBS 和 Oracle Fusion 在 PO(采购订单)接收环节中,PPV、IPV、不可抵扣税、汇率变化 四大业务场景的会计核算详细分析,配合具体数据举例说明分录。前置知识:Oracle EBS/Fusion 采购接收的核算框架Oracle EBS 和 …

2026/7/16 23:47:58 阅读更多 →
Full Conversion

Full Conversion

在计算机科学、系统设计以及软件工程中,Full Conversion(全量转换 / 完整转换) 是指将数据、系统架构、代码库或文件格式,从旧的形态一次性、彻底地完全迁移或转换到新的形态。 它与“增量转换(Incremental Conversion…

2026/7/16 23:45:58 阅读更多 →
终极指南:如何判断guided-diffusion扩散模型训练是否收敛

终极指南:如何判断guided-diffusion扩散模型训练是否收敛

终极指南:如何判断guided-diffusion扩散模型训练是否收敛 【免费下载链接】guided-diffusion 项目地址: https://gitcode.com/gh_mirrors/gu/guided-diffusion 你是否曾经花费数天时间训练扩散模型,却不知道何时该停止?想象一下&…

2026/7/16 23:41:56 阅读更多 →
IFC++:C++开源库实现BIM数据处理与可视化开发指南

IFC++:C++开源库实现BIM数据处理与可视化开发指南

1. 项目概述:IFC是什么,以及为什么你需要它如果你正在建筑、工程或施工(AEC)领域工作,或者对建筑信息模型(BIM)的数据处理感兴趣,那么你很可能听说过IFC文件。IFC,全称工…

2026/7/16 23:39:56 阅读更多 →
C++ Builder XE10演示项目:从RAD开发到多线程实战全解析

C++ Builder XE10演示项目:从RAD开发到多线程实战全解析

1. 项目概述:为什么需要一个“演示项目”?如果你是一位刚从Visual Studio或者Qt Creator转战到C Builder XE10的开发者,或者你是一位想快速评估这个IDE是否适合团队新项目的技术负责人,那么你很可能和我当初一样,面对一…

2026/7/16 23:37:55 阅读更多 →

日新闻

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

HarmonyOs应用《重要日》开发第6篇 - 数据持久化存储

本篇深入剖析 ImportantDays 项目的数据持久化方案——基于 HarmonyOS ArkData 模块的 Preferences 轻量级存储,以及 PreferenceUtil 工具类的单例封装。一、HarmonyOS 数据存储方案对比 HarmonyOS 提供了多种数据存储方案:方案适用场景特点Preferences轻…

2026/7/16 0:08:27 阅读更多 →
Python实现跨境电商商品图批量翻译教程

Python实现跨境电商商品图批量翻译教程

一、问题引入做跨境电商的卖家朋友,你是否遇到过这样的困扰?每次上架新品到亚马逊、Shopee或Lazada等平台,都需要处理大量商品图片的多语言版本。比如上架200款衣服,每款需要翻译成英语、日语、韩语等5种语言,这意味着…

2026/7/16 0:08:27 阅读更多 →
鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

鸿蒙 7 新特性实战①:从 0 到 1 掌握 @kit 标准导入规范

从鸿蒙 7(HarmonyOS NEXT)开始,官方全面完成了从 ohos.* 零散模块到 kit.* 领域套件的体系重构。对开发者来说,第一道门槛不是 API 用法变化,而是统一的导入规范——旧体系默认导入、解构导入混用的混乱局面被彻底终结…

2026/7/16 0:10:29 阅读更多 →

周新闻

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨

互联网大厂 Java 求职面试:燕双非的搞笑回答与技术探讨 在一个阳光明媚的上午,互联网大厂的面试官坐在桌前,准备迎接他的面试候选人——燕双非,一个以搞笑和幽默著称的程序员。第一轮提问 面试官:燕双非,作…

2026/7/15 21:09:01 阅读更多 →
车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估

车载以太网PMA测试设备选型:示波器、VNA、信号源3类仪器关键参数与预算评估在智能驾驶和车联网技术快速发展的今天,车载以太网作为新一代车载网络的核心传输技术,其物理层性能直接决定了数据传输的可靠性和稳定性。1000BASE-T1作为当前主流的…

2026/7/15 19:42:20 阅读更多 →
VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战,5步完成Keil工程转换

VSCode EIDE 插件 2.0:APM32/STM32 项目迁移实战指南嵌入式开发领域正经历一场工具链的静默革命。当传统Keil用户首次打开VSCode的扩展市场搜索EIDE时,往往会惊讶于这个看似简单的插件竟能重构十余年的开发习惯。本文将揭示如何用五个精准步骤&#xff0…

2026/7/16 23:40:37 阅读更多 →

月新闻