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 할 수 있는 최종 파일입니다.
- MAC OS에서 Build 오류 발생할 경우 다음 링크에서 확인하시기 바랍니다.
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·캠프에서 만든 콘텐츠가 아니며, 서울하드웨어해커톤에서 강의가 진행될 예정입니다.
'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 |