【HD-RK3576-PI】定制用户升级固件

硬件:HD-RK3576-PI

软件:Linux6.1+Ubuntu22.04

在进行 Rockchip 相关开发时,制作自定义的烧写固件是一项常见且重要的操作。这里主要介绍文件系统的修改以及打包成完整update包升级的过程。

一、修改文件系统镜像(Ubuntu环境操作)

环境准备

复制代码
sudo apt-get update && sudo apt-get install qemu-user-static

挂载镜像文件

复制代码
mkdir -p ~/rootfs  # 创建临时挂载目录
sudo mount -o loop rootfs.img ~/rootfs  # 挂载镜像到目录

进入Chroot环境

使用ch-mount.sh脚本,内容脚本如下:

bash 复制代码
#!/bin/bash
mnt() {
        echo "MOUNTING"
        sudo mount -t proc /proc ${2}/proc
        sudo mount -t sysfs /sys ${2}/sys
        sudo mount -o bind /dev ${2}/dev
        sudo mount -o bind /dev/pts ${2}/dev/pts
        sudo chroot ${2}
}
umnt() {
        echo "UNMOUNTING"
        sudo umount ${2}/proc
        sudo umount ${2}/sys
        sudo umount ${2}/dev/pts
        sudo umount ${2}/dev
}

if [ "$1" == "-m" ] && [ -n "$2" ] ;
then
        mnt $1 $2
        umnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
then
        umnt $1 $2
else
        echo ""
        echo "Either 1'st, 2'nd or both parameters were missing"
        echo ""
        echo "1'st parameter can be one of these: -m(mount) OR -u(umount)"
        echo "2'nd parameter is the full path of rootfs directory(with trailing '/')"
        echo ""
        echo "For example: ch-mount -m /media/sdcard/"
        echo ""
        echo 1st parameter : ${1}
        echo 2nd parameter : ${2}
fi

执行如下命令,我们就可以像在虚拟机中一样,通过shell运行这个chroot中的所有程序了!

bash 复制代码
sudo cp /usr/bin/qemu-aarch64-static ~/rootfs/usr/bin
sudo ./ch-mount.sh -m ~/rootfs  # 挂载系统依赖

输入用户密码后进入Chroot环境,提示符变为:

bash 复制代码
root@ubuntu:/#

然后我们就可以支持直接编辑文件或安装软件:

bash 复制代码
apt update && apt install <package_name>  # 安装所需软件

修改完后,按Ctrl+D退出Chroot环境,自动卸载虚拟文件系统。

然后取消文件系统挂载就可以

bash 复制代码
sudo umount ~/rootfs  # 确保退出后执行

二、打包烧写固件

update.img 系统固件组成

update.img 完整系统镜像由以下多个文件共同构成:

|-------------------|--------------------|
| 文件 | 描述 |
| MiniLoaderAll.bin | 引导文件 |
| uboot.img | uboot 镜像 |
| boot.img | 内核镜像 |
| recovery.img | recovery 镜像 |
| rootfs.img | 文件系统镜像如ubuntu |
| misc.img | 来自 rockchip 的自定义文件 |
| oem.img | oem 分区的固件镜像 |
| parameter.txt | 分区表 |
| userdata.img | 用户空间的固件镜像 |
| update.img | 由上述文件打包而成的完整系统镜像 |

下载与准备固件打包工具

从HD-RK3576-PI在线文档上中的软件开发参考资料处获取固件打包工具的下载地址(也可以从附件资源下载)。将下载得到的工具压缩包解压到电脑的 Linux 环境中。解压后,其目录结构如下:

bash 复制代码
Linux_Pack_Firmware_RK/
└── rockdev
    ├── Image
    ├── afptool
    ├── mkupdate.sh -> rk3576-mkupdate.sh  
    ├── package-file -> rk3576-package-file
    ├── readme.txt
    ├── revision.txt
    ├── rk3576-mkupdate.sh
    ├── rk3576-package-file
    ├── rkImageMaker
    ├── sdcard-update-package-file
    └── unpack.sh
  • package-file:此文件用于配置需要打包的文件包,决定了哪些文件最终会被包含在 update.img 镜像中。
  • Image 目录:该目录用于存放需要打包的文件,例如 Miniloader.bin、uboot.img 等文件可放置在此处。
