Table of Contents
STM32H5 MCUboot 적용
STM32H5 시리즈에서 MCUboot를 적용하는 것은 단순한 점프 코드 작성을 넘어, 업계 표준의 보안 부트스트랩을 구축하는 과정입니다. STM32H563ZI는 이를 위해 OEM-iROT(Immutable Root of Trust) 기능을 제공하지만, 여기서는 가장 대중적인 STM32Cube 확장 패키지(X-CUBE-SEC-BOOT) 방식의 개념을 중심으로 설명해 드릴게요.
1. MCUboot의 기본 구조
MCUboot는 Flash를 Slot이라는 단위로 관리합니다.
- Slot 0 (Primary Slot): 실제 실행되는 애플리케이션 위치.
- Slot 1 (Secondary Slot): 새로운 펌웨어가 다운로드되어 대기하는 위치.
- Scratch Pad: 두 슬롯의 내용을 교체(Swap)할 때 사용하는 임시 공간.
2. MCUboot 적용 단계
① 프로젝트 준비
- MCUboot 프로젝트: 부트로더 본체입니다.
0x0800 0000에서 시작합니다. - Application 프로젝트: 실제 기능을 수행하는 앱입니다. MCUboot가 지정한 Slot 0 주소에서 시작하도록 설정해야 합니다.
② 링커 스크립트 수정 (Application)
MCUboot는 펌웨어 앞에 Image Header를 붙입니다. 따라서 앱의 시작 주소는 Slot 0 시작 주소 + Header 크기가 되어야 합니다. (보통 Header는 0x400 혹은 0x1000 바이트)
/* STM32H563 애플리케이션 예시 (Header가 0x400인 경우) */
MEMORY
{
FLASH (rx) : ORIGIN = 0x08020400, LENGTH = 895K
}
③ 이미지 서명 (Signing)
MCUboot는 인증되지 않은 코드를 실행하지 않습니다. 컴파일된 .bin 파일에 키(Key)를 이용해 서명을 하고 헤더를 입혀야 합니다.
- 사용 도구:
imgtool(Python 기반 유틸리티) - 명령어 예시:
imgtool sign --key root-rsa2048.pem --header-size 0x400 --align 8 --version 1.0.0 --slot-size 0x200000 app.bin app_signed.bin
--- ### 3. STM32H5 특화 기능: ST-iROT 활용 STM32H5 시리즈는 하드웨어적으로 고정된 부트로더를 활성화할 수 있습니다. 1. **STM32CubeProgrammer**를 엽니다. 2. **OB (Option Bytes)** 메뉴로 들어갑니다. 3. **Product State**를 <code>Open에서Provisioning단계로 변경하여 보안 부트 설정을 적용할 수 있습니다. 4. H563의 경우 **TZEN (TrustZone)** 활성화 여부에 따라 메모리 격리 방식이 달라지므로 설계 시 주의가 필요합니다. --- ### 4. 구현 시 핵심 체크리스트 * **Vector Table Relocation:** 앱 시작 시SCB->VTOR값을 반드시0x08020400과 같이 실제 앱 시작점으로 업데이트해야 합니다. * **Swap 모드 결정:** 업데이트 시 두 영역을 통째로 바꿀 것인지(Swap), 아니면 새 영역으로 덮어쓸 것인지(Overwrite) MCUboot 설정에서 정해야 합니다. * **공유 메모리:** 부트로더와 앱 간에 정보를 전달해야 한다면(예: 업데이트 요청 플래그), SRAM의 특정 구역을 보존 구역으로 설정해야 합니다. --- ### 추천하는 접근 방식 처음부터 모든 것을 빌드하기보다는 **STM32CubeH5 펌웨어 패키지** 안에 포함된 예제를 활용하는 것이 가장 빠릅니다. * **경로:**STM32Cube\Repository\STM32Cube_FW_H5_VX.X.X\Projects\NUCLEO-H563ZI\Applications\ROT\ROT_Appli**다음으로 어떤 부분을 깊게 파볼까요?** 1. Pythonimgtool을 설치하고 **이미지에 서명하는 구체적인 방법** 2. STM32CubeIDE에서 **두 프로젝트(Bootloader + App)를 한 번에 관리하는 법** 3. **Option Bytes 설정**을 통한 하드웨어 보안 강화 방법 중 골라주세요.