nRF Connect SDK

By | 2026년 1월 3일
Table of Contents

nRF Connect SDK

nRF Connect for VS Code

확장에서 nRF Connect 를 찾아 설치합니다.

Toolchain, SDK 설치

nRF Connect 탭을 선택 후 Toolchain, SDK 를 각각 설치합니다.

nRF Connect SDK(NCS)를 사용하여 MCUboot(Bootloader)TF-M(Trusted Firmware-M)을 결합하는 것은 보안 부팅과 신뢰할 수 있는 실행 환경(TEE)을 구축하는 가장 표준적인 방법입니다.

이 가이드는 nRF5340 또는 nRF9160과 같이 Arm TrustZone을 지원하는 기기를 기준으로 작성되었습니다.


nRF Connect SDK: MCUboot + TF-M 통합 가이드

이 문서는 보안 부팅(MCUboot)과 하드웨어 격리 보안(TF-M)을 활성화하여 보안이 강화된 애플리케이션을 빌드하는 절차를 설명합니다.

1. 기본 개념 이해

  • MCUboot: 시스템의 Secure Boot을 담당합니다. 이미지 검증 및 업데이트(OTA) 기능을 제공합니다.
  • TF-M: Cortex-M 하드웨어의 TrustZone을 사용하여 시스템을 Secure WorldNon-Secure World로 분리합니다. 키 저장소, 암호화 가속 등을 안전하게 관리합니다.

2. 프로젝트 설정 (prj.conf)

가장 먼저 프로젝트의 설정 파일에서 TF-M과 MCUboot 기능을 활성화해야 합니다. nRF Connect SDK에서는 단순한 Kconfig 설정만으로도 복잡한 빌드 체인을 자동으로 구성해 줍니다.

# TF-M 활성화
CONFIG_TFM_BOARD=y
CONFIG_TFM_PROFILE_TYPE_NOT_SET=y

# MCUboot 활성화
CONFIG_BOOTLOADER_MCUBOOT=y

# 보안을 위해 Non-secure 애플리케이션으로 빌드
CONFIG_TRUSTED_EXECUTION_NONSECURE=y

3. 디바이스 트리(Devicetree) 설정

TrustZone을 사용하면 메모리 맵이 Secure 영역과 Non-Secure 영역으로 나뉩니다. 일반적으로 nrf5340dk_nrf5340_cpuapp_ns와 같이 뒤에 _ns가 붙은 보드 타겟을 선택하면 SDK가 자동으로 파티션을 할당합니다.

플래시 메모리 구조

MCUboot와 TF-M이 함께 실행될 때의 일반적인 구조는 다음과 같습니다:

  1. MCUboot: 플래시의 맨 처음에 위치 (Secure)
  2. TF-M: MCUboot 다음 섹션에 위치 (Secure)
  3. App: TF-M 이후의 영역에 위치 (Non-Secure)

4. 코드 구현 (Main Application)

TF-M이 활성화된 환경에서 Non-Secure 애플리케이션은 PSA(Platform Security Architecture) API를 통해 보안 서비스에 접근합니다.

#include <zephyr/kernel.h>
#include <psa/crypto.h>  // TF-M 보안 API

int main(void) {
    psa_status_t status;

    // PSA Crypto API 초기화
    status = psa_crypto_init();
    if (status != PSA_SUCCESS) {
        printk("PSA Crypto init failed! (%d)\n", status);
        return -1;
    }

    printk("TF-M & MCUboot 기반 보안 애플리케이션 시작됨\n");
    return 0;
}

5. 빌드 및 플래싱 (CLI 기준)

빌드 시 반드시 Non-Secure 타겟(_ns)을 지정해야 합니다.

# nRF5340 DK 기준 빌드 명령어
west build -b nrf5340dk_nrf5340_cpuapp_ns -- -DCONFIG_BOOTLOADER_MCUBOOT=y -DCONFIG_TFM_BOARD=y

# 플래싱 (전체 이미지 통합 기록)
west flash

빌드가 완료되면 build/zephyr 디렉토리에 다음과 같은 파일이 생성됩니다:

  • merged.hex: MCUboot + TF-M + App이 모두 합쳐진 전체 이미지
  • app_update.bin: MCUboot를 통해 업데이트할 때 사용하는 서명된 앱 이미지

6. 주요 주의 사항

  1. 이미지 서명: MCUboot는 서명된 이미지만 실행합니다. 개발 단계에서는 기본 키를 사용하지만, 양산 시에는 반드시 west.yml이나 프로젝트 설정을 통해 별도의 .pem 키를 지정해야 합니다.
  2. 보드 타겟: 반드시 보드 이름 끝에 _ns (Non-Secure)가 붙은 것을 선택하세요. 그렇지 않으면 TF-M과 충돌이 발생합니다.
  3. 연속성: MCUboot가 TF-M을 먼저 부팅하고, TF-M이 초기화를 마친 후 애플리케이션(NS)으로 제어권을 넘깁니다.

답글 남기기