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
相关推荐
caimouse1 小时前
ReactOS 图形系统分析(3):显示驱动 DDI framebuf.dll
linux·运维·网络
TonyLee0172 小时前
Claude Code + DeepSeek:服务器安装与使用笔记
linux·服务器·deepseek·claude code
buhuizhiyuci2 小时前
【Linux 篇】数字世界的水流蓄水池 —— IO 缓冲区机制深度实战解析
linux·运维·服务器·c++
骇客野人2 小时前
Linux 服务器 Python 版 MCP 服务部署整体方案(适配 Claude/Cursor/自研Agent)
linux·服务器·python
天疆说3 小时前
04 稳定性与性能调优实录:OOM 崩溃、并发槽位、前缀缓存与 DSpark 调参
linux·运维·缓存
星卯教育tony3 小时前
NOI Linux 2.0 服务器多用户网页桌面部署方案(腾讯云轻量Ubuntu20.04专属版 CSP复赛比赛环境搭建免安装虚拟机 )
linux·服务器·腾讯云
Forever Nore4 小时前
LeetCode 14 最长公共前缀 - 纵向扫描
linux·服务器·leetcode
拂拉氏4 小时前
【知识讲解】 Linux权限相关知识讲解
linux·权限
Shadow(⊙o⊙)4 小时前
Linux网络部分——TCP协议服务端客户端交互接口,入门级硬核解析1.0
linux·网络·tcp/ip
桑榆4169 小时前
双系统(Windows + Ubuntu)安装流程
linux·windows·ubuntu