跳转至

系统备份与文件修改

SDK 适配主板 Buildroot Debian Ubuntu
rk356x_linux K1 / K1B / K1MINI / K3 / K3B / K8 / K8D / K11C - Debian11 Ubuntu20.04
rk-linux6.1 K1MINI / K3B / K8D / K11C - Debian12 Ubuntu24.04
rk3576-linux K7 / K7C / K7S-K7F - Debian12 Ubuntu24.04
a733-linux K10B - Debian11 -
a133-linux K5C - - -
t113-linux K4B burildroot2019 - Ubuntu20.04
t527-linux K9 - Debian11 -

文件系统备份

导出文件系统

使用 ff_export_rootfs 工具导出根文件系统为镜像。

# 确认工具存在
ls /usr/bin/ff_export_rootfs

Note

FAT32 单文件不能超过 4G,U 盘建议格式化为 ext4 或 exfat。

sudo chmod +x /usr/bin/ff_export_rootfs
sudo ff_export_rootfs /mnt/usb -t ext4
# 导出成功
Export rootfs to /mnt/usb/rootfs.img Success

# 确认格式
file /mnt/usb/rootfs.img
# Linux rev 1.0 ext4 filesystem data ...

制作定制固件镜像

在主板系统上完成定制(安装软件、修改配置等)后,将文件系统导出并打包成可烧录的固件,有以下方式:

方式一:固件解包替换(Rockchip,无需 SDK 编译)

Note

适用:已有编译好的原始固件,仅需替换 rootfs,无需重新编译。
工具:Linux_Pack_Firmware(SDK 内置)。

操作步骤:

1. 导出主板文件系统 — 参考上方导出文件系统,获取 rootfs.img

2. 获取打包工具 — 从 SDK 中取出或下载 Linux_Pack_Firmware

// Linux SDK 路径:
rk356x-linux/tools/linux/Linux_Pack_Firmware
rk-linux6.1/tools/linux/Linux_Pack_Firmware
rk3576-linux/tools/linux/Linux_Pack_Firmware
// Android SDK 路径:
rk-android13.0/RKTools/linux/Linux_Pack_Firmware

3. 解包原始固件 — 参考下方 固件解包与打包,得到 output/ 目录。

4. 替换 rootfs

cp /path/to/rootfs.img Linux_Pack_Firmware/rockdev/output/rootfs.img

5. 重新打包 — 运行对应芯片的打包脚本:

芯片 打包脚本
RK3562/K3B ./rk356x-mkupdate.sh
RK3566/K11C ./rk356x-mkupdate.sh
RK3568/K1/K1B/K1MINI ./rk356x-mkupdate.sh
RK3576/K7/K7C/K7S ./rk3576-mkupdate.sh
RK3588/K8 ./rk3588-mkupdate.sh
RK3588S2/K8D ./rk3588-mkupdate.sh

6. 获取固件 — 打包产物 rockdev/update.img 即为可烧录固件。


方式二:固件解包替换(Allwinner,无需 SDK 编译)

Note

适用:已有编译好的固件 .img,无需 SDK 编译环境。
工具:下载 Allwinner_Pack_Firmwareunpack.sh + repack.sh

# 1. 解包固件
cd Allwinner_Pack_Firmware
./unpack.sh firmware.img
# → firmware.img.dump/(rootfs.fex、boot.fex、image.cfg 等)

# 2. 替换 rootfs
cp /path/to/exported/rootfs.img firmware.img.dump/rootfs.fex

# 3. 重新打包
./repack.sh firmware.img.dump/ output.img

Note

repack.sh 需要 Allwinner SDK 中的 dragon 打包程序,脚本会自动搜索 SDK 路径。若找不到,需手动将 tina/tools/pack/pctools/linux/eDragonEx/ 下的 dragon*.dllFileAddSum 复制到解包目录。

方式三:SDK 内替换打包(Allwinner,无需额外工具)

Tip

适用:有 SDK 编译环境且已编译过一次(./build.sh 完成)。

AW SDK 编译后中间文件保留在 out/ 下,无需解包即可直接替换 rootfs 重新打包。

1. 按上方 导出文件系统导出 rootfs.img

2. 替换 rootfs 中间产物:

SDK rootfs 路径 说明
a733-linux out/a733/kickpi-k10b/debian/rootfs.ext4 pack_out/rootfs.fex 为其 symlink
t527-linux out/ 下对应 debian/rootfs.ext4 同上结构

3. 仅打包不编译:

./build.sh pack

4. 固件位于 out/ 目录下。

# 完整操作示例(a733-linux K10B)
./build.sh                           # 1) 首次编译
cp custom-rootfs.img out/a733/kickpi-k10b/debian/rootfs.ext4  # 2) 替换 rootfs
./build.sh pack                      # 3) 仅打包
# 固件: out/a733_linux_kickpi-k10b_uart0.img

Note

a133-linux / t113-linux 可能不支持 ./build.sh pack,请以实际 SDK 为准。可使用方式二(awimage)作为替代。

系统整体备份

导出系统至 SD 卡

dd 方式

Note

硬件要求:SD 卡(写入速度 ≥ class10)

