news 2026/4/20 1:29:25

保姆级教程:在Firefly RK356x开发板上提取并替换Ubuntu根文件系统(附打包工具下载)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
保姆级教程:在Firefly RK356x开发板上提取并替换Ubuntu根文件系统(附打包工具下载)

深度定制Firefly RK356x开发板:从根文件系统提取到完整镜像打包实战指南

当你拿到一块Firefly RK356x开发板时,预装的Ubuntu系统可能无法满足你的特定需求。无论是需要精简系统、添加自定义软件包,还是集成专有驱动,替换根文件系统都是嵌入式开发中的常见操作。本文将带你完整走一遍从提取原始根文件系统到生成定制镜像的全过程,避开那些官方文档没提到的"坑"。

1. 准备工作与环境搭建

在开始操作之前,确保你已准备好以下工具和环境:

  • Firefly RK356x开发板(已刷入官方Ubuntu固件)
  • 至少32GB容量的U盘或移动硬盘(用于存放提取的根文件系统)
  • 一台x86架构的PC(用于后续的镜像打包操作)
  • Ubuntu 20.04 LTS虚拟机(推荐使用VirtualBox或VMware)

重要提示:整个流程涉及两个不同的环境——开发板上的ARM环境和PC上的x86环境。混淆这两个环境是新手最容易犯的错误之一。

安装必要的工具链:

# 在开发板的Ubuntu系统中执行 sudo apt update sudo apt install -y fireflydev e2fsprogs

fireflydev是Firefly官方提供的开发工具包,包含了我们需要的根文件系统导出脚本。而e2fsprogs则提供了后续处理镜像文件所需的工具。

2. 提取原始根文件系统

提取根文件系统是整个流程中最耗时的步骤,可能需要1-3小时不等,具体取决于你的存储设备速度。

首先,将U盘或移动硬盘插入开发板,并确认挂载点:

lsblk

假设你的设备挂载在/media/firefly/USB_DISK,使用以下命令导出根文件系统:

sudo ff_export_rootfs /media/firefly/USB_DISK

这个过程中有几个关键点需要注意:

  1. 存储空间:导出的rootfs.img文件通常有2-4GB大小,确保你的存储设备有足够空间
  2. 稳定性:建议使用有线网络连接,避免在导出过程中断电
  3. 进度监控:虽然命令看起来会"卡住",但实际上是在后台运行,可以通过另一个终端查看进度:
sudo tail -f /var/log/syslog | grep ff_export_rootfs

导出完成后,我们需要对镜像进行优化处理:

# 检查文件系统一致性 sudo e2fsck -p -f /media/firefly/USB_DISK/rootfs.img # 缩小镜像体积 sudo resize2fs -M /media/firefly/USB_DISK/rootfs.img

注意:resize2fs操作可能会失败,如果遇到"couldn't find valid filesystem"错误,尝试先运行e2fsck -y修复文件系统。

3. 定制你的根文件系统

现在,你可以将rootfs.img复制到PC上进行定制。这里推荐使用qemu-user-static在x86环境下运行动臂架构的根文件系统:

# 在PC的Ubuntu虚拟机上执行 sudo apt install -y qemu-user-static # 挂载并chroot进入ARM环境 mkdir -p /mnt/rootfs sudo mount -o loop rootfs.img /mnt/rootfs sudo cp /usr/bin/qemu-arm-static /mnt/rootfs/usr/bin/ sudo chroot /mnt/rootfs

在chroot环境中,你可以像在开发板上一样安装软件、修改配置:

# 示例:安装常用工具 apt update apt install -y vim tmux htop # 示例:添加自定义用户 useradd -m myuser passwd myuser

完成修改后,退出并卸载文件系统:

exit sudo umount /mnt/rootfs

4. 使用官方工具重新打包完整镜像

Firefly提供了firefly-linux-repack工具用于固件的解包和重新打包。这个工具只能在x86环境下运行。

首先下载并解压打包工具(假设已下载到~/Downloads):

tar -xzf ~/Downloads/firefly-linux-repack.tgz cd firefly-linux-repack

工具目录结构如下:

firefly-linux-repack/ ├── unpack.sh ├── pack.sh ├── output/ └── tools/

关键步骤解析

  1. 准备原始固件:将官方下载的完整固件(如Firefly-RK356x_Ubuntu20.04_20230810.img)复制到工具目录,并重命名为update.img

  2. 解包原始固件:

./unpack.sh

解包后会生成output目录,其中包含固件的各个组成部分:

output/ ├── Image/ │ ├── boot.img │ ├── kernel.img │ └── rootfs.img # 这就是我们要替换的文件 └── update.sh
  1. 替换根文件系统:将你定制好的rootfs.img复制到output/Image/目录,覆盖原有文件

  2. 重新打包:

./pack.sh

打包完成后,会在当前目录生成new_update.img,这就是包含你定制内容的完整固件。

5. 烧录测试与问题排查

使用RKDevTool将new_update.img烧录到开发板:

  1. 开发板进入Loader模式(通常需要按住Recovery键同时按Reset)
  2. 在RKDevTool中选择固件文件
  3. 点击"升级"按钮

常见问题及解决方案

表:常见烧录问题排查指南

