본문 바로가기

05_Toolkit/AWS_IoT

Ex1. ③ AWS IOT APPLICATION


Ex1. ③ AWS IOT APPLICATION

( 태그 : AWS_IoT_FreeRTOS, AWS_IoT )


1. ‘Application for AWS Service’ Project

  • SBSFU와 User Application이 포함된 Image를 생성합니다.
  • User Application은 STM32 MCU 보드를 AWS IoT Core에 연결하고 IoT Things로 등록합니다.
  • Post Build 단계에서 FW Image와 Application에 대한 Header와 encryption된 binary를 생성합니다.


2. Build ‘Application for AWS Service’ Project

  • B-L4S5I-IOT01_aws_demos’ project는 여러가지 기능으로 Build 할 수 있습니다.
  • Application 기능은 Header 파일의 define 문으로 사용하며 1개의 기능만 활성화 하여야 합니다.
    • Application/AWS/config_files/aws_demo_config.h
  • 실습에서는 2개의 기능에 대해 진행 합니다.
    • CONFIG_MQTT_DEMO_ENABLED : AWS IoT Core에 연결하고 MQTT 메시지를 송/수신
    • CONFIG_UPDATE_DEMO_ENABLED : OTA Update
  • Header 파일의 CONFIG_MQTT_DEMO_ENABLED를 define으로 선언해 줍니다.


    //#define CONFIG_OTA_UPDATE_DEMO_ENABLED
    #define CONFIG_MQTT_DEMO_ENABLED
  • Application Image는 검증을 위한 Header 파일과 Image 파일 영역이 구분됩니다. Postbuild 단게에서 검증 Header 파일과 Image 파일을 하나의 Binary로 통합하는 작업을 진행합니다.
  • Binary 통합 작업은 STM32 CubeProgrammer의 CLI 기능을 사용합니다.

  • Project를 Build 합니다. Build Project를 실행합니다. 이전 Build 산출물을 제거하고 싶으면 Clean Project를 먼저 진행한 후 Build Project를 실행합니다.


  • SBSFU와 userApp이 ‘B-L4S5I-IOT01_aws_demos.bin’ 파일로 Build 됩니다.


  • B-L4S5I-IOT01_aws_demos.bin 파일이 저장되는 위치는 ‘STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/Cloud/aws_demos/STM32CubeIDE/PostBuild/’ 입니다. Postbuild 처리가 된 binary 파일이 Programming 할 수 있는 최종 파일입니다.


3. Programming ‘Application for AWS Service’ Project

  • CSTM32CubeProgrammer 우축 상단의 Connect 버튼을 눌러 디바이스를 연결 합니다.
  • Erasing & programming Tab을 선택합니다.
  • SBSFU와 aws_demo application가 포함된 PostBuild folder에 있는 SBSFU_B-L4S5I-IOT01_aws_demos.bin 파일로 Programming 합니다. 


  • Programming 시작 주소는 기본값인 0x08000000 입니다. 변경하지 않고 유지합니다.

  • Programming option은 필요에 따라 선택합니다.

    • Verfiy programming 과 Run after programming을 선택합니다.
  • Start Programming 버튼을 클릭하여 bin 파일을 writing 합니다.

  • Programming이 완료되면 MCU 보드의 리셋 버튼으로 재 부팅 합니다.

  • Terminal 프로그램을 통해 로그를 확인할 수 있습니다.

    • SBOOT가 유효한 Header Signature를 찾아 Application을 Launch 하는 것을 확인할 수 있습니다.
= [SBOOT] System Security Check successfully passed. Starting...
= [FWIMG] Slot #0 @: 8105000 / Slot #1 @: 8036000 / Swap @: 81d5000

======================================================================
=              (C) COPYRIGHT 2017 STMicroelectronics                 =
=                                                                    =
=              Secure Boot and Secure Firmware Update                =
======================================================================

= [SBOOT] SECURE ENGINE INITIALIZATION SUCCESSFUL
= [SBOOT] STATE: CHECK STATUS ON RESET
          INFO: A Reboot has been triggered by a Hardware reset!
          Consecutive Boot on error counter = 0
          INFO: Last execution detected error was:No error. Success.
= [SBOOT] STATE: CHECK NEW FIRMWARE TO DOWNLOAD
= [SBOOT] STATE: CHECK KMS BLOB TO INSTALL
= [SBOOT] STATE: CHECK USER FW STATUS
= [SBOOT] LOADING CERTS FROM SECURE ENGINEOK
= [SBOOT] Verifying the Certificate chain... OK
= [SBOOT] Verify Header Signature... OK
          A valid FW is installed in the active slot - version: 1
= [SBOOT] STATE: VERIFY USER FW SIGNATURE
= [SBOOT] CHECKING IMAGE STATE
=         SFU_IMG_Check/lab1/imagestate Image State = 1
= [SBOOT] IMAGE STATE OK
= [SBOOT] STATE: EXECUTE USER FIRMWARE0 526 [Tmr Svc] WiFi module initialized.
1 532 [Tmr Svc] Device Certificate (DER), size = 401
2 537 [Tmr Svc] Device Certificate (PEM), size = 600
-----BEGIN CERTIFICATE-----
MIIBjTCCATSgAwIBAgILAgmQzSAhzCJbATkwCgYIKoZIzj0EAwIwTzELMAkGA1UE
BhMCTkwxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBudjEgMB4GA1UEAwwX
U1RNIFNUU0FGRS1BIFBST0QgQ0EgMDEwIBcNMjAwMjI2MDAwMDAwWhgPMjA1MDAy
MjYwMDAwMDBaMEYxCzAJBgNVBAYTAkZSMRswGQYDVQQKDBJTVE1pY3JvZWxlY3Ry
b25pY3MxGjAYBgNVBAMMEVNUU0FGRS1BMTEwIEVWQUwyMFkwEwYHKoZIzj0CAQYI
KoZIzj0DAQcDQgAEyly2accEmT8ACQldcLB4R+gms+KkNmZlcpUwRKIruHB0tfBq
INXwoaU62tDBL36lccjcKXhvZfBypmiCf006mDAKBggqhkjOPQQDAgNHADBEAiAQ
eoU/91uTOzhsOgeVHoKRniBkCKPremzIkf/cXD7eegIgDko6cHiZMmzLVkb+0DJT
OYf+siyvGciYPio6Qz6+la8=
-----END CERTIFICATE-----
3 594 [Tmr Svc] WiFi Firmware Version C3.5.2.5.STM.
4 605 [Tmr Svc] WiFi failed to connect to AP .
5 610 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice.
...............6 30622 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice and configure WiFi.
7 60631 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice and configure WiFi.
8 90640 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice and configure WiFi.
9 120649 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice and configure WiFi.
10 150658 [Tmr Svc] Connect to softAP ConfigureMe using password awsiotdevice and configure WiFi.

4. Copy Certificate

  • 로그에 STM32 MCU 보드의 디바이스 인증서가 출력 됩니다.
  • 이 인증서는 STSAFE A110의 Root CA로 부터 생성된 X.509 표준 인증서 이며 PEM format으로 출력 되었습니다.