# 查看块设备
$ lsblk
mmcblk0      179:0    0  7.2G  0 disk        # eMMC(系统盘)
mmcblk1      179:48   0 58.6G  0 disk        # SD 卡

# 卸载分区并格式化 SD 卡
sudo umount /dev/mmcblk1p1
sudo mkfs.ext4 /dev/mmcblk1

# dd 整盘拷贝(约 10~25 分钟,镜像大小 = 整盘容量)
sudo dd if=/dev/mmcblk0 of=/dev/mmcblk1 bs=4M status=progress

nand-sata-install 方式

sudo nand-sata-install 2 1

导出系统至 U 盘

# 挂载 U 盘
mkdir -p /mnt/usb
mount /dev/sda1 /mnt/usb

# 将 eMMC 整盘导出为镜像
sudo dd if=/dev/mmcblk0 of=/mnt/usb/output.img bs=4M status=progress
sync

生成的 output.img 可用于直接烧录。

Warning

dd 导出的是整盘镜像,大小等于 eMMC 容量(如 7.2G eMMC 产出 7.2G 镜像),包含空块和所有分区。如需仅备份文件系统,推荐使用上方 导出文件系统ff_export_rootfs 方式,仅导出实际数据(约 3-4G)。

固件解包与打包

Note

Rockchip 固件支持解包和重新打包。

  • 工具获取

1. 点击获取工具,或从SDK寻找工具。

//Linux-SDK源码路径:
rk356x-linux\tools\linux\Linux_Pack_Firmware
//Android-SDK源码路径:
rk-android13.0\RKTools\linux\Linux_Pack_Firmware
  • 解包

1. 将 Linux_Pack_Firmware 放到你的虚拟机工作目录中。

ls Linux_Pack_Firmware/
rockdev

2. 将需要解包的固件放置于rockdev目录下,重命名为:update.img

cd Linux_Pack_Firmware/rockdev
mv update-rk3568-kickpi-k1-linux-debian--20250403-150845.img update.img

3. 运行脚本进行解包

./unpack.sh

4. 解包文件位置。

ls output/
Image  MiniLoaderAll.bin  package-file  parameter.txt
  • 打包

Tip

将解包出的镜像修改完成后可以进行重新打包。

1. 将文件拷贝至rockdev对应路径,删除之前用于解包的update.img镜像。