问题现象可能原因解决方案
设备无法识别驱动未安装安装Rockchip USB驱动
烧录失败镜像损坏重新打包并验证MD5
系统无法启动rootfs不兼容检查架构是否匹配(ARM64)
启动卡在LOGO内核不匹配使用原版boot.img和kernel.img

如果系统成功启动,恭喜你完成了整个定制流程!不过在实际项目中,你可能还需要:

  • 调整分区大小(修改parameter.txt
  • 更新内核或U-Boot
  • 添加预装脚本(/etc/rc.local

6. 高级技巧与自动化方案

对于需要频繁定制系统的开发者,可以考虑以下优化方案:

批量处理脚本示例

#!/bin/bash # 自动化打包脚本 set -e ORIGINAL_IMG="update.img" CUSTOM_ROOTFS="custom_rootfs.img" OUTPUT_IMG="custom_firmware_$(date +%Y%m%d).img" # 解包 ./unpack.sh # 替换rootfs cp "$CUSTOM_ROOTFS" output/Image/rootfs.img # 重新打包 ./pack.sh # 重命名输出文件 mv new_update.img "$OUTPUT_IMG"

根文件系统瘦身技巧

# 清理APT缓存 sudo apt clean # 删除文档和man页面 sudo find /usr/share/doc -type f -delete sudo rm -rf /usr/share/man/* # 清除日志 sudo journalctl --vacuum-size=50M

增量更新方案

对于小型修改,可以考虑只更新特定文件而非整个rootfs:

  1. 将修改的文件打包成tar.gz
  2. 在开发板上创建启动脚本应用这些更改
  3. 将更新包和脚本放入/etc/init.d/

这种方法特别适合频繁更新的开发阶段,可以节省大量烧录时间。

7. 性能优化与系统调优

定制系统不仅仅是替换文件,还需要考虑性能优化。以下是一些针对RK356x的建议配置:

内存管理优化

# /etc/sysctl.conf 添加 vm.swappiness=10 vm.vfs_cache_pressure=50

IO调度器设置

# 针对eMMC/SD卡优化 echo deadline > /sys/block/mmcblk0/queue/scheduler

GPU加速配置

# 确保Mali驱动正确加载 apt install mali-bifrost-wayland-driver

温度监控

# 安装传感器工具 apt install lm-sensors sensors-detect

在实际项目中,我们还需要考虑:

  • 开机自启动服务优化(systemd-analyze blame
  • 安全加固(禁用root登录、配置防火墙)
  • 无线网络预配置(/etc/netplan/

这些调优可以使你的定制系统在RK356x开发板上运行得更加高效稳定。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 12:30:00

MantisBT

MantisBT(全称‌Mantis Bug Tracker‌)是一款基于‌PHP‌技术开发的‌轻量级开源缺陷跟踪系统‌,采用 Web 架构支持跨平台访问,当前最新稳定版本已迭代至‌2.28.1‌系列,用户可通过官网(www.mantisbt.org&a…

作者头像 李华
网站建设 2026/4/18 23:19:21

MATLAB实战:克里金插值算法实现与关键问题破解

1. 克里金插值算法入门指南 第一次接触克里金插值时,我被它在地理信息系统和气象预测中的神奇表现惊艳到了。简单来说,这是一种通过已知离散点的测量值来预测未知点数值的空间插值方法。与传统插值方法不同,克里金不仅考虑距离权重&#xff0…

作者头像 李华
网站建设 2026/4/18 22:56:25

从零构建:基于WSL2与Ubuntu 22.04的QGC地面站与Gazebo仿真全链路实践

1. 环境准备:WSL2与Ubuntu 22.04基础配置 作为一个常年折腾开发环境的"老司机",我强烈推荐从WSL2开始搭建无人机仿真环境。相比传统虚拟机,WSL2的性能损耗更低,且能直接访问Windows文件系统。最近在帮团队新人配置环境时…

作者头像 李华
网站建设 2026/4/19 2:37:22

差分运放公式推导:从虚短虚断到实际应用

1. 差分运放的基础原理 第一次接触差分运放时,我也被那一堆公式搞得头晕眼花。直到后来真正理解了虚短和虚断这两个核心概念,才发现原来差分运放的公式推导可以如此直观。虚短和虚断就像是运放世界的"牛顿定律",掌握了它们&#xf…

作者头像 李华
网站建设 2026/4/18 15:44:28

Mac NTFS读写终极指南:免费开源工具Nigate完整教程

Mac NTFS读写终极指南:免费开源工具Nigate完整教程 【免费下载链接】Free-NTFS-for-Mac Nigate: An open-source NTFS utility for Mac. It supports all Mac models (Intel and Apple Silicon), providing full read-write access, mounting, and management for N…

作者头像 李华
网站建设 2026/4/18 12:50:27

终极游戏光标增强指南:YoloMouse让你的鼠标在游戏中无所遁形

终极游戏光标增强指南:YoloMouse让你的鼠标在游戏中无所遁形 【免费下载链接】YoloMouse Game Cursor Changer 项目地址: https://gitcode.com/gh_mirrors/yo/YoloMouse 你是否曾经在激烈的游戏战斗中因为鼠标光标太小而迷失方向?或者因为光标颜色…

作者头像 李华