add system OTA process and change the version number to 1.0.0
This commit is contained in:
parent
1ec442c549
commit
141822dc2c
@ -488,16 +488,27 @@ int bootup_commands(void)
|
||||
char * skipupdate_env;
|
||||
int skipupdate = 0;
|
||||
|
||||
#if defined(CONFIG_OTA_SCRIPT_CMD) && !defined(CONFIG_FLASH_FW_ON_KEY_PRESS)
|
||||
printf("judeg misc command to flashing");
|
||||
return 0;
|
||||
#endif
|
||||
// 首先检查misc分区的OTA升级命令
|
||||
printf("Checking OTA commands from misc partition...\n");
|
||||
ret = ota_commands();
|
||||
if (ret == 0) {
|
||||
// ota_commands成功执行了升级,不应该返回到这里
|
||||
// 如果返回了,说明没有OTA升级命令,继续检查USB升级
|
||||
printf("No OTA upgrade command found, checking USB upgrade...\n");
|
||||
}
|
||||
|
||||
// OTA升级功能:移除错误的早期返回逻辑
|
||||
// #if defined(CONFIG_OTA_SCRIPT_CMD) && !defined(CONFIG_FLASH_FW_ON_KEY_PRESS)
|
||||
// printf("judeg misc command to flashing");
|
||||
// return 0;
|
||||
// #endif
|
||||
//printf("#####bootup_commands:\n");
|
||||
// OTA升级功能始终启用,忽略skipupdate环境变量
|
||||
skipupdate_env = env_get("skipupdate");
|
||||
if (skipupdate_env){
|
||||
skipupdate = simple_strtol(skipupdate_env, NULL, 0);
|
||||
printf("skip update fw... %d \n", skipupdate);
|
||||
return 0;
|
||||
printf("skipupdate env = %d (ignored for OTA support)\n", skipupdate);
|
||||
// return 0; // 注释掉,不再跳过升级检查
|
||||
}
|
||||
|
||||
|
||||
@ -675,7 +686,7 @@ int write_misc(char boot_success,char tries_remaining,char *command)
|
||||
memcpy(bcb.command,command,sizeof(bcb.command));
|
||||
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
sprintf(script_cmd,"sf erase 0x%lx 0x%x",(long)MISC_OFFSET,sizeof(bcb));
|
||||
sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
if (ret){
|
||||
@ -683,7 +694,7 @@ int write_misc(char boot_success,char tries_remaining,char *command)
|
||||
}
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
memcpy((char *)UBOOT_DOWN_ADDR,&bcb,sizeof(bcb));
|
||||
sprintf(script_cmd,"sf write 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
|
||||
sprintf(script_cmd,WRITE_CMD " 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
if (ret){
|
||||
@ -708,13 +719,13 @@ int ota_commands(void)
|
||||
|
||||
memset((char *)UBOOT_DOWN_ADDR,0,0x2000);
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
sprintf(script_cmd,"sf read 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
|
||||
sprintf(script_cmd,READ_CMD " 0x%lx 0x%lx 0x%x",(long)UBOOT_DOWN_ADDR,(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
if (ret){
|
||||
ret = -1;
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\
|
||||
sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
|
||||
(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
@ -743,7 +754,7 @@ int ota_commands(void)
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
//---- to clear misc----------------------
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\
|
||||
sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
|
||||
(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
@ -758,7 +769,7 @@ int ota_commands(void)
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
//---- to clear misc----------------------
|
||||
memset(script_cmd,0,sizeof(script_cmd));
|
||||
sprintf(script_cmd,"sf erase 0x%lx 0x%x",\
|
||||
sprintf(script_cmd,ERASE_CMD " 0x%lx 0x%x",\
|
||||
(long)MISC_OFFSET,sizeof(bcb));
|
||||
ret = run_command(script_cmd, 0);
|
||||
printf("ret=%d run command:%s\n",ret,script_cmd);
|
||||
|
||||
@ -0,0 +1,75 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# OTA升级结果检查脚本
|
||||
# 在系统启动时检查OTA升级是否成功
|
||||
#
|
||||
|
||||
TAG="S99ota_check:"
|
||||
|
||||
# 版本比较函数
|
||||
version_compare() {
|
||||
local ver1=$1
|
||||
local ver2=$2
|
||||
|
||||
# 简单的版本号比较(假设格式为 x.y.z)
|
||||
if [ "$ver1" = "$ver2" ]; then
|
||||
return 0 # 版本相同,升级成功
|
||||
else
|
||||
return 1 # 版本不同,升级失败
|
||||
fi
|
||||
}
|
||||
|
||||
ota_check() {
|
||||
# 检查是否存在升级信息文件
|
||||
if [ ! -f "/data/update/.update_info.txt" ]; then
|
||||
return 0 # 没有升级信息,跳过检查
|
||||
fi
|
||||
|
||||
echo "${TAG} 检查OTA升级结果..."
|
||||
|
||||
# 读取升级包版本号
|
||||
if [ -f "/data/update/.update_info.txt" ]; then
|
||||
version_update=$(grep "update_version" /data/update/.update_info.txt | cut -d'=' -f2)
|
||||
else
|
||||
echo "${TAG} 找不到升级包版本信息"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 读取系统当前版本号
|
||||
if [ -f "/etc/tniuds/system_info" ]; then
|
||||
version_sys=$(grep -E "^v|fw_version" /etc/tniuds/system_info | head -n1 | sed 's/fw_version=v//;s/^v//')
|
||||
else
|
||||
echo "${TAG} 找不到系统版本信息"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "${TAG} 升级包版本: ${version_update}"
|
||||
echo "${TAG} 系统版本: ${version_sys}"
|
||||
|
||||
# 比较版本号
|
||||
if version_compare "${version_update}" "${version_sys}"; then
|
||||
echo "${TAG} OTA升级成功!版本匹配: ${version_sys}"
|
||||
# 清理升级临时文件
|
||||
rm -rf /data/update
|
||||
rm -f /data/update.tar.gz
|
||||
rm -f /data/script-ota.ini
|
||||
echo "${TAG} 已清理升级临时文件"
|
||||
else
|
||||
echo "${TAG} OTA升级失败!版本不匹配"
|
||||
echo "${TAG} 期望版本: ${version_update}, 实际版本: ${version_sys}"
|
||||
# 保留升级文件用于调试
|
||||
echo "${TAG} 保留 /data/update 目录用于调试"
|
||||
fi
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start|"")
|
||||
ota_check
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@ -1,11 +1,4 @@
|
||||
|
||||
project_id=0004001
|
||||
|
||||
fw_user=bbq
|
||||
fw_time=20260330_100355
|
||||
fw_version=v1.0.0
|
||||
fw_time=20260402_000000
|
||||
fw_variant=user
|
||||
fw_version=v5.0.2.3
|
||||
|
||||
launcher_name=eplayer_single
|
||||
launcher_start_cmd=eplayer_single
|
||||
|
||||
project_id=demo_ld
|
||||
|
||||
@ -0,0 +1,31 @@
|
||||
#ifndef _HARDWARE_OTA_H_
|
||||
#define _HARDWARE_OTA_H_
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/**
|
||||
* @brief OTA系统升级函数
|
||||
*
|
||||
* 该函数执行完整的OTA升级流程:
|
||||
* 1. 解压升级包到/data/update目录
|
||||
* 2. 写入misc分区设置bootonce-bootloader标志
|
||||
* 3. 重启系统进入uboot执行升级脚本
|
||||
*
|
||||
* @param ota_path 升级包的完整路径 (例如: "/tmp/udisk/update.tar.gz")
|
||||
*
|
||||
* @return 0: 成功
|
||||
* -1: 参数错误
|
||||
* -2: 挂载失败
|
||||
* -3: 解压失败
|
||||
* -4: misc分区写入失败
|
||||
* -5: 重启失败
|
||||
*/
|
||||
extern int update_system(const char *ota_path);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _HARDWARE_OTA_H_ */
|
||||
BIN
sdk/X-AIOS-LT00-V1.0.4/tools/libhardware/lib/libhardware.a
Normal file
BIN
sdk/X-AIOS-LT00-V1.0.4/tools/libhardware/lib/libhardware.a
Normal file
Binary file not shown.
162
sdk/X-AIOS-LT00-V1.0.4/tools/make_ota_package.sh
Executable file
162
sdk/X-AIOS-LT00-V1.0.4/tools/make_ota_package.sh
Executable file
@ -0,0 +1,162 @@
|
||||
#!/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 ""
|
||||
Loading…
Reference in New Issue
Block a user