cp -rf output/* ./ 
mv parameter.txt Image/
mv MiniLoaderAll.bin Image/
rm update.img

2. 修改package-file文件,将文件路径修改为对应文件放置路径。

# NAME  PATH
package-file    package-file
parameter       Image/parameter.txt
bootloader      Image/MiniLoaderAll.bin
uboot   Image/uboot.img
misc    Image/misc.img
boot    Image/boot.img
recovery        Image/recovery.img
backup  RESERVED
rootfs  Image/rootfs.img

3. 运行对应芯片的打包脚本:

芯片 打包脚本
RK3562/RK3566/RK3568 ./rk356x-mkupdate.sh
RK3576 ./rk3576-mkupdate.sh
RK3588/RK3588S2 ./rk3588-mkupdate.sh
# 示例:RK3568
./rk356x-mkupdate.sh

4. 打包完成的镜像位于rockdev目录下。

ls update.img

根文件系统定制

Note

img 或 tar.gz 格式的根文件系统定制,建议导出主板上的文件系统进行替换。

SDK Rootfs Overlay
rk356x_linux debian/linaro-rootfs.img
ubuntu/ubuntu-rootfs.img
-
rk-linux6.1 debian/mk-rootfs-bookworm.sh
ubuntu/mk-rootfs-noble.sh
debian/overlay
ubuntu/overlay
rk3576-linux debian/mk-rootfs-bookworm.sh
ubuntu/mk-rootfs-ubuntu2404.sh
debian/overlay
ubuntu/overlay
t113-linux device/config/rootfs_tar/ubuntu-armhf.tar.gz device/config/rootfs_tar/install_libs/evb1_auto/
a133-linux device/config/rootfs_tar/rootfs_ubuntu_kickpi_k5_1604lts.tar.gz overlay
t527-linux debian/compressed_files/linaro-bullseye-xfce-arm64.tar.gz debian/overlay
a733-linux debian/compressed_files/linaro-bullseye-xfce-arm64.tar.gz debian/overlay

分区配置

Allwinner 分区

主板 SDK 分区表
K4B t113-linux device/config/chips/t113/configs/evb1_auto/buildroot/sys_partition.fex
device/config/chips/t113/configs/evb1_auto/ubuntu/sys_partition.fex
K5C a133-linux device/config/chips/a133/configs/c3/android/sys_partition.fex
K9 t527-linux device/config/chips/t527/configs/demo_linux_aiot/debian/sys_partition.fex
K10B a733-linux device/config/chips/a733/configs/demo_aiot/debian/sys_partition.fex

A133 分区示例:

# fdisk -l
/dev/mmcblk0p1    32M
/dev/mmcblk0p2    16M
/dev/mmcblk0p3    64M
/dev/mmcblk0p4     6G  (rootfs)
/dev/mmcblk0p5    16M
/dev/mmcblk0p6   1.1G (UDISK)

修改 rootfs 分区大小:

--- a/device/config/chips/a133/configs/default/sys_partition.fex
+++ b/device/config/chips/a133/configs/default/sys_partition.fex
@@ -53,7 +53,7 @@ size = 16384
 [partition]
     name         = rootfs
-    size         = 14931722
+    size         = 12582912
     downloadfile = "rootfs.fex"
     user_type    = 0x8000

Rockchip 分区

可通过两种方式完成修改:

  • 完整镜像修改

参考 固件解包和打包,修改 parameter.txt 文件后重新打包。

  • SDK内修改

对应路径下文件修改完成后,重新编译。

主板 SDK 芯片 分区表路径 (相对于 SDK 根目录)
K1/K1B/K11C/K1MINI rk356x-linux RK3566/RK3568 device/rockchip/.chips/rk3566_rk3568/parameter-buildroot-fit.txt
K3/K3B rk356x-linux RK3562 device/rockchip/.chips/rk3566_rk3568/parameter-buildroot-fit.txt
K8/K8D rk356x-linux RK3588 device/rockchip/.chips/rk3588/parameter.txt
K1MINI/K11C rk-linux6.1 RK3566/RK3568 device/rockchip/.chips/rk3566_rk3568/parameter-buildroot-fit.txt
K3B rk-linux6.1 RK3562 device/rockchip/.chips/rk3562/parameter-buildroot-fit.txt
K8D rk-linux6.1 RK3588S2 device/rockchip/.chips/rk3588/parameter.txt
K7/K7C/K7S rk3576-linux RK3576 device/rockchip/.chips/rk3576/parameter.txt

修改内容:

重新分区主要修改分区文件parameter.txt

操作示例:将剩余所有空间放至根目录下

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

Note

文件分区规则:
分区大小:0x01c00000*512Byte/1024/1024/1014 ≈ 14G
分区起始地址:前一个分区起始地址+前一个分区大小
最后一个分区格式为:-@0x0xxxxx(xxx:grow) -表示剩余所有空间自适应。

Linux系统需要额外增加一步修改,注释oem userdate的自动挂载。

$ sudo mount -o loop rootfs.img rootfs
$ sudo vim rootfs/etc/fstab 

Ubuntu 文件系统修改

本操作仅适用于搭载T113平台的主板,编译前如需修改 Ubuntu 根文件系统(安装软件、替换配置等),提供两种方式:chroot 挂载修改(适合大量改动)和 overlay 覆盖替换(适合少量文件修改)。

方式一:chroot 挂载修改

通过在主机上模拟 ARM 环境,直接进入 Ubuntu 镜像进行修改,等同于在板卡 root 用户下操作。

1. 搭建构建环境,只需安装一次。

sudo apt-get install qemu-user-static

2. 备份原始镜像

cp device/config/rootfs_tar/ubuntu-armhf.tar.gz device/config/rootfs_tar/ubuntu-armhf.tar.gz-backup

3. 解压镜像

cd device/config/rootfs_tar/
mkdir rootfs_k4b
tar -zxf ubuntu-armhf.tar.gz -C rootfs_k4b

4. 挂载并进入 chroot 环境

# 挂载
./ch-mount.sh -m rootfs_k4b

# 配置 DNS 和 QEMU 模拟器
sudo cp -b /etc/resolv.conf rootfs_k4b/etc/resolv.conf
sudo cp -b /usr/bin/qemu-arm-static rootfs_k4b/usr/bin/

# 进入 chroot
sudo chroot rootfs_k4b

5. 在 chroot 中修改

export LC_ALL=C.UTF-8

# 配置 DNS
echo "nameserver 8.8.8.8" >> etc/resolv.conf
echo "nameserver 114.114.114.114" >> etc/resolv.conf

# 验证网络
ping www.baidu.com

# 更新软件源
apt-get update
apt-get upgrade

# 安装所需软件或修改文件
apt install <package_name>

完成后退出 chroot:

exit

6. 取消挂载:必须取消挂载后才能进行下一步打包,否则镜像会损坏。

./ch-mount.sh -u rootfs_k4b

7. 重新打包镜像

rm -v ubuntu-armhf.tar.gz
cd rootfs_k4b/
sudo tar -zcf ../ubuntu-armhf.tar.gz .
cd ..
ls ubuntu-armhf.tar.gz   # 确认新镜像已生成

8. 重新编译,编译时会将新的 rootfs 打包进最终镜像。

./build.sh

方式二:overlay 覆盖替换

适合少量文件的快速替换,无需挂载和重新打包。将文件放入指定目录,编译时自动覆盖到 rootfs 对应路径。

目标目录:

device/config/rootfs_tar/install_libs/evb1_auto/

示例: 将脚本 test.sh 放到根文件系统的 /etc/test.sh

# 源码路径即为目标路径的直接映射
cp test.sh device/config/rootfs_tar/install_libs/evb1_auto/etc/test.sh

目录结构与目标 rootfs 一一对应。例如 evb1_auto/usr/bin/myapp 会被编译到 /usr/bin/myapp

放置完成后,直接编译即可:

./build.sh