STM32H5 MCUboot 적용

By | 2026년 1월 4일
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 적용 단계

① 프로젝트 준비

  1. MCUboot 프로젝트: 부트로더 본체입니다. 0x0800 0000에서 시작합니다.
  2. 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. Python imgtool을 설치하고 **이미지에 서명하는 구체적인 방법**
2. STM32CubeIDE에서 **두 프로젝트(Bootloader + App)를 한 번에 관리하는 법** 3. **Option Bytes 설정**을 통한 하드웨어 보안 강화 방법 중 골라주세요.

답글 남기기