-----BEGIN CERTIFICATE-----
MIIBjTCCATSgAwIBAgILAgmQzSAhzCJbATkwCgYIKoZIzj0EAwIwTzELMAkGA1UE
BhMCTkwxHjAcBgNVBAoMFVNUTWljcm9lbGVjdHJvbmljcyBudjEgMB4GA1UEAwwX
U1RNIFNUU0FGRS1BIFBST0QgQ0EgMDEwIBcNMjAwMjI2MDAwMDAwWhgPMjA1MDAy
MjYwMDAwMDBaMEYxCzAJBgNVBAYTAkZSMRswGQYDVQQKDBJTVE1pY3JvZWxlY3Ry
b25pY3MxGjAYBgNVBAMMEVNUU0FGRS1BMTEwIEVWQUwyMFkwEwYHKoZIzj0CAQYI
KoZIzj0DAQcDQgAEyly2accEmT8ACQldcLB4R+gms+KkNmZlcpUwRKIruHB0tfBq
INXwoaU62tDBL36lccjcKXhvZfBypmiCf006mDAKBggqhkjOPQQDAgNHADBEAiAQ
eoU/91uTOzhsOgeVHoKRniBkCKPremzIkf/cXD7eegIgDko6cHiZMmzLVkb+0DJT
OYf+siyvGciYPio6Qz6+la8=
-----END CERTIFICATE-----
  • 인증서의 세부 내용은 다음과 같습니다.

    • Common Name : STSAFE-A110 EVAL 2
    • Issued By : STMicroelectronics nv
    • Issuing Certificate : STM STSAFE-A PROD CA 01
    • Serial Number : 020990CD2021CC225B0139
    • Signature : ecdsa-with-SHA256
    • Valid From : 00:00:00 26 Feb 2020
    • Valid To : 00:00:00 26 Feb 2050
  • 로그에 출력되는 인증서를 복사하여 Device Certificate로 저장 합니다 : stm32-iot-node-cert.pem

  • stm32-iot-node-cert.pem 파일은 AWS에 연결할 때 Device의 인증서로 등록하여 사용합니다.

Build Error Fix

aws_demo.bin Build Error - MAC OS

../../Inc/main.h:36:10: fatal error: stm32l475e_iot01_accelero.h: No such file or directory

  • 실습 Package 파일이 Project로 정상적으로 import 되지 않은 것일 수 있습니다. Project 파일 구성에서 아래의 붉은 박스의 파일들이 포함되어 있는지 확인 합니다.


  • 파일들이 포함되어 있지 않다면 project 구성 파일이 실험 Package를 복사하는 과정에서 정상적으로 업데이트 되지 않은 경우 입니다.
  • x-cube-aws-sensordemo/sensor-demo-src/STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/Cloud/aws_demos/STM32CubeIDE 폴더에 있는 .cproject 파일과 .project 파일을 복사합니다.
    • STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/Cloud/aws_demos/STM32CubeIDE 폴더에 있는 .cproject와 .project를 파일에 overwrite 합니다.
  • STM32CubeIDE에서 B-L4S5l-IOT01_aws_demos 프로젝트를 새로 고침하여 변경 사항을 반영 합니다.

postbuild.sh: Permission denied

  • STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/BootLoader_STSAFE/2_Images_SECoreBin/STM32CubeIDE/postbuild.sh 파일의 실행 권한을 설정 합니다.
chmod +x postbuild.sh

postbuild.sh : ImportError: No module named Cryptodome.Cipher

  • postbuild.sh에서 실행하는 prepareimage.py는 requirements.txt에 정의된 pycryptodome, pycryptodomex, ecdsa, pyelftools, numpy, lief를 사용하는데 이중 pycryptodomex library가 정상적으로 import 되지 않는 문제입니다.
  • 다음과 같이 python을 venv에서 실행되도록 환경을 구성 합니다.
  • 수정 파일 : STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/BootLoader_STSAFE/2_Image_SECoreBin/STM32CubeIDE/postbuild.sh

  • 변경 전

prepareimage=$basedir"/win/prepareimage/prepareimage.exe"
uname  | grep -i -e windows -e mingw > /dev/null 2>&1
if [ $? = 0 ] && [  -e "$prepareimage" ]; then
  echo "prepareimage with windows executeable"
  export PATH=$basedir"/win/prepareimage":$PATH > /dev/null 2>&1
  cmd=""
  prepareimage="prepareimage.exe"
  bigelftuner=$basedir"/win/bigelftuner.exe"
else
  # line for python
  echo "prepareimage with python script"
  prepareimage=$basedir"/prepareimage.py"
  bigelftuner=$basedir"/bigelftuner.py"
  cmd="python"
fi
  • 변경 후
