forked from xuos/xiuos
				
			move version rollback function for OTA to tool dir
This commit is contained in:
		
							parent
							
								
									4b40ae19dc
								
							
						
					
					
						commit
						2532ae43d4
					
				| 
						 | 
					@ -413,8 +413,8 @@ 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.*/
 | 
					    //跳转成功设置lastjumpflag为JUMP_SUCCESS_FLAG
 | 
				
			||||||
    app_clear_jumpflag();
 | 
					    app_clear_jumpflag();
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -123,7 +123,7 @@ static void UpdateApplication(void)
 | 
				
			||||||
    ota_info_t ota_info;  // 定义OTA信息结构体
 | 
					    ota_info_t ota_info;  // 定义OTA信息结构体
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 从Flash中读取OTA信息
 | 
					    // 从Flash中读取OTA信息
 | 
				
			||||||
    memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
 | 
					    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // 如果OTA升级状态为准备状态,且APP分区与download分区版本不同,才可以进行升级
 | 
					    // 如果OTA升级状态为准备状态,且APP分区与download分区版本不同,才可以进行升级
 | 
				
			||||||
    if((ota_info.status == OTA_STATUS_READY) && (ota_info.os.crc32 != ota_info.down.crc32)) 
 | 
					    if((ota_info.status == OTA_STATUS_READY) && (ota_info.os.crc32 != ota_info.down.crc32)) 
 | 
				
			||||||
| 
						 | 
					@ -233,7 +233,7 @@ static void BackupVersion(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
    status_t status;
 | 
					    status_t status;
 | 
				
			||||||
    ota_info_t ota_info;
 | 
					    ota_info_t ota_info;
 | 
				
			||||||
    memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
 | 
					    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    ota_info.status = OTA_STATUS_BACKUP;
 | 
					    ota_info.status = OTA_STATUS_BACKUP;
 | 
				
			||||||
    UpdateOTAFlag(&ota_info);
 | 
					    UpdateOTAFlag(&ota_info);
 | 
				
			||||||
| 
						 | 
					@ -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);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
| 
						 | 
					@ -268,19 +267,18 @@ 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));
 | 
					    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, 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();   
 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    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 +304,7 @@ static status_t UpdateOTAFlag(ota_info_t *ptr)
 | 
				
			||||||
    return status;
 | 
					    return status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#ifdef MCUBOOT_APPLICATION
 | 
					
 | 
				
			||||||
/*******************************************************************************
 | 
					/*******************************************************************************
 | 
				
			||||||
* 函 数 名: app_ota
 | 
					* 函 数 名: app_ota
 | 
				
			||||||
* 功能描述: 在app中通过命令来进行ota升级,该函数与升级的命令关联
 | 
					* 功能描述: 在app中通过命令来进行ota升级,该函数与升级的命令关联
 | 
				
			||||||
| 
						 | 
					@ -321,7 +319,7 @@ static void app_ota(void)
 | 
				
			||||||
    mcuboot.flash_init();
 | 
					    mcuboot.flash_init();
 | 
				
			||||||
    mcuboot.serial_init();
 | 
					    mcuboot.serial_init();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
 | 
					    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
 | 
				
			||||||
    ota_info.status = OTA_STATUS_DOWNLOADING;
 | 
					    ota_info.status = OTA_STATUS_DOWNLOADING;
 | 
				
			||||||
    UpdateOTAFlag(&ota_info);
 | 
					    UpdateOTAFlag(&ota_info);
 | 
				
			||||||
    size = mcuboot.download_by_serial(DOWN_FLAH_ADDRESS);
 | 
					    size = mcuboot.download_by_serial(DOWN_FLAH_ADDRESS);
 | 
				
			||||||
| 
						 | 
					@ -348,25 +346,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));
 | 
					    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, 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
 | 
				
			||||||
| 
						 | 
					@ -414,7 +411,7 @@ void ota_entry(void)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
                case 0x32:
 | 
					                case 0x32:
 | 
				
			||||||
                    mcuboot.flash_init();
 | 
					                    mcuboot.flash_init();
 | 
				
			||||||
                    memcpy(&ota_info, (const void *)FLAG_FLAH_ADDRESS,sizeof(ota_info_t));
 | 
					                    mcuboot.op_flash_read(FLAG_FLAH_ADDRESS, (void*)&ota_info, sizeof(ota_info_t));
 | 
				
			||||||
                    /* 此时APP分区还没有有效的固件,需要在bootloader下通过iap烧写出厂固件 */
 | 
					                    /* 此时APP分区还没有有效的固件,需要在bootloader下通过iap烧写出厂固件 */
 | 
				
			||||||
                    if((ota_info.os.size > APP_FLASH_SIZE) || (calculate_crc32(XIUOS_FLAH_ADDRESS, ota_info.os.size) != ota_info.os.crc32))
 | 
					                    if((ota_info.os.size > APP_FLASH_SIZE) || (calculate_crc32(XIUOS_FLAH_ADDRESS, ota_info.os.size) != ota_info.os.crc32))
 | 
				
			||||||
                    {
 | 
					                    {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue