linuxOS_MC3302/sdk/X-AIOS-LT00-V1.0.4/tools/make_ota_package.sh

145 lines
4.3 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
# OTA升级包制作脚本
# 用途: 自动收集编译输出的固件文件并打包成update.tar.gz
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 自动检测SDK根目录脚本位于 sdk/X-AIOS-LT00-V1.0.4/tools/ 目录下)
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SDK_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
OUT_DIR="${SDK_ROOT}/out/qm10xd_linux/qmimages"
echo "检测到SDK路径: ${SDK_ROOT}"
# 临时工作目录
WORK_DIR="/tmp/ota_package_$(date +%Y%m%d_%H%M%S)"
UPDATE_DIR="${WORK_DIR}/update"
# 输出目录
OUTPUT_DIR="${1:-/tmp}"
OUTPUT_FILE="${OUTPUT_DIR}/update.tar.gz"
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} OTA升级包制作工具${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
# 检查源文件是否存在
check_file() {
if [ ! -f "$1" ]; then
echo -e "${RED}错误: 文件不存在: $1${NC}"
return 1
fi
echo -e "${GREEN}${NC} 找到: $(basename $1)"
return 0
}
# 创建工作目录
echo -e "${YELLOW}[1/5] 创建工作目录...${NC}"
mkdir -p "${UPDATE_DIR}"
echo "工作目录: ${WORK_DIR}"
echo ""
# 检查并复制文件
echo -e "${YELLOW}[2/5] 检查源文件...${NC}"
UBOOT_SRC="${OUT_DIR}/u-boot.bin"
KERNEL_SRC="${OUT_DIR}/zImage-dtb"
SYSTEM_SRC="${OUT_DIR}/system.ubi"
ROOTFS_SRC="${OUT_DIR}/rootfs.ubi"
LOGO_SRC="${OUT_DIR}/logo.img"
check_file "${UBOOT_SRC}" || exit 1
check_file "${KERNEL_SRC}" || exit 1
check_file "${SYSTEM_SRC}" || exit 1
check_file "${ROOTFS_SRC}" || exit 1
check_file "${LOGO_SRC}" || exit 1
echo ""
echo -e "${YELLOW}[3/5] 压缩固件文件...${NC}"
# 压缩uboot
echo "压缩 u-boot.bin..."
lzma -c "${UBOOT_SRC}" > "${UPDATE_DIR}/u-boot.bin.lzma"
echo -e "${GREEN}${NC} u-boot.bin.lzma ($(du -h ${UPDATE_DIR}/u-boot.bin.lzma | cut -f1))"
# 压缩kernel
echo "压缩 zImage-dtb..."
lzma -c "${KERNEL_SRC}" > "${UPDATE_DIR}/zImage-dtb.lzma"
echo -e "${GREEN}${NC} zImage-dtb.lzma ($(du -h ${UPDATE_DIR}/zImage-dtb.lzma | cut -f1))"
# 压缩logo
echo "压缩 logo.img..."
lzma -c "${LOGO_SRC}" > "${UPDATE_DIR}/logo.img.lzma"
echo -e "${GREEN}${NC} logo.img.lzma ($(du -h ${UPDATE_DIR}/logo.img.lzma | cut -f1))"
# 压缩ubi镜像以减小升级包体积
echo "压缩 system.ubi..."
lzma -c "${SYSTEM_SRC}" > "${UPDATE_DIR}/system.ubi.lzma"
echo -e "${GREEN}${NC} system.ubi.lzma ($(du -h ${UPDATE_DIR}/system.ubi.lzma | cut -f1))"
echo "压缩 rootfs.ubi..."
lzma -c "${ROOTFS_SRC}" > "${UPDATE_DIR}/rootfs.ubi.lzma"
echo -e "${GREEN}${NC} rootfs.ubi.lzma ($(du -h ${UPDATE_DIR}/rootfs.ubi.lzma | cut -f1))"
echo ""
echo -e "${YELLOW}[4/5] 添加升级脚本...${NC}"
# 添加uboot升级脚本进度图片从logo分区读取不需要打包
SCRIPT_OTA="${SDK_ROOT}/tools/partition/qm10xd/los_spi-nand/demo_ld_nand/script-ota.ini"
if [ -f "${SCRIPT_OTA}" ]; then
echo "复制 script-ota.ini..."
cp "${SCRIPT_OTA}" "${UPDATE_DIR}/"
echo -e "${GREEN}${NC} script-ota.ini"
else
echo -e "${RED}${NC} 错误: 找不到 script-ota.ini"
exit 1
fi
# 生成版本信息文件
echo "生成版本信息文件..."
UPDATE_VERSION="${UPDATE_VERSION:-1.0.0}"
cat > "${UPDATE_DIR}/.update_info.txt" <<EOF
update_version=${UPDATE_VERSION}
update_time=$(date +%Y%m%d_%H%M%S)
update_desc=OTA upgrade package
EOF
echo -e "${GREEN}${NC} .update_info.txt (version: ${UPDATE_VERSION})"
echo ""
echo -e "${YELLOW}[5/5] 打包升级文件...${NC}"
# 进入update目录打包包含隐藏文件
cd "${UPDATE_DIR}"
tar -czvf "${OUTPUT_FILE}" .update_info.txt * > /dev/null 2>&1
echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN} 升级包制作完成!${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo "升级包位置: ${OUTPUT_FILE}"
echo "升级包大小: $(du -h ${OUTPUT_FILE} | cut -f1)"
echo ""
echo "升级包内容:"
tar -tzf "${OUTPUT_FILE}" | sed 's/^/ - /'
echo ""
# 清理临时目录
echo -e "${YELLOW}清理临时文件...${NC}"
rm -rf "${WORK_DIR}"
echo -e "${GREEN}完成!${NC}"
echo ""
echo "使用方法:"
echo " 1. 将 ${OUTPUT_FILE} 复制到U盘"
echo " 2. 在目标板上运行: test_ota /tmp/udisk/update.tar.gz"
echo " 3. 系统会自动升级并重启"
echo ""