编辑
2025-03-03
工作知识
0
请注意,本文编写于 95 天前,最后修改于 95 天前,其中某些信息可能已经过时。

目录

一:获取源码
二:使用说明
2.1 打包文件package-file
2.2 Image目录
2.3 parameter文件
2.4 输出文件
2.5 烧录

在RK的sdk中有制作update的工具二进制,但是这些二进制是只能运行在x86平台上。而我们的工作环境大部分情况下是在arm64上的,本篇文章提供了在arm64下能够打包update的方法。

一:获取源码

https://gitlab2.kylin.com/shanghai-team/create-rootfs/-/tree/kybuild/tool/src

如上是工具的源码,可以通过make的方式在各个平台上编译生成afptool和img_maker两个二进制

二:使用说明

目录附带了一个mkupdate.sh脚本,通过此脚本可以自动打包固件,如下为脚本内容

#!/bin/bash # Self Test CHIP=$1 usage() { echo "Usage: ./$(basename $0) rk3399 ./$(basename $0) rk3568 ./$(basename $0) rk3588" } if ! [ "${CHIP}" = "rk3399" ] && ! [ "${CHIP}" = "rk3568" ] && ! [ "${CHIP}" = "rk3588" ] then echo -e "\e[32mUnsupported Chip\e[0m" usage exit fi [ ! -d ./Image ] && echo "Cannot found Image directory" && exit ./afptool -pack ./ firmware_afp.img <<! # rk3399 ./img_maker -rk3399 ./Image/MiniLoaderAll.bin firmware_afp.img update.img # rk3568 ./img_maker -rk3588 ./Image/MiniLoaderAll.bin firmware_afp.img update.img # rk3588 ./img_maker -rk3568 ./Image/MiniLoaderAll.bin firmware_afp.img update.img ! ./img_maker -${CHIP} ./Image/MiniLoaderAll.bin firmware_afp.img update.img

2.1 打包文件package-file

在mkupdate.sh的当前目录,需要存在一个打包文件,里面描述了需要打包固件的名字和路径,该文件有自行编写,示例如下:

package-file package-file bootloader Image/MiniLoaderAll.bin parameter Image/parameter.txt trust Image/trust.img uboot Image/uboot.img boot Image/boot.img rootfs Image/rootfs.img

上述描述了需要打包的内容如,自身package-file,bootloader,分区表parameter,trust固件,uboot固件,内核固件boot,根文件系统rootfs

2.2 Image目录

mkupdate.sh需要一个Image目录,其中存放打包中需要的文件,我们要将需要打包的二进制手动拷贝到当前目录的Image目录内后方可运行测试脚本,其文件对应package-file的指定内容

2.3 parameter文件

分区文件主要指定了固件的分区细节,该文件根据平台自定义,rk3588的分区文件示例如下

FIRMWARE_VER: 1.0 MACHINE_MODEL: RK3588 MACHINE_ID: 007 MANUFACTURER: RK3588 MAGIC: 0x5041524B ATAG: 0x00200800 MACHINE: 0xffffffff CHECK_MASK: 0x80 PWR_HLD: 0,0,A,0,1 TYPE: GPT CMDLINE: mtdparts=rk29xxnand:0x00002000@0x00004000(uboot),0x00040000@0x00008000(boot:bootable),0x01508000@0x00048000(rootfs),0x00600000@0x01550000(data),0x00600000@0x01b50000(work),-@0x02150000(userdata:grow) uuid:rootfs=614e0000-0000-4b53-8000-1d28000054a9 uuid:boot=7A3F0000-0000-446A-8000-702F00006273

一般情况下只修改分区文件的cmdline中的分区地址,其他无需改变

2.4 输出文件

mkupdate.sh会在本地目录生成一个update.img,该文件即rk平台的固件格式,可以通过RK的工具进行整包烧录

2.5 烧录

https://gitlab2.kylin.com/shanghai-team/create-rootfs/-/tree/kybuild/tool/src/windows-tool

上述提供了2.92版本的烧录工具,我们自行开发的arm64的打包工具在此版本正常工作,其他版本尚未验证,无法保障。因为工具为自行修改,和RK的实现不一致,故可能出现windows烧录工具的版本不一样导致出现的烧录异常问题。

如RK更新了超过2.92版本的烧录工具,后续我们会再自行验证和兼容。