执行打包操作

完成上述准备工作,并且确认 package-file 配置无误以及相关文件已放置在 Image 目录后,即可执行打包操作。在终端中进入到rockdev目录,执行mkupdate.sh脚本:

bash 复制代码
cd Linux_Pack_Firmware_RK/rockdev
./mkupdate.sh

脚本执行成功后,会在mkupdate.sh脚本所在的目录rockdev下生成一个update.img镜像,此镜像即为完整的系统烧写固件,可用于后续的设备烧录操作。

bash 复制代码
vanxoak@ubuntu:~ /Linux_Pack_Firmware_RK/rockdev$ ./mkupdate.sh
start to make update.img...
Android Firmware Package Tool v2.27
------ PACKAGE ------
Add file: ./package-file
package-file,Add file: ./package-file done,offset=0x800,size=0x28b,userspace=0x1
Add file: ./Image/MiniLoaderAll.bin
bootloader,Add file: ./Image/MiniLoaderAll.bin done,offset=0x1000,size=0xb91f9,userspace=0x173
Add file: ./Image/parameter.txt
parameter,Add file: ./Image/parameter.txt done,offset=0xba800,size=0x1f8,userspace=0x1,flash_address=0x00000000
Add file: ./Image/uboot.img
uboot,Add file: ./Image/uboot.img done,offset=0xbb000,size=0x400000,userspace=0x800,flash_address=0x00004000
Add file: ./Image/misc.img
misc,Add file: ./Image/misc.img done,offset=0x4bb000,size=0xc000,userspace=0x18,flash_address=0x00006000
Add file: ./Image/boot.img
boot,Add file: ./Image/boot.img done,offset=0x4c7000,size=0x317a800,userspace=0x62f5,flash_address=0x00008000
Add file: ./Image/recovery.img
recovery,Add file: ./Image/recovery.img done,offset=0x3641800,size=0x42b4e00,userspace=0x856a,flash_address=0x00028000
Add file: ./Image/rootfs.img
rootfs,Add file: ./Image/rootfs.img done,offset=0x78f6800,size=0x3cc00000,userspace=0x79800,flash_address=0x00078000
Add file: ./Image/oem.img
oem,Add file: ./Image/oem.img done,offset=0x444f6800,size=0x11ef000,userspace=0x23de,flash_address=0x00a78000
Add file: ./Image/userdata.img
userdata,Add file: ./Image/userdata.img done,offset=0x456e5800,size=0x44e000,userspace=0x89c,flash_address=0x00ab8000
Add CRC...
Make firmware OK!
------ OK ------
********rkImageMaker ver 2.23********
Generating new image, please wait...
Writing head info...
Writing boot file...
Writing firmware...
Generating MD5 data...
MD5 data generated successfully!
New image generated successfully!
Making ./Image/update.img OK.
相关推荐
碧寒2 分钟前
Ubuntu系统18.04更新驱动解决方法
linux·运维·ubuntu
charlie11451419117 分钟前
IMX6ULL2025年最新部署方案2在Ubuntu24.04上编译通过Qt5.12.9且部署到IMX6ULL正点原子开发板上
linux·嵌入式硬件·qt·系统架构·嵌入式软件·移植教程
Bardb31 分钟前
05--MQTT物联网协议
linux·服务器·阿里云·json
红虾程序员1 小时前
Linux进阶命令
linux·服务器·前端
.R^O^1 小时前
VLAN的知识
linux·服务器·网络·mysql
长流小哥2 小时前
Linux 深入浅出信号量:从线程到进程的同步与互斥实战指南
linux·c语言·开发语言·bash
派阿喵搞电子3 小时前
Ubuntu 常用命令行指令
linux·ubuntu
库库林_沙琪马3 小时前
Linux 命令全解析:从零开始掌握 Linux 命令行
linux·运维·服务器
嘿rasa3 小时前
2025最新系统 Linux 教程(二)
linux·运维·服务器
浪淘沙jkp3 小时前
AI大模型学习十:‌Ubuntu 22.04.5 调整根目录大小,解决根目录磁盘不够问题
linux·学习·ubuntu