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

163 lines
4.9 KiB
Bash
Executable File

#!/bin/bash
# OTA升级包制作脚本
# 用途: 自动收集编译输出的固件文件并打包成update.tar.gz
set -e
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# 项目根目录
SDK_ROOT="/home/hyx/work/linuxOS_MC3302/sdk/X-AIOS-LT00-V1.0.4"
OUT_DIR="${SDK_ROOT}/out/qm10xd_linux/qmimages"
# 临时工作目录
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..."
cp "${SYSTEM_SRC}" "${UPDATE_DIR}/system_2KB_128KB_24MB.ubi"
echo -e "${GREEN}${NC} system_2KB_128KB_24MB.ubi ($(du -h ${UPDATE_DIR}/system_2KB_128KB_24MB.ubi | cut -f1))"
echo "复制 rootfs.ubi..."
cp "${ROOTFS_SRC}" "${UPDATE_DIR}/rootfs_2KB_128KB_10MB.ubi"
echo -e "${GREEN}${NC} rootfs_2KB_128KB_10MB.ubi ($(du -h ${UPDATE_DIR}/rootfs_2KB_128KB_10MB.ubi | cut -f1))"
echo ""
echo -e "${YELLOW}[4/5] 添加升级进度图片和脚本...${NC}"
# 从SDK中复制进度图片
LOGO_SRC_DIR="${SDK_ROOT}/tools/ubuntu/logotool/logopart/meisite"
if [ -d "${LOGO_SRC_DIR}" ]; then
echo "复制SDK中的进度图片..."
if [ -f "${LOGO_SRC_DIR}/logo_update_0.jpg" ]; then
cp "${LOGO_SRC_DIR}/logo_update_0.jpg" "${UPDATE_DIR}/logo_update.jpg"
echo -e "${GREEN}${NC} logo_update.jpg"
fi
for i in {1..5}; do
if [ -f "${LOGO_SRC_DIR}/logo_update_${i}.jpg" ]; then
cp "${LOGO_SRC_DIR}/logo_update_${i}.jpg" "${UPDATE_DIR}/"
echo -e "${GREEN}${NC} logo_update_${i}.jpg"
else
echo -e "${RED}${NC} 警告: 找不到 logo_update_${i}.jpg"
fi
done
else
echo -e "${RED}${NC} 错误: 找不到进度图片目录: ${LOGO_SRC_DIR}"
exit 1
fi
# 添加uboot升级脚本
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 ""