Linux SDK 中 build.sh 打包 updateimg 流程分析

Linux SDK 中 build.sh 打包 updateimg 流程分析

  • 作者:吴思含(Witheart)
  • 更新时间:20250814

概要:本文详细分析了 Linux SDK 中 build.sh 脚本打包 update.img 的流程,涵盖了脚本调用关系、关键函数解析以及所用工具与软链接指向,帮助开发者更清晰地理解固件打包过程。


1. build.sh 脚本概述

SDK 根目录下的 build.sh 实际上是一个软链接,指向 device/rockchip/common/build.sh

bash 复制代码
➜  rk3568_linux_4.19 git:(QY-Standard-SATA_enable-01) ✗ ls -al build.sh 
lrwxrwxrwx 1 hw hw 31 1月  21  2025 build.sh -> device/rockchip/common/build.sh

2. build_updateimg 函数解析

build.sh 中定义了 build_updateimg 函数,用于打包 update.img。

bash 复制代码
function build_updateimg(){
	IMAGE_PATH=$TOP_DIR/rockdev
	PACK_TOOL_DIR=$TOP_DIR/tools/linux/Linux_Pack_Firmware

	cd $PACK_TOOL_DIR/rockdev

	if [ -f "$RK_PACKAGE_FILE_AB" ]; then
		build_sdcard_package
		build_otapackage

		cd $PACK_TOOL_DIR/rockdev
		echo "Make Linux a/b update_ab.img."
		source_package_file_name=`ls -lh package-file | awk -F ' ' '{print $NF}'`
		ln -fs "$RK_PACKAGE_FILE_AB" package-file
		./mkupdate.sh
		mv update.img $IMAGE_PATH/update_ab.img
		ln -fs $source_package_file_name package-file
	else
		echo "Make update.img"

		if [ -f "$RK_PACKAGE_FILE" ]; then
			source_package_file_name=`ls -lh package-file | awk -F ' ' '{print $NF}'`
			ln -fs "$RK_PACKAGE_FILE" package-file
			./mkupdate.sh
			ln -fs $source_package_file_name package-file
		else
			./mkupdate.sh
		fi
 	        #md5sum update.img >update.img.md5
                #zip update.zip update.img update.img.md5
                #md5sum update.zip > update.zip.md5
                mv update.img $IMAGE_PATH
                #mv update.zip $IMAGE_PATH
                #mv update.zip.md5 $IMAGE_PATH
	fi

	finish_build
}

该函数核心逻辑:

  • 判断是否存在 A/B 分区的打包配置文件。
  • 使用 mkupdate.sh 脚本进行打包。
  • 将生成的 update.img 移动到 $TOP_DIR/rockdev 目录下。

3. mkupdate.sh 脚本及其软链接

build_updateimg 函数中调用的 mkupdate.sh 实际上也是一个软链接,指向 rk356x-mkupdate.sh

bash 复制代码
➜  rk3568_linux_4.19 git:(QY-Standard-SATA_enable-01) ✗ ls -l /home/hw/hdd/rk3568_linux_4.19/tools/linux/Linux_Pack_Firmware/rockdev/mkupdate.sh
lrwxrwxrwx 1 hw hw 18 2月   7  2025 /home/hw/hdd/rk3568_linux_4.19/tools/linux/Linux_Pack_Firmware/rockdev/mkupdate.sh -> rk356x-mkupdate.sh

4. rk356x-mkupdate.sh 脚本内容

该脚本负责调用打包工具 afptoolrkImageMaker 生成 update.img

bash 复制代码
#!/bin/bash
pause()
{
echo "Press any key to quit:"
read -n1 -s key
exit 1
}
echo "start to make update.img..."
if [ ! -f "Image/parameter" -a ! -f "Image/parameter.txt" ]; then
	echo "Error:No found parameter!"
	exit 1
fi
if [ ! -f "package-file" ]; then
	echo "Error:No found package-file!"
	exit 1
fi
./afptool -pack ./ Image/update.img || pause
./rkImageMaker -RK3568 Image/MiniLoaderAll.bin Image/update.img update.img -os_type:androidos || pause
echo "Making ./Image/update.img OK."
exit $?
  • 检查参数文件和 package-file 是否存在。
  • 使用 afptool 打包 Image/ 目录下的文件为 Image/update.img
  • 使用 rkImageMaker 生成最终的 update.img

5. Image 目录的软链接

Image 目录也是一个软链接,实际指向 SDK 根目录下的 rockdev

bash 复制代码
➜  rk3568_linux_4.19 git:(QY-Standard-SATA_enable-01) ✗ ls -l /home/hw/hdd/rk3568_linux_4.19/tools/linux/Linux_Pack_Firmware/rockdev/Image
lrwxrwxrwx 1 hw hw 20 1月  21  2025 /home/hw/hdd/rk3568_linux_4.19/tools/linux/Linux_Pack_Firmware/rockdev/Image -> ../../../../rockdev/

6. 总结

整个打包流程如下:

  1. SDK 根目录执行 build.sh,实际调用的是 device/rockchip/common/build.sh
  2. 调用 build_updateimg 函数。
  3. 函数内调用 mkupdate.sh(软链接至 rk356x-mkupdate.sh)。
  4. rk356x-mkupdate.sh 使用 afptoolrkImageMaker 进行打包。
  5. 镜像文件来源于 Image 目录,实际指向 rockdev
相关推荐
Yana.nice3 小时前
Linux 只保留 30 天内日志(find命令删除日志文件)
linux·运维·chrome
DFT计算杂谈7 小时前
无 Root 权限在 Tesla K80 零门槛部署 DeepSeek 大模型
linux·服务器·网络·数据库·机器学习
Zhang~Ling8 小时前
从 fopen 到 struct file:从零开始拆解 Linux 文件 I/O
linux·运维·服务器
DeeplyMind8 小时前
Linux 深入 per-VMA lock:Linux 缺页路径如何摆脱 mmap_lock
linux·per-vma lock
爱写代码的森8 小时前
蒙三方库 | harmony-utils之FileUtil文件重命名与属性查询详解
linux·运维·服务器·华为·harmonyos·鸿蒙·huawei
XMAIPC_Robot9 小时前
软硬协同实时控制|RK3588业务调度+FPGA硬件时序,ethercat实现半导体设备微秒级响应(125us)
linux·arm开发·人工智能·fpga开发
重生的黑客10 小时前
Linux 进程优先级、切换与调度:从孤儿进程到 O(1) 调度模型
linux·运维·服务器·进程优先级·nice
骑上单车去旅行11 小时前
MD5校验对比脚本
linux·服务器·windows
平生幻11 小时前
Linux 常用命令
linux
ShirleyWang01213 小时前
让headlamp控制台能访问
linux·服务器·python·k8s·k3s