revert "Add version rollback function for OTA"

This commit is contained in:
wgzAIIT 2023-05-08 13:59:41 +08:00
parent 4b40ae19dc
commit 33abc16c67
3 changed files with 19 additions and 19 deletions

View File

@ -413,8 +413,9 @@ void InitBoardHardware()
KPrintf("board init done.\n"); KPrintf("board init done.\n");
KPrintf("start kernel...\n"); KPrintf("start kernel...\n");
#ifdef MCUBOOT_APPLICATION #ifdef TOOL_USING_OTA
/* Clear the lastjumpflag after the jump is successful.*/ FLASH_Init();
app_clear_jumpflag(); //跳转成功将对应跳转失败标志设置
FLASH_DeInit();
#endif #endif
} }

View File

@ -244,7 +244,6 @@ static void BackupVersion(void)
ota_info.os.size = ota_info.bak.size; ota_info.os.size = ota_info.bak.size;
ota_info.os.crc32 = ota_info.bak.crc32; ota_info.os.crc32 = ota_info.bak.crc32;
ota_info.os.version = ota_info.bak.version; ota_info.os.version = ota_info.bak.version;
ota_info.lastjumpflag = 0xABABABAB;
strncpy(ota_info.os.description, ota_info.bak.description, sizeof(ota_info.bak.description)); strncpy(ota_info.os.description, ota_info.bak.description, sizeof(ota_info.bak.description));
UpdateOTAFlag(&ota_info); UpdateOTAFlag(&ota_info);
} }
@ -269,7 +268,8 @@ static void BootLoaderJumpApp(void)
ota_info_t ota_info; ota_info_t ota_info;
mcuboot.flash_init(); mcuboot.flash_init();
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t)); memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
if (ota_info.lastjumpflag != 0x00000000)
if(ota_info.lastjumpflag == JUMP_FAILED_FLAG)
{ {
mcuboot.print_string("\r\n------Bootloader false, begin backup!------\r\n"); mcuboot.print_string("\r\n------Bootloader false, begin backup!------\r\n");
BackupVersion(); BackupVersion();
@ -277,10 +277,9 @@ static void BootLoaderJumpApp(void)
} }
else else
{ {
ota_info.lastjumpflag = 0xABABABAB; ota_info.lastjumpflag = JUMP_FAILED_FLAG;
UpdateOTAFlag(&ota_info); UpdateOTAFlag(&ota_info);
} }
mcuboot.flash_deinit(); mcuboot.flash_deinit();
mcuboot.op_jump(); mcuboot.op_jump();
} }
@ -306,7 +305,7 @@ static status_t UpdateOTAFlag(ota_info_t *ptr)
return status; return status;
} }
#ifdef MCUBOOT_APPLICATION
/******************************************************************************* /*******************************************************************************
* : app_ota * : app_ota
* : app中通过命令来进行ota升级, * : app中通过命令来进行ota升级,
@ -348,25 +347,24 @@ static void app_ota(void)
} }
SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),ota, app_ota, ota function); SHELL_EXPORT_CMD(SHELL_CMD_PERMISSION(0)|SHELL_CMD_TYPE(SHELL_TYPE_CMD_FUNC)|SHELL_CMD_PARAM_NUM(0),ota, app_ota, ota function);
/******************************************************************************* /*******************************************************************************
* : app_clear_jumpflag * : app_clear_jumpflag
* : app成功后,app中调用将lastjumpflag重置为0x00000000 * : app成功后,app中调用将lastjumpflag重置为0XCDCDCDCD
* : * :
* : * :
*******************************************************************************/ *******************************************************************************/
void app_clear_jumpflag(void) void app_clear_jumpflag(void)
{ {
mcuboot.flash_init(); mcuboot.flash_init();
//跳转成功将对应跳转失败标志清零 //跳转成功设置lastjumpflag为JUMP_SUCCESS_FLAG
ota_info_t ota_info; ota_info_t ota_info;
memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t)); memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
ota_info.lastjumpflag = 0x00000000; ota_info.lastjumpflag = JUMP_SUCCESS_FLAG;
UpdateOTAFlag(&ota_info); UpdateOTAFlag(&ota_info);
mcuboot.flash_deinit(); mcuboot.flash_deinit();
} }
#endif
/******************************************************************************* /*******************************************************************************
* : ota_entry * : ota_entry
@ -409,7 +407,7 @@ void ota_entry(void)
switch(ch2) switch(ch2)
{ {
case 0x31: case 0x31:
BootLoaderJumpApp(); mcuboot.op_jump();
break; break;
case 0x32: case 0x32:
@ -427,7 +425,7 @@ void ota_entry(void)
} }
mcuboot.flash_deinit(); mcuboot.flash_deinit();
BootLoaderJumpApp(); mcuboot.op_jump();
break; break;
case 0x33: case 0x33:
@ -438,7 +436,7 @@ void ota_entry(void)
} }
else else
{ {
BootLoaderJumpApp(); mcuboot.op_jump();
} }
} }
} }

View File

@ -17,6 +17,9 @@
#include "flash_ops.h" #include "flash_ops.h"
#define JUMP_FAILED_FLAG 0XABABABAB
#define JUMP_SUCCESS_FLAG 0XCDCDCDCD
typedef enum { typedef enum {
OTA_STATUS_IDLE = 0, // 空闲状态,没有进行OTA升级 OTA_STATUS_IDLE = 0, // 空闲状态,没有进行OTA升级
OTA_STATUS_READY, // 准备状态,可以进行OTA升级 OTA_STATUS_READY, // 准备状态,可以进行OTA升级
@ -44,13 +47,11 @@ typedef struct {
firmware_t bak; // Bakup分区属性信息 firmware_t bak; // Bakup分区属性信息
firmware_t down; // Download分区属性信息 firmware_t down; // Download分区属性信息
uint32_t status; // 升级状态,取值来自于ota_status_t类型 uint32_t status; // 升级状态,取值来自于ota_status_t类型
uint32_t lastjumpflag; // bootloaer跳转失败的标志,bootloader里置0xABABABAB,跳转成功后在应用里置0x00000000 uint32_t lastjumpflag; // bootloaer跳转失败的标志,bootloader里置0xABABABAB,跳转成功后在应用里置0xCDCDCDCD
uint32_t reserve[2]; // 保留字段 uint32_t reserve[2]; // 保留字段
uint8_t error_message[128]; // 错误信息,最多128个字符 uint8_t error_message[128]; // 错误信息,最多128个字符
} ota_info_t; } ota_info_t;
#ifdef MCUBOOT_APPLICATION
void app_clear_jumpflag(void); void app_clear_jumpflag(void);
#endif
void ota_entry(void); void ota_entry(void);
#endif #endif