페이지 선택

WIFI FW OTA Update

여기서는 가장 단순한 방식의 OTA Demo를 구현하여 시험해 볼 것이다.

실제로 FOTA는 여러 조건에 맞추어 동작하도록 다양한 정책을 수립, 적용하게 될 것으로, 최종 구현은 한층더 복잡한 구조가 될 것이다.

 

 

 

1. helloOTA Demo를 생성

편의를 위해 helloworld 프로젝트를 demos 아래에 copy&paste한 다음 Rename하여 helloOTA로 바꾸어서 수정했다.

 

 

 

 

 

2. helloota.c와 makefile을 코딩 및 수정

 

Step1. helloota.c 코딩
#include “mxos.h”
#define app_log(M, …) MXOS_LOG(CONFIG_APP_DEBUG, “APP”, M, ##__VA_ARGS__)
#include “ota_server.h”
void ota_server_callback (OTA_STATE_E state, float progress)
{
    switch (state) {
    case OTA_LOADING:
        printf(“Progress: %f %%\r\n”, progress);
        break;
    case OTA_SUCCE:
        printf(“#####  Success, and will be rebooting\r\n”);
        break;
    case OTA_FAIL:
        printf(“Failed\r\n”);
        break;
    }
}
int main(void)
{
    /* Start mxos system functions according to mxos_config.h*/
    mxos_system_init();
    /* Output on debug serial port */
    app_log(“##################    OTA Start   #######################”);
    mos_sleep(5);
    ota_server_start(“http://192.168.0.2:8887/helloworld%40emw3080.ota.bin”, “e1683cf8a33f8ca2fad7361b5678ac12”,ota_server_callback);
 
    return 0;
}
 

// @를 대신하여 %40을 기입해줌 → 특수 문자 @가 있으면 URL Parser가 해석을 잘 못하는 것으로 보임.

// FW에 대한 MD5 해시 값(코드에서 빨강색 부분) 구하기 → certUtil -hashfile D:\OTA\helloworld@emw3080.ota.bin md5 → 아래 그림 참조
// certUitl은 윈도우즈에 내장된 기본 툴 중에 하나이다.
 
 
 
 
 
Step2.  ota_server_thread 수정 → 위치: ./mxos\libraries\daemons\ota_server\ota_server.c
  if ( ota_server_context->download_state.download_len == ota_server_context->download_state.download_begin_pos )
        {
            ota_server_log(“Status: %d”, httpHeader->statusCode);
            if( httpHeader->statusCode < 200 || httpHeader->statusCode >= 300 ){
                goto DELETE;
            }
            CRC16_Final( &crc_context, &crc16 );
            if( ota_server_context->ota_check.is_md5 == true ){
                Md5Final( &md5, (unsigned char *) md5_value );
                hex2str((uint8_t *)md5_value, 16, md5_value_string);
            }
            if ( memcmp( md5_value_string, ota_server_context->ota_check.md5, OTA_MD5_LENTH ) == 0 ){
                ota_server_progress_set(OTA_SUCCE);
                mxos_ota_switch_to_new_fw( ota_server_context->download_state.download_len, crc16 );
                ota_server_log(“ota success, system reboot!”);
                mxos_sys_reboot( );
            }else{
                ota_server_log(“OTA md5 check err, Calculation:%s, Get:%s”, md5_value_string, ota_server_context->ota_check.md5);
                ota_server_progress_set(OTA_FAIL);
            }
            goto DELETE;
        }
 
Step 3. makefile 수정
NAME := App_HelloOTA
$(NAME)_SOURCES := helloota.c  ← Source Code
GLOBAL_DEFINES := AOS_NO_WIFI
$(NAME)_COMPONENTS += daemons/ota_server  ← Library에서 사용한 Component

 

 

 

 

 

3. OTA 실행 확인

WIFI 모듈의 helloOTA(현재 FW) 실행 과정은 아래 로그파일의 내용에 따라 다음의 순으로 진행되는 것을 확인할 수 있다.

부팅 →  네트워크 접속 → 새로운 FW Download  → Flash Update(시간이 조금 걸림)  → 모듈 Rebooting → helloworld 실행(신규 FW)

 

 

전반부 실행 로그

⊕ 혹시 네트워크 문제일 것으로 보여 실행이 안되는 것 같다면 컴퓨터의 방화벽을 잠시 해제 해보도록 하자.

 

 

♦ 후반부 실행 로그

 

 

 

 

 

 

Viewed Page List