コラム

Column

ご挨拶

NXP® MIMXRT1060-EVKCで始めるZephyr®と MCUbootによるセキュアブート

Wind River コラム 特集

NXP® MIMXRT1060-EVKCで始めるZephyr®とMCUbootによるセキュアブート

セキュアブートとは

セキュアブートは、機器の起動時に読み込むソフトウェアの 署名やハッシュを検証して正規のコードだけを実行する仕組み です。
不正な改ざんやマルウェアの混入を防ぎ、システムを安全に立ち上げるための重要なセキュリティ機能です。

Zephyrとは

Zephyrは、Linux Foundationが主導する オープンソースのリアルタイムOS(RTOS) です。
軽量で省リソースながら、Bluetooth®やWi-Fi®などの通信機能、セキュリティ機能、デバイスドライバを幅広くサポートしており、マイクロコントローラからIoT機器まで幅広い組込み開発に利用できます。

MCUbootとは

MCUbootは、マイクロコントローラ向けに開発された オープンソースのセキュアブートローダ です。
アプリケーションの署名検証や暗号化をサポートし、ファームウェアの安全な更新やロールバック機能を提供することで、IoT機器や組込みシステムの信頼性とセキュリティを高めます。

開発環境

システム構成要素 詳細
ホストOS Windows® 11
ターゲットOS Zephyr v4.2.0
ターゲットボード MIMXRT1060-EVKC

ボード外観と接続

画像上部のUSBケーブル : DEBUG ポートとPCを接続
画像下部のUSBケーブル : USB OTG ポートとPCを接続

環境構築

パッケージマネージャを使ってホスト環境にいくつかの依存関係をインストール

winget install Kitware.CMake Ninja-build.Ninja oss-winget.gperf python Git.Git oss-winget.dtc wget 7zip.7zip

7zip.exeのパスを環境変数に設定してください。

その他ツールをインストール

  1. TeraTerm のターミナルプログラムをインストール
  2. MCUXpresso IDE をインストール
  3. MCUXpresso Secure Provisioning Tool (以後、SECと記載)をインストール
    • NXP® のウェブサイト にアクセスし、Windows 用の SEC インストーラをダウンロードします。
    • MCUXpresso_Secure_Provisioning_<version>.exe インストーラをダブルクリックしてインストールを開始します。

Zephyr MCUBoot デモを構築

0) 事前準備

コマンドプロンプトを起動して以下を実行してください。

# 新しい仮想環境を作成する
cd %HOMEPATH%
python -m venv zephyrproject\.venv

# 仮想環境を有効化する
zephyrproject\.venv\Scripts\activate.bat

# west をインストールする
pip install west

# Zephyr のソースコードを取得する
west init zephyrproject
cd zephyrproject
west update

# Zephyr CMake パッケージをエクスポートする
west zephyr-export

# west パッケージを使って Python® の依存関係をインストールする
west packages pip --install

# Zephyr SDK をインストールする
west sdk install

# mcumgr が未導入なら(Python venv でも可)
pip install mcumgr

# 署名鍵(ここでは RSA-2048)
imgtool keygen -k bootloader\mcuboot\root-rsa-2048.pem -t rsa-2048

1) MCUboot(ブートローダ)単体をビルド&書き込み

MCUbootをビルド

west build -p always -b mimxrt1060_evk/mimxrt1062/qspi -d build-mcuboot bootloader\mcuboot\boot\zephyr

MCUbootのセキュアブート書き込み手順(SEC 使用)

  1. ターゲットをSerial Downloaderモードに切り替え
    • MIMXRT1060-EVK の ブートスイッチ を Serial Downloader (USB) に設定
    • USB (DEBUG USB) を PC に接続
    • デバイスマネージャで HID デバイス / COM ポートが認識されていることを確認
  2. SEC プロジェクトを作成
    • SEC を起動 → New Workspace を作成
    • 「Processor」は「MIMXRT1060」を選択
    • 「Boot」は「Authenticated(HAB)」を選択
  3. 鍵作成
    • 「PKI management」タブで「Generate Kyes」ボタンを押下して「Authentication keys」を作成
  4. ビルドイメージ作成
    • 「Source executable image」は、MCUbootのビルド結果が格納されているフォルダパスを設定
      • 例:「..\zephyrproject\build-mcuboot\zephyr\zephyr.elf」)
    • 「Authnetication key」は、「PKI management」タブで作成した鍵を任意で選択(例:SRK1:IMG1_1 + CSF1_1)
    • 「Build image」ボタンを押下してビルド実行
  5. イメージ書き込み
    • 「Write image」タブで「Write image」ボタンを押下して書き込みを実行
  6. ターゲットを通常ブートモードに切り替え
    • EVK のブートスイッチを FlexSPI NOR Boot に戻す
    • 再起動すると、MCUboot が起動し署名検証を実行 → 有効なアプリのみ起動
  7. 動作確認
    • シリアルターミナル(115200bps)で EVK をモニタ(以下のようなログが出ていれば動作しています)

