2026 年 03 月 18 日 ソリューション統括部
NXP の評価ボード MIMXRT1170-EVKB の上で、Zephyr のことを色々と学んでいきたいと思います。よろしくお付き合いください。
本記事では、Zephyr の MIMXRT1170-EVK ページで述べられている
samples/hello_world を QSPI Flash メディア上で実行する手順を試してみました。
https://docs.zephyrproject.org/latest/boards/nxp/mimxrt1170_evk/doc/index.html
開発ホスト環境として Ubuntu 24.04 を使用しました。Ubuntu 24.04 以降が使えるようです。
https://docs.zephyrproject.org/latest/develop/getting_started/index.html#select-and-update-os
前編では、Zephyrとはから解説し、ソースツリー構成、本記事の動作確認に使用した NXP MIMXRT1170-EVKB 評価ボード について紹介いたします。
後編は4月中旬ごろ公開予定です。
Zephyr は資源に制約のある組込みシステムでの使用を想定した OS です。
kernel の機能は必要なものだけを選択できて、わずか 2KB にできるそうです。(https://docs.zephyrproject.org/latest/kernel/services/index.html#kernel-services)。
Apache 2.0 ライセンスのもと配布されています。
https://docs.zephyrproject.org/latest/introduction/index.htmlには RTOS という表現が見あたらないのですが、
https://www.nxp.jp/company/about-nxp/smarter-world-blog/BL-NXP-ZEPHYR-REAL-TIME-OS などによれば RTOS です。マルチプロセスではなさそうですが、マルチスレッドです。POSIX pthreads API をサポートしています。
MMU があれば、仮想記憶のサポートもあるようです。
(https://docs.zephyrproject.org/latest/kernel/memory_management/virtual_memory.html#virtual-memory)
物理メモリよりも大きなメモリを提供することもできるようです。
メモリ保護の役割も担っているはずですが、スレッドとメモリ保護との関係はよくわかっていません。
ハードウェアの記述に Linux と同様のデバイスツリーが使用されています。
Zephyr のデバイスツリーは、コンパイル時に(も?)参照されます。つまりコンパイル結果に影響を及ぼします。
ソフトウェアのコンフィグにもデバイスツリーが使用されていることになります。
ソフトウェアのコンフィグにはこのほかに、Linux と同様の Kconfig があります。
両者には役割分担があるようです。
(https://docs.zephyrproject.org/latest/build/dts/dt-vs-kconfig.html#dt-vs-kconfig)
そのほか、特徴が ここ に挙げられています。
2026-02-17 現在、Zephyr のバージョンは 4.3.0 です。
Zephyr の開発環境を作成すると、次のようなディレクトリの構成になります(トップレベルから第 3 層までを表示しています)。

トップディレクトリには Zephyr SDK(zephyr-sdk-0.17.4)用と west 作業空間(zephyrproject)用のディレクトリがあります。
ただし、zephyr-sdk-0.17.4 はとくにこの場所でなければならないわけではありません。
west 作業空間ディレクトリには Zephyr の様々なコンポーネントが置かれますが、zephyr ディレクトリが本体の Zephyr ソースツリーです。
以下では、west 作業空間の構成とその中の Zephyr ソースツリーの構成とについて簡単に述べます。
本節は https://docs.zephyrproject.org/latest/develop/west/basics.html#west-workspaceをもとにしています。
Zephyr の構築システムは west というコマンドを使用します。
https://docs.zephyrproject.org/latest/develop/west/index.html#west-zephyr-s-meta-toolwest という名前は、Zephyr新たな機能を <command> として追加できるようになっています がギリシア神話に出てくる「西風」の神様のことなので、そのアナロジーでしょう。
Zephyr プロジェクトの一環として開発されているようです。
west のコマンド行は次のようなフォーマットになっています。
west [common-opts] <command>[opts] <args>
west は、拡張可能な作りになっていて、新たな機能を <command> として追加できるようになっています。
基本は複数のリポジトリからソースファイルを取得するためのツールのようですが、Zephyr ではこの拡張機能を使って、構築、配備、デバッグにも一貫して使用できるようにしています。
本稿でも、ソースの取得、構築、配備まで使用しています。
west コマンドの使用には west 作業空間を必要とします。west 作業空間のトップディレクトリは下に挙げたディレクトリから構成されます。

Zephyr 開発環境を作成するために最初に実行するコマンドは west init ですが、このとき .west ディレクトリと zephyr ディレクトリの二つが作成されます。
zephyr ディレクトリが、Zephyr 本体のソースツリーで、Zephyr git リポジトリのローカルリポジトリです。
.west ディレクトリは west 作業空間であることのマーカみたいな役割をもち、これがあるディレクトリが west 作業空間になります。
bootloader, modules, tools の各ディレクトリは、続いて実行する west update コマンドで作成されます。
これらのディレクトリ配下には Zephyr で利用することができる外部のオープンソースコードが置かれます。これら外部コンポーネントは Zephyr project CI が妥当性を確認し、Zephyr のリリースごとに機能することが検証されています。
外部コンポーネントの一覧は west マニフェストファイル(west 目録)で管理されています。
zephyr/west.yml がそれです。
west マニフェストでは、コンポーネントの一つひとつを「プロジェクト」と呼んでいます。
bootloader, modules, tools の区分はその名のとおりの意味をもつと思われます。
modules には Zephyr に統合された外部ソースコードが置かれるようです。
これを「外部モジュール」と呼んでいます。Zephyr の機能の一部として使用されるが Zephyr ソースツリーの外に置かれているコンポーネントです。
tools ディレクトリには次の二つのディレクトリが作成されます。
west update の実行によってすべての外部コンポーネントのソースが取得されるわけではありません。
west マニフェストに記載された west プロジェクトはデフォルトではすべてが有効です。しかし west プロジェクトはそれぞれ自身の属するグループを指定することができます。
そして west マニフェストはグループごとに無効を設定できます。
zephyr/west.yml を見ると下記グループが無効化されています(グループ名の頭に "-" を付けると無効化になります)。
group-filter: [-babblesim, -optional, -testing]
したがって、これらのグループに属する west プロジェクト(=外部コンポーネント)のソースは、デフォルトでは取得されません。
なお、zephyr/west.yml は zephyr/submanifests ディレクトリにある追加の west マニフェストファイルも取り込むようなのですが、詳細には立ち入らなことにします。
まとめますと、Zephyr の west 作業空間を構成するのは次の三種類です。

Zephyr ソースツリーのトップディレクトリは次のようになっています。


snippet は構築システムの設定が保存される場所です。
→ https://docs.zephyrproject.org/latest/develop/west/config.html#configuration
snippet にはそれぞれ名前があり、どの snippet を使用するかはその名前を使います。
たとえば app アプリを構築するとき、コンソールに CDC ACM console を使用したいときは、次のようにすればそのために必要なドライバ等が追加されるようです。
west build -S cdc-acm-console app
詳細はまだよくわかっていません。のちのち調べていきたいと思います。
実際に作業を始める前に、MIMXRT1170-EVKB ボードの諸元を簡単に振り返っておきます。
MIMXRT1170-EVKB ボードには前身の MIMXRT1170-EVK ボードがありました。Zephyr はどちらのボードもサポートしています。
構築するときは、前者を mimxrt1170_evk@B、後者を mimxrt1170_evk@A としています。
単に mimxrt1170_evk としたときは前者を指すようです。
MIMXRT1170-EVKB は NXP のプロセッサ i.MX RT1170 シリーズの MIMXRT1176DVMAB を搭載しています。
i.MX RT1170 プロセッサは Cortex-M7 コアと Cortex-M4 コアを搭載し、2 MB のオンチップ RAM を積んでいます。
MIMXRT1170-EVKB ボードの諸元(の一部)は次のとおりです。

マスストレージのうち、QSPI Flash と Octal Flash は FlexSPI コントローラに接続されています。このため、QSPI Flash と Octal Flash は XIP 実行ができるようです。
MIMXRT1170-EVKB ボードの NAND Flash は SDRAM と同じ SEMC コントローラに接続されています。なお、シリアル NAND Flash ならば FlexSPI に接続することができますが、NAND での XIP 実行はできません。
参考資料 2) の 10.6 Boot devices によると、MIMXRT1170-EVKB に搭載されているマスストレージはいずれもブートデバイスとして使用が可能です。
ただし、LPSPI の NOR Flash は、ブート可能ではありますが、リカバリ用の位置付けになっています。また、参考資料 1) の表 6 「一般的なブートモード及びブートデバイス設定」には記載がありません。
本記事では、QSPI Flash に簡単な Zephyr アプリを書き込んで、実行することを試します。
ブートデバイスとして QSPI Flash を使用するのは、それが Zephyr の MIMXRT1170-EVKB ボードでのデフォルトだからです。
しかしいずれいつの日かは SD Card からブートしてみたいとも思っています。Octal Flash は、ボード上の抵抗を付けたり外したりしなければならないようなので(参考資料 1) 2.6)考えていません。
※資料 1 および 2 については NXP サイトへのログインが必要となります。
2025 年 05 月 14 日 Vigiles サポート
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2026 年 02 月 09 日 Yocto Project よもやま話
2026 年 02 月 09 日 Yocto Project よもやま話
2026 年 02 月 09 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2025 年 12 月 01 日 イベントレポート
2025 年 08 月 08 日 イベントレポート
2024 年 12 月 06 日 イベントレポート
2025 年 04 月 01 日 リクルート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2026 年 02 月 09 日 信州リネオ便り
2026 年 01 月 06 日 信州リネオ便り
2025 年 12 月 23 日 信州リネオ便り
2026 年 03 月 18 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部