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

【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脚本,内容脚本如下:

#!/bin/bash
mnt() {echo "MOUNTING"sudo mount -t proc /proc ${2}/procsudo mount -t sysfs /sys ${2}/syssudo mount -o bind /dev ${2}/devsudo mount -o bind /dev/pts ${2}/dev/ptssudo chroot ${2}
}
umnt() {echo "UNMOUNTING"sudo umount ${2}/procsudo umount ${2}/syssudo umount ${2}/dev/ptssudo umount ${2}/dev
}if [ "$1" == "-m" ] && [ -n "$2" ] ;
thenmnt $1 $2umnt $1 $2
elif [ "$1" == "-u" ] && [ -n "$2" ];
thenumnt $1 $2
elseecho ""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中的所有程序了!

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

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

root@ubuntu:/#

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

apt update && apt install <package_name>  # 安装所需软件

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

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

sudo umount ~/rootfs  # 确保退出后执行

二、打包烧写固件

update.img 系统固件组成

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

文件

描述

MiniLoaderAll.bin

引导文件

uboot.img

uboot 镜像

boot.img

内核镜像

recovery.img

recovery 镜像

rootfs.img

debian 文件系统镜像

misc.img

来自 rockchip 的自定义文件

oem.img

oem 分区的固件镜像

parameter.txt

分区表

userdata.img

用户空间的固件镜像

update.img

由上述文件打包而成的完整系统镜像

下载与准备固件打包工具

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

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脚本:

cd Linux_Pack_Firmware_RK/rockdev
./mkupdate.sh

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

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.

相关文章:

  • Fab-ME: 基于视觉状态空间与注意力增强的织物缺陷检测框架详解
  • arcgis几何与游标(2)
  • Qt中widget控件的常见属性
  • FPGA-DDS技术的波形发生器
  • 12【模块学习】DS18B20(二):高级使用
  • Nature图形复现—Origin绘制顶刊水准的多组柱状图
  • MySQL数据库精研之旅第六期:玩转数据库约束
  • web自动化:6种窗口截图方法、文件打开形式、文件路径及时间戳命名
  • 面试题:Eureka和Nocas的区别
  • 【未解决】Spring AI 1.0.0-M6 使用 Tool Calling 报错,请求破解之法
  • 关于汽车辅助驾驶不同等级、技术对比、传感器差异及未来发展方向的详细分析
  • Java Spring Cloud框架使用及常见问题
  • 超融合监控 | SmartX监控解析
  • 中间件--ClickHouse-5--架构设计(分布式架构,列式压缩存储、并行计算)
  • FP3:机器人操作的3D基础策略
  • 常见的 API 设计风格
  • 列表、字符串、heapq堆对列算法
  • windows10 wsl2 安装ubuntu和docker
  • 中间件--ClickHouse-6--SQL基础(类似Mysql,存在差异)
  • 【Linux】系统入门
  • 云南昆磨高速发生交通事故致3辆车起火,昆明消防:幸无人员伤亡
  • 五角大楼要裁一批四星上将
  • 以总理:在加沙地带扩大的军事行动将是“高强度”的
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • 英伟达:美国无法操纵监管机构在AI领域取胜,美企应专注创新而不是编造荒诞谣言
  • 客流持续高位运行,长三角铁路计划增开153列旅客列车