当前位置: 首页 > news >正文

从Ubuntu 16.04到自定义Rootfs:Firefly-RK3399系统镜像DIY全记录

从Ubuntu 16.04到自定义Rootfs:Firefly-RK3399系统镜像DIY全记录

在嵌入式开发领域,Firefly-RK3399凭借其强大的六核ARM架构和丰富的扩展接口,成为众多开发者的首选平台。然而,官方提供的Ubuntu 16.04镜像往往无法满足特定项目需求——要么包含过多冗余软件包,要么缺少关键开发工具。本文将带你从零开始,构建一个完全定制的根文件系统,摆脱预装系统的束缚,打造专属于你的高效开发环境。

1. 环境准备与基础概念

在开始构建自定义Rootfs之前,需要明确几个核心概念。Rootfs(根文件系统)是Linux系统中包含所有必要目录结构和文件的集合,从/bin/lib/etc,构成了操作系统运行的基础环境。与直接修改现有系统不同,我们将采用更彻底的方案——从Ubuntu Base开始全新构建。

所需工具清单

  • 运行Ubuntu或Debian的x86_64主机(物理机或虚拟机)
  • 至少20GB可用磁盘空间
  • 已安装的qemu-user-staticbinfmt-support
  • Firefly-RK3399的官方内核镜像(可从官网获取)

提示:虽然RK3399采用ARM64架构,但通过QEMU的用户态模拟,我们可以在x86主机上直接执行ARM64指令,极大简化了交叉编译的复杂度。

2. 构建基础Rootfs

2.1 下载Ubuntu Base

Ubuntu Base是最小化的根文件系统,去除了所有图形界面和大部分应用软件,只保留核心组件。访问Ubuntu官方仓库获取最新版本:

wget http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.4-base-arm64.tar.gz

注意:虽然示例使用20.04版本,但实际应根据项目需求选择。较新版本通常有更好的硬件支持和更长的维护周期。

解压并进入Rootfs目录:

mkdir custom_rootfs sudo tar xzf ubuntu-base-20.04.4-base-arm64.tar.gz -C custom_rootfs cd custom_rootfs

2.2 配置QEMU静态二进制

为了让x86主机能够执行ARM64环境下的操作,需要注册QEMU解释器:

sudo cp /usr/bin/qemu-aarch64-static usr/bin/ sudo mount --bind /dev dev sudo mount --bind /proc proc sudo mount --bind /sys sys

3. 定制Rootfs内容

3.1 基础系统配置

使用chroot进入ARM64环境开始定制:

sudo chroot . /bin/bash

在chroot环境中,首先配置APT源并安装基础工具:

echo "deb http://ports.ubuntu.com/ubuntu-ports focal main universe" > /etc/apt/sources.list apt update apt install -y sudo vim net-tools iputils-ping wget curl

常用软件栈选择

  • 开发环境:build-essentialcmakegitpython3-dev
  • 网络工具:openssh-servertcpdumpnetcat
  • 调试工具:gdbstraceltrace

3.2 用户与权限设置

创建管理员用户并设置密码:

useradd -m -s /bin/bash developer usermod -aG sudo developer passwd developer

配置SSH服务允许远程登录:

mkdir /home/developer/.ssh chmod 700 /home/developer/.ssh

4. 制作系统镜像

4.1 创建空白镜像文件

退出chroot环境后,使用dd创建适当大小的镜像文件:

dd if=/dev/zero of=rootfs.img bs=1M count=2048 mkfs.ext4 -F -L rootfs rootfs.img

挂载镜像并复制Rootfs内容:

mkdir rootfs_mount sudo mount rootfs.img rootfs_mount sudo cp -a custom_rootfs/* rootfs_mount/ sudo umount rootfs_mount

4.2 打包完整系统镜像

Firefly-RK3399使用Rockchip专有的镜像格式,需要下载官方打包工具:

wget https://github.com/rockchip-linux/rkbin/raw/master/tools/rkImageMaker chmod +x rkImageMaker

准备内核镜像(假设为kernel.img)和参数文件,然后执行打包:

./rkImageMaker -RK3399 kernel.img rootfs.img update.img

最终生成的update.img即可通过Firefly提供的刷机工具写入设备。

5. 高级定制技巧

5.1 系统服务优化

对于嵌入式设备,通常需要精简不必要的服务以提升启动速度。使用systemd分析工具:

systemd-analyze blame systemd-analyze critical-chain

可以安全禁用的常见服务包括:

  • apt-daily.service:自动更新检查
  • systemd-timesyncd.service:若无网络时间同步需求
  • ModemManager.service:无蜂窝模块时

5.2 存储性能调优

针对eMMC/SD卡特性,可以调整文件系统挂载参数。编辑/etc/fstab

LABEL=rootfs / ext4 defaults,noatime,nodiratime,commit=60,data=writeback 0 1

关键参数说明:

  • noatime/nodiratime:减少元数据更新
  • commit=60:延长日志提交间隔
  • data=writeback:更激进的写入策略

6. 常见问题排查

6.1 启动失败分析

如果设备无法正常启动,可以通过串口控制台获取内核日志:

[ 1.200000] Initramfs unpacking failed: junk in compressed archive [ 1.210000] Failed to execute /init (error -2)

常见原因及解决方案:

  1. Rootfs损坏:重新制作镜像并验证文件完整性
  2. 内核与Rootfs不匹配:确保使用相同架构(ARM64)的组件
  3. 缺少关键设备文件:检查/dev目录下的consolenull设备

6.2 网络配置问题

静态IP配置示例(/etc/network/interfaces):

auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1

测试网络连通性:

ip link show eth0 ping -c 4 192.168.1.1

7. 自动化构建方案

对于需要频繁重建Rootfs的场景,可以编写脚本自动化整个过程。以下是一个简单的构建脚本框架:

#!/bin/bash # 定义变量 ROOTFS_SIZE=2048 UBUNTU_BASE_URL="http://cdimage.ubuntu.com/ubuntu-base/releases/20.04/release/ubuntu-base-20.04.4-base-arm64.tar.gz" # 下载和解压Ubuntu Base wget $UBUNTU_BASE_URL mkdir -p custom_rootfs sudo tar xzf $(basename $UBUNTU_BASE_URL) -C custom_rootfs # 配置QEMU sudo cp /usr/bin/qemu-aarch64-static custom_rootfs/usr/bin/ # 挂载必要目录 sudo mount --bind /dev custom_rootfs/dev sudo mount --bind /proc custom_rootfs/proc sudo mount --bind /sys custom_rootfs/sys # chroot并安装软件 sudo chroot custom_rootfs /bin/bash <<EOF apt update apt install -y sudo ssh vim useradd -m -s /bin/bash developer exit EOF # 创建镜像文件 dd if=/dev/zero of=rootfs.img bs=1M count=$ROOTFS_SIZE mkfs.ext4 -F -L rootfs rootfs.img

在实际项目中,我发现将构建过程分为多个阶段(基础系统、通用工具、项目特定组件)可以显著提高迭代效率。每次只需要重新构建变更的部分,然后通过文件系统快照快速组合成最终镜像。

http://www.zskr.cn/news/1324911.html

相关文章:

  • Tampermonkey显示某些URL受到浏览器或设置限制!
  • 收藏!一张图带你彻底搞懂,能落地的RAG系统长啥样?
  • 头歌模型构建 —— Inception
  • 别再混淆了!一文理清华为云Stack里FusionStorage、OceanStor Pacific与存储服务的对应关系
  • 深度解析:Copymanga第三方Android客户端架构设计与技术实现
  • 数智协同,赋能康养服务高效升级
  • 精准管控慢病,守护长者健康
  • 北京研华交通工控机
  • 【笔记】旧AI,新人类
  • 国际半导体全产业链展会推荐:深化跨国产业合作拓宽资源对接渠道 - 品牌2025
  • AI Coding 为什么全选了 TUI?从 Claude Code 到 Codex CLI,终端架构的底层逻辑
  • QGIS加载高德地图总对不上?手把手教你搞定GCJ02坐标偏移(附插件安装)
  • 三分钟搞定安卓连接难题:Windows版ADB驱动一键安装终极指南
  • BilibiliDown完整指南:三步搞定B站视频批量下载与高效管理
  • 告别折腾:用 apt 和 Qt 官方安装器两种方式在 Debian 上搞定 Qt 5.15.2 开发环境
  • 标准输入流,输出流,错误流 以及 重定向 的原理
  • 手把手教你用MATLAB搞定车载固态LiDAR与RTK的自动标定(附避坑指南)
  • 嵌入式Linux设备搭建无线AP:从hostapd配置到NAT优化的完整指南
  • Minecraft 1.21必备:5分钟搞定Masa模组全家桶中文汉化终极指南
  • N_m3u8DL-RE:跨平台流媒体下载器的终极解决方案
  • Python浮点精度陷阱——0.1+0.2≠0.3的底层原因与解决方案
  • TypeScript-------------类型收窄
  • 2026年5月均三嗪供应商深度解析与实力派推荐 - 2026年企业推荐榜
  • OK3568开发板配置流程
  • 小白/程序员必看:轻松掌握MCP协议,让大模型调用工具不再难(收藏版)
  • Ubuntu 16.04 32位系统下RT-Thread开发环境搭建全攻略
  • 川南二手物资回收服务机构2026年客观排行一览:宜宾荣生其商贸有限公司联系/办公座椅回收/办公设备回收/大型卖场回收/选择指南 - 优质品牌商家
  • 别再为ST7789屏幕移植发愁了!一份代码搞定STM32/51/Arduino(附完整工程)
  • Purple Pi OH开发板适配OpenHarmony 5.0全流程解析与实战
  • 最近被黑产盯上了,用我的帐号发了duboo信息,这不是我发的