prepareimage=$basedir"/win/prepareimage/prepareimage.exe"
uname  | grep -i -e windows -e mingw > /dev/null 2>&1
if [ $? = 0 ] && [  -e "$prepareimage" ]; then
  echo "prepareimage with windows executeable"
  export PATH=$basedir"/win/prepareimage":$PATH > /dev/null 2>&1
  cmd=""
  prepareimage="prepareimage.exe"
  bigelftuner=$basedir"/win/bigelftuner.exe"
else
  # add venv
  echo "run python3 on venv"
  python3 -m venv venv
  source venv/bin/activate
  pip3 install -r $basedir/requirements.txt
  # line for python
  echo "prepareimage with python script"
  prepareimage=$basedir"/prepareimage.py"
  bigelftuner=$basedir"/bigelftuner.py"
  cmd="python3"
fi

postbuild.sh : STM32 Programmer CLI 실행 오류

  • STM32 CubeProgrammer 설치시 프로그램 path가 변경되었다면 postbuild.sh를 수정해 주어야 합니다.
  • postbuild.sh : STM32CubeExpansion_Cloud_AWS_V2.0.0/Projects/B-L4S5I-IOT01A/Applications/BootLoader_STSAFE/2_Image_SECoreBin/STM32CubeIDE 폴더에 위치 합니다.

  • 실습 0-2에서 설치한 CubeProgrammer의 CLI 프로그램의 path를 확인하여 수정 합니다.

  • Windows OS : PATH=“C:\Program Files\STMicroelectronics\STM32Cube\STM32CubeProgrammer\bin”

  • MAC OS : programmertool="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI"

if [ $? = 0 ]; then
          # Set to the default installation path of the Cube Programmer tool
          # If you installed it in another location, please update PATH.
          PATH="C:\\Program Files\\STMicroelectronics\\STM32Cube\\STM32CubeProgrammer\\bin":$PATH > /dev/null 2>&1
          programmertool="STM32_Programmer_CLI.exe"
        else
          which STM32_Programmer_CLI > /dev/null
          if [ $? = 0 ]; then
            programmertool="STM32_Programmer_CLI"
          else
            programmertool="/Applications/STMicroelectronics/STM32Cube/STM32CubeProgrammer/STM32CubeProgrammer.app/Contents/MacOs/bin/STM32_Programmer_CLI"
          fi
        fi




Credits


Korean version   

Jongwoo Lee (rainny@)

Sejun Kim (sejun@)

Albert Lee (sehyul@)


Original Contents Author

Vanitha Ramaswami (rvanitha@)


© 2020 Amazon Web Services, Inc. or its Affiliates. All rights reserved.                                           

메이커스페이스 G·캠프에서 만든 콘텐츠가 아니며, 서울하드웨어해커톤에서 강의가 진행될 예정입니다.   

https://master.d2s409snhlt74e.amplifyapp.com/                                                                         

'05_Toolkit > AWS_IoT' 카테고리의 다른 글

Ex1. ⑤ SENSOR DATA PUBLISH  (0) 2020.11.26
Ex1. ④ AWS IOT CORE 연결  (0) 2020.11.26
Ex1. ② STM SECURE BOOT  (0) 2020.11.26
Ex1. ① STSAFE PROVISIOING  (0) 2020.11.26
Ex1. PREPARATION ON BOTH DEVICE AND AWS PLATFORM  (0) 2020.11.26

 
90, Digital-ro 9-gil, Geumcheon-gu, Seoul, Republic of Korea
https://seoulhackathon.tistory.com/   
mail: 12000@12000.co Tel : +82-2-2135-5280
Copyright 2021 by Seoul Businsss Agency. All Rights Reserved. (Powered by Tistory)
Hackathon | Recent Articles +more
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Hackathon | News +more
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Hackathon | Schedule +more
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Hackathon | Workshops    more
Hackathon | Toolkit    more
Hackathon | Video Tutorial    more
Hackathon | Hackathon +more
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Hackathon | Others +more
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Previous Hackathon    more

programs run by :

90, Digital-ro 9-gil, Geumcheon-gu, Seoul, Republic of Korea https://seoulhackathon.tistory.com
mail: 12000@12000.co Tel : +82-2-2135-5280