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

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

3天内不再提示

RK 平台镜像构建: Extra Part 脚本的关键作用

jf_44130326 来源:Linux1024 作者:Linux1024 2026-04-02 08:12 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

瑞芯微(RK)平台嵌入式系统开发中,很多开发者都遇到过这样的诡异问题:镜像烧录后串口疯狂报错、系统无法登录,排查半天却找不到核心原因——大概率是忽略了post-extra-parts.sh这个关键脚本!今天我们就深扒这个脚本的底层逻辑、核心作用,以及如何基于它定制化需求,搞懂它为何是RK镜像完整性的“守护神”。

一、先读懂:post-extra-parts.sh核心代码拆解

先看脚本完整代码(核心片段),我们逐行拆解它的执行逻辑:

wKgZO2nNtQaAX9bvAADktG7-Vj4658.png

核心执行流程总结

1.环境初始化:声明仅在根文件系统构建阶段执行,引入RK官方辅助函数库(提供分区配置读取、日志输出等能力);

2.分区遍历:根据配置的“额外分区数量”,逐个处理每个分区;

3.清理与目录创建:删除历史构建残留,创建最终挂载点和临时目录,并通过软链接关联,保证路径一致性;

4.内置分区合并:对标记为“builtin”的分区,执行预准备操作后,通过rsync将临时构建目录的内容同步到最终根文件系统的挂载点。

二、致命后果:少了它,系统直接“瘫掉”

很多开发者会误以为这只是“可选的分区拷贝脚本”,但实际测试中,缺失该脚本会导致三大核心问题,直接让系统无法使用:

1.分区挂载点缺失,系统启动串口报错

RK系统启动时会读取分区表配置,尝试挂载/data、/vendor、/mnt等额外分区,但如果post-extra-parts.sh没有执行:

•根文件系统中缺少对应的挂载点目录(如/data);

•内核挂载分区时会输出mount: can't find /data in /etc/fstab等报错,串口日志刷屏,挂载流程失败。

2.内置分区数据丢失,系统核心功能异常

标记为“builtin”的分区(如/vendor)包含硬件驱动配置、厂商定制库、系统服务依赖文件:

•缺少rsync的同步逻辑,这些核心文件无法进入根文件系统;

•系统启动后驱动加载失败、服务启动异常,最终卡在登录界面,甚至直接进入emergency紧急模式。

3.目录权限/结构错乱,无法登录系统

rsync -a参数会保留文件的权限、属主、目录结构,而手动创建目录无法保证一致性:

•缺失该脚本后,即使手动创建挂载点,也可能因权限错误(如/data目录权限不是777)导致应用无法写入;

•系统登录时依赖的用户目录、认证文件缺失/权限错误,最终表现为“密码正确但无法登录”“串口提示authentication failure”。

[  7.206308] rk-pcie fe160000.pcie:PCIeLinkFail,LTSSMis0x0, hw_retries=0[  7.206315] rk-pcie fe160000.pcie: failed to initialize host[  7.336985] dwc3 fc000000.usb: device reset[  7.338242] systemd-journald[386]:Timejumped backwards, rotating.[  7.424531] android_work: sent ueventUSB_STATE=CONNECTED[  7.521801] android_work: sent ueventUSB_STATE=CONFIGURED[ OK ]Stoppedtarget emergency.target-EmergencyMode.    Mountinguserdata.mount-/userdata...    Startingasync-commit.serv…TforRockchipBSPkernel>4.4...    Startingmodprobe@dm_mod.s…[0m-LoadKernelModuledm_mod...    Startingmodprobe@efi_psto…-LoadKernelModuleefi_pstore...[  7.716326]EXT4-fs (nvme0n1p5):VFS:Can't find ext4 filesystem    Startingmodprobe@loop.ser…e-LoadKernelModuleloop...[ OK ]Stoppedemergency.service-EmergencyShell.[FAILED]Failedto mount userdata.mount-/userdata.See'systemctl status userdata.mount'fordetails.[DEPEND]Dependencyfailedforloca…s.target-LocalFileSystems.[ OK ]Finishedmodprobe@dm_mod.s…e-LoadKernelModuledm_mod.[ OK ]Finishedmodprobe@efi_psto…m-LoadKernelModuleefi_pstore.[ OK ]Finishedmodprobe@loop.service-LoadKernelModuleloop.[ OK ]Finishedasync-commit.serv…MITforRockchipBSPkernel>4.4.[ OK ]Startedemergency.service-EmergencyShell.[ OK ]Reachedtarget emergency.target-EmergencyMode.[ OK ]Finishedconsole-setup.ser…[0m-Setconsole font and keymap.Youareinemergency mode.Afterloggingin, type"journalctl -xb"to viewsystem logs,"systemctl reboot"to reboot,"systemctl default"or"exit"to boot intodefaultmode.
Cannotopenaccess to console, the root accountislocked.Seesulogin(8) man pageformore details.
PressEntertocontinue.

三、定制化扩展:基于脚本实现自定义需求

理解脚本逻辑后,我们可以基于它扩展自定义分区需求,以下是3个高频场景的修改示例:

场景1:新增自定义分区(如/mydata)

1.先在RK分区配置中添加mydata分区,标记为builtin;

2.在脚本中增加自定义预准备逻辑(示例):

ifrk_extra_part_builtin$idx;thenrk_extra_part_prepare$idx
# 新增:针对/mydata分区添加自定义初始化if["$MOUNTPOINT"="/mydata"];then# 创建自定义子目录mkdir-p"$OUTDIR/myapp"# 设置专属权限(如仅root可写)chmod700"$OUTDIR/myapp"# 拷贝自定义配置文件cp-f"$BUILD_DIR/config/myapp.conf""$OUTDIR/myapp/"firsync -a"$OUTDIR/""$TARGET_DIR/$MOUNTPOINT/"fi

场景2:过滤不需要同步的文件(如临时日志)

如果某分区临时目录中有不需要同步到镜像的文件(如编译日志),可在rsync前添加过滤:

# 新增:排除.log和.tmp临时文件rsync-a --exclude="*.log"--exclude="*.tmp""$OUTDIR/""$TARGET_DIR/$MOUNTPOINT/"

场景3:非内置分区的自定义处理(如外置SD卡分区)

脚本默认只处理builtin分区,可扩展else逻辑处理外置分区:

ifrk_extra_part_builtin$idx;then# 原有内置分区逻辑...else# 新增:外置分区(如SD卡)创建默认挂载脚本message"Preparing external partition$MOUNTPOINT"# 在根文件系统中添加自动挂载脚本cat>"$TARGET_DIR/etc/init.d/mount_$MOUNTPOINT"<< EOF#!/bin/shmount /dev/mmcblk1p1 $MOUNTPOINTEOFchmod +x "$TARGET_DIR/etc/init.d/mount_$MOUNTPOINT"fi

四、避坑小贴士

1.保留核心逻辑:修改时不要删除rm -rf清理、mkdir -p创建目录、rsync同步这三个核心步骤,否则会导致脏数据或分区缺失;

2.测试分区配置:修改后先通过rk_extra_part_num验证分区数量,确保遍历逻辑覆盖所有自定义分区;

3.串口日志调试:如果修改后系统异常,优先查看串口日志中Merging xxx是否输出,确认rsync是否执行成功。

总结

post-extra-parts.sh看似是RK镜像构建中的“小脚本”,实则是额外分区与根文件系统的“桥梁”——它不仅保证了分区挂载点的存在,还完成了内置分区核心数据的同步,是系统启动和登录的“基础保障”。

在实际开发中,既要理解它的核心逻辑避免“删错导致系统瘫痪”,也要掌握其扩展方式,通过自定义分区处理、文件过滤、权限配置等,适配项目的个性化需求。记住:嵌入式系统的“小脚本”往往藏着大乾坤,忽略它就是给系统埋坑!

审核编辑 黄宇

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

    关注

    41

    文章

    3821

    浏览量

    133875
  • 脚本
    +关注

    关注

    1

    文章

    411

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    电源滤波器的关键作用与价值

    电源滤波器的关键作用与价值
    的头像 发表于 03-31 10:44 578次阅读
    电源滤波器的<b class='flag-5'>关键作用</b>与价值

    打通“神经”与“肌肉”:疆鸿智能EtherCAT转DeviceNet在精密制造中的关键作用

     打通“神经”与“肌肉”:疆鸿智能EtherCAT转DeviceNet在精密制造中的关键作用 在精密零件自动化加工单元,我们面临一个典型的技术挑战:倍福PLC作为“大脑”采用高速EtherCAT协议
    的头像 发表于 02-26 14:10 325次阅读
    打通“神经”与“肌肉”:疆鸿智能EtherCAT转DeviceNet在精密制造中的<b class='flag-5'>关键作用</b>

    使用Dockerfile构建镜像的详细步骤

    Dockerfile写得好不好,直接影响三件事:镜像大小、构建速度、运行安全性。我见过太多团队的Dockerfile是"能跑就行"的水平——基础镜像用ubuntu:latest
    的头像 发表于 02-26 09:43 406次阅读

    深入解析U-Boot image.c:RK平台镜像处理核心逻辑

    的SD/NAND/SPI等启动方式做了专属适配。本文将拆解image.c的核心逻辑,梳理RK平台镜像处理的关键流程,帮助开发者理解和调试启动相关问题。 一、文件定位与核心作用 imag
    的头像 发表于 02-24 16:46 1789次阅读
    深入解析U-Boot image.c:<b class='flag-5'>RK</b><b class='flag-5'>平台镜像</b>处理核心逻辑

    YOLO5目标检测方案-基于米尔RK3576开发板

    与调优提供了一套完整的思路与实践方案。 PART 01 系统架构与性能目标 1.1 硬件平台 主控芯片:Rockchip RK3576(四核A72+四核A53,6TOPS NPU,RGA,GPU
    发表于 01-22 19:21

    疆鸿智能PROFIBUS转ETHERCAT网关在汽车玻璃制造中的关键作用

    疆鸿智能PROFIBUS转ETHERCAT网关在汽车玻璃制造中的关键作用 在工业自动化领域,网关是实现设备互联与数据互通的核心组件。尤其在当前工业4.0与智能制造背景下,不同品牌与协议的设备共存成为
    的头像 发表于 01-15 14:45 247次阅读
    疆鸿智能PROFIBUS转ETHERCAT网关在汽车玻璃制造中的<b class='flag-5'>关键作用</b>

    工业网关在汽车制造中的关键作用:以疆鸿智能ETHERCAT转PROFIBUS为例

     工业网关在汽车制造中的关键作用:以疆鸿智能ETHERCAT转PROFIBUS为例 在汽车制造迈向工业4.0的进程中,生产线上不同年代、不同协议的设备共存是常态。如何实现新旧系统的高效协同,成为提升
    的头像 发表于 01-15 14:37 345次阅读
    工业网关在汽车制造中的<b class='flag-5'>关键作用</b>:以疆鸿智能ETHERCAT转PROFIBUS为例

    解析液晶模块的技术架构和关键作用

    在现代电子设备中,液晶屏(lcd screen)作为信息呈现的载体,其性能表现直接影响用户体验。然而,真正决定显示效果和可靠性的核心技术是LCM(LCD Module),即液晶模块。本文将深入探讨LCM的技术架构及其在显示领域的关键作用
    的头像 发表于 12-05 17:08 1668次阅读
    解析液晶模块的技术架构和<b class='flag-5'>关键作用</b>

    晶体晶振在机器人五大核心模块的关键作用

    你以为机器人那些流畅的动作和适宜的反应,只靠一颗强大的CPU就够了吗?NO,NO,NO! 再聪明的大脑也需要晶体晶振来统筹全局!晶体晶振就像机器人的「心跳」和「指挥棒」,决定了它每一个动作、每一条指令的精准触达。今天,我们就来解析这颗「芯」在机器人五大核心模块的关键作用!
    的头像 发表于 09-03 09:36 1043次阅读
    晶体晶振在机器人五大核心模块的<b class='flag-5'>关键作用</b>

    【米尔RK3576开发板免费体验】1、开发环境、镜像烧录、QT开发环境搭建以及应用部署

    会编译uboot、kernel,构建文件系统,并生成相应的系统镜像。同时在buildroot\\\\output\\\\rockchip_rk3576\\\\host目录中包含用于系统应用开发的工具链。 在
    发表于 07-14 11:26

    揭秘高效接地电阻柜的关键作用

    发生单相接地故障时,接地电阻柜强制故障电流流经其内部的高阻值电阻。    关键作用:将原本可能高达数千安培的故障电流**显著限制**在安全范围内(通常在5A-25A,最高可达数百安但远低于无电阻时)。    直接效益:极大减轻故障电流对发电
    的头像 发表于 07-08 16:55 938次阅读

    辰达MOSFET在DC-DC变换器中的关键作用与优化策略

    一、MOSFET在DC-DC变换器中的关键作用开关功能DC-DC变换器的核心工作原理是通过高频开关操作将输入直流电压转换为所需的输出直流电压。MOSFET作为开关元件,在此过程中起着至关重要的作用
    的头像 发表于 07-02 10:04 849次阅读
    辰达MOSFET在DC-DC变换器中的<b class='flag-5'>关键作用</b>与优化策略

    “三断”极端场景下:云翎智能卫星物联网在洪涝救援中的关键作用

    在洪涝灾害引发的“三断”(断网、断电、断路)极端场景下,云翎智能卫星物联网终端凭借其技术革新与场景化应用能力,成为构建通信生命线的核心装备。以下从技术架构、场景适配、实战效能三个维度解析其关键作用
    的头像 发表于 06-30 22:29 810次阅读
    “三断”极端场景下:云翎智能卫星物联网在洪涝救援中的<b class='flag-5'>关键作用</b>

    工业相机在焊缝跟踪中的关键作用有哪些

    与形态,帮助系统动态调整焊枪轨迹,实现高精度、高效率的自动化焊接,今天一起了解工业相机在焊缝跟踪中的关键作用有哪些。 焊接挑战与视觉需求 在传统焊接中,工件定位误差、夹具公差和热变形等因素易导致焊缝偏移,而
    的头像 发表于 05-13 17:56 845次阅读
    工业相机在焊缝跟踪中的<b class='flag-5'>关键作用</b>有哪些

    Linux文件系统打包及镜像制作,触觉智能RK3562开发板演示

    本文介绍Linux开发板文件系统打包及镜像制作的方法,演示Linux文件系统打包及镜像制作,适用于想将配置好的系统环境打包成镜像批量烧录。触觉智能RK3562开发板演示,搭载4核A53
    的头像 发表于 04-28 16:45 1159次阅读
    Linux文件系统打包及<b class='flag-5'>镜像</b>制作,触觉智能<b class='flag-5'>RK</b>3562开发板演示