163 lines
4.9 KiB
Bash
Executable File
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 ""
|