2) 警告(USB重複)を消す:オーバレイでどちらか無効化

usbd@402e0000usbh@402e0000 が同アドレスで同時 enable だと DTS 警告が出ます。使わない方を無効化 してください。

  • 以下の場所に overlay ファイルを作成してください。
    • zephyrproject\bootloader\mcuboot\boot\zephyr\boards\mimxrt1060_evk.overlay
  • overlayに以下を書き込んでください。USBホスト を無効化しています。
  • &usbh { status = "disabled"; };

    (Host優先なら &usbd { status = "disabled"; };

3) パーティションを確実に:pm_static.yml(推奨)

Slot1 へアップロードできるように、QSPI(8MB想定)に mcuboot/slot0/slot1 を明示します。

  • プロジェクト直下に pm_static.yml ファイルを作成してください。
  • 例:zephyrproject\bootloader\mcuboot\boot\zephyr\pm_static.yml

  • pm_static.ymlに以下の内容を書き込んでください。

    # 例: MIMXRT1060-EVK の QSPI 8MB を想定
    mcuboot:
    address: 0x60000000
    size: 0x00080000 # 512KB

    slot0_partition:
    address: 0x60080000
    size: 0x00380000 # 3.5MB

    slot1_partition:
    address: 0x60400000
    size: 0x00380000 # 3.5MB

4) v0.0.0 の SMP サンプル(mcumgrサーバ)をビルド&書き込み

バージョンを付与して署名バイナリを生成します。

west build -p always -b mimxrt1060_evk/mimxrt1062/qspi -d build-smp-svr-v0 zephyr\samples\subsys\mgmt\mcumgr\smp_svr -- ^
-DOVERLAY_CONFIG=overlay-serial.conf ^
-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"bootloader/mcuboot/root-rsa-2048.pem\" ^
-DCONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS=\"--version=0.0.0\"

build-smp-svr-v0を実機に書き込みます。

west flash -d build-smp-svr-v0

5) mcumgr の接続を作成(UART)

mcumgr-cliのインストール

  1. Go をインストール(未導入なら)
  2. 以下のURLからWindows 用 MSIをダウンロードして実行してください。

    https://go.dev/dl/

  1. mcumgr-cli をインストール(公式の Go CLI)
  2. go install github.com/apache/mynewt-mcumgr-cli/mcumgr@latest

mcumgr 接続

mcumgr conn add COMPORT type="serial" connstring="dev=COM3,baud=115200,mtu=512"

  • “dev=COM3”はデバイスマネージャーで「MCU-Link VCom Port」を確認することでポート番号がわかります。
    • 例:「MCU-Link VCom Port(COM3)」

mcumgr 操作 (イメージリスト表示)

mcumgr -c COMPORT image list

結果

Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: d62f08cd883eb7d31508bfe32be94df20a773a1cd27ed79cfc51254d333c43d7
Split status: N/A (0)

6) v1.0.0 をビルドして Slot1 にアップロード

west build -p always -b mimxrt1060_evk/mimxrt1062/qspi -d build-smp-svr-v1 zephyr\samples\subsys\mgmt\mcumgr\smp_svr -- ^
-DOVERLAY_CONFIG=overlay-serial.conf ^
-DCONFIG_MCUBOOT_SIGNATURE_KEY_FILE=\"bootloader/mcuboot/root-rsa-2048.pem\" ^
-DCONFIG_MCUBOOT_EXTRA_IMGTOOL_ARGS=\"--version=1.0.0\"

アップロード&イメージリスト表示

mcumgr -c COMPORT image upload -e build-smp-svr-v1\zephyr\zephyr.signed.bin
mcumgr -c COMPORT image list

結果

Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: d62f08cd883eb7d31508bfe32be94df20a773a1cd27ed79cfc51254d333c43d7
image=0 slot=1
version: 1.0.0
bootable: true
flags:
hash: 1193fbc56fd090c787a33b98de6ca3a72b9a36ff7f41048bad463c384ea2e10e
Split status: N/A (0)

7) 新イメージを試す → 確定する

初期状態は以下を想定しています。

Images:
image=0 slot=0
version: 0.0.0
bootable: true
flags: active confirmed
hash: d62f08cd883eb7d31508bfe32be94df20a773a1cd27ed79cfc51254d333c43d7
image=0 slot=1
version: 1.0.0
bootable: true
flags:
hash: 1193fbc56fd090c787a33b98de6ca3a72b9a36ff7f41048bad463c384ea2e10e
Split status: N/A (0)

  • HASH0 = d62f08cd883eb7d31508bfe32be94df20a773a1cd27ed79cfc51254d333c43d7
  • HASH1 = 1193fbc56fd090c787a33b98de6ca3a72b9a36ff7f41048bad463c384ea2e10e

次回リセットで v1.0.0 を試す

mcumgr -c COMPORT image test <HASH1>

コマンド実行後にリセットします。

結果

slot0とslot1が入れ替わっていることを確認します。

Images:
image=0 slot=0
version: 1.0.0
bootable: true
flags: active
hash: 1193fbc56fd090c787a33b98de6ca3a72b9a36ff7f41048bad463c384ea2e10e
image=0 slot=1
version: 0.0.0
bootable: true
flags: confirmed
hash: d62f08cd883eb7d31508bfe32be94df20a773a1cd27ed79cfc51254d333c43d7
Split status: N/A (0)

端末が v1.0.0 で起動したら、永続化(ロールバック防止)

mcumgr -c COMPORT image confirm <HASH1>

  • confirm しないで再起動すると、MCUboot は 0.0(slot0)へロールバックします。

コマンド実行後にリセットします。

結果

Images:
image=0 slot=0
version: 1.0.0
bootable: true
flags: active confirmed
hash: 1193fbc56fd090c787a33b98de6ca3a72b9a36ff7f41048bad463c384ea2e10e
Split status: N/A (0)

最後に

以上になります。
このコラムが、Zephyrの特長や扱い方を理解する助けになりましたら幸いです。
また弊社ではZepher開発・運用支援サービスを提供しておりますので、こちらも参考にしてください。

ウインドリバーのZephyr RTOS 開発・運用支援サービス


詳細資料をご希望の方には送付させていただきますので、以下フォームよりメールアドレスをご登録ください。

    メールアドレス(必須)

    <個人情報の取り扱い>

    ※上記内容は、弊社の掲げる個人情報保護方針に沿って管理し、本件に関するお問い合わせ、
    お申込み等いただいた内容への対応のために利用する場合がございます。
    お客様の同意なく目的外の利用や第三者への開示、提供することはございません。
    詳細につきましては、当サイトの「個人情報保護方針」をご参照ください。

    「個人情報保護方針」に同意し、送信する
    (必須)


    NXP® は NXP Semiconductors N.V. の登録商標です。
    Zephyr® は The Linux Foundation の商標です。
    Windows® は米国およびその他の国における Microsoft Corporation の登録商標です。
    Python® は Python Software Foundation の登録商標です。
    Bluetooth® は Bluetooth SIG, Inc. の登録商標です。
    Wi-Fi® は Wi-Fi Alliance の登録商標です。


    [2025年10月07日 時点]

    POPULAR COLUMN
    人気コラム



    メールマガジン

    「ご登録いただいた内容は、弊社の掲げる「個人情報保護方針」に沿って管理し、本件に関するお問い合わせ、お申込み等いただいた内容への対応のために利用する場合がございます。なお、お客様の同意なく目的外の利用や第三者への開示、提供を行うことはございません。」

    CONTACT

    まずはお気軽に
    お問い合わせください!

    PAGE TOP