リネオブログ

Zephyrブログ 第一回 はじめての Zephyr(前編)

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 とは

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

そのほか、特徴が ここ に挙げられています。

Zephyr ソースツリーの構成

2026-02-17 現在、Zephyr のバージョンは 4.3.0 です。
Zephyr の開発環境を作成すると、次のようなディレクトリの構成になります(トップレベルから第 3 層までを表示しています)。

zephyrblog_01.jpg

トップディレクトリには Zephyr SDK(zephyr-sdk-0.17.4)用と west 作業空間(zephyrproject)用のディレクトリがあります。
ただし、zephyr-sdk-0.17.4 はとくにこの場所でなければならないわけではありません。

west 作業空間ディレクトリには Zephyr の様々なコンポーネントが置かれますが、zephyr ディレクトリが本体の Zephyr ソースツリーです。

以下では、west 作業空間の構成とその中の Zephyr ソースツリーの構成とについて簡単に述べます。

west 作業空間の構成

本節は 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-tool

west という名前は、Zephyr新たな機能を <command> として追加できるようになっています がギリシア神話に出てくる「西風」の神様のことなので、そのアナロジーでしょう。

Zephyr プロジェクトの一環として開発されているようです。
west のコマンド行は次のようなフォーマットになっています。
west [common-opts] <command>[opts] <args>
west は、拡張可能な作りになっていて、新たな機能を <command> として追加できるようになっています。

基本は複数のリポジトリからソースファイルを取得するためのツールのようですが、Zephyr ではこの拡張機能を使って、構築、配備、デバッグにも一貫して使用できるようにしています。

本稿でも、ソースの取得、構築、配備まで使用しています。
west コマンドの使用には west 作業空間を必要とします。west 作業空間のトップディレクトリは下に挙げたディレクトリから構成されます。

zephyrblog_02.jpg

Zephyr 開発環境を作成するために最初に実行するコマンドは west init ですが、このとき .west ディレクトリと zephyr ディレクトリの二つが作成されます。
zephyr ディレクトリが、Zephyr 本体のソースツリーで、Zephyr git リポジトリのローカルリポジトリです。

.west ディレクトリは west 作業空間であることのマーカみたいな役割をもち、これがあるディレクトリが west 作業空間になります。
bootloader, modules, tools の各ディレクトリは、続いて実行する west update コマンドで作成されます。

これらのディレクトリ配下には Zephyr で利用することができる外部のオープンソースコードが置かれます。これら外部コンポーネントは Zephyr project CI が妥当性を確認し、Zephyr のリリースごとに機能することが検証されています。

https://docs.zephyrproject.org/latest/contribute/external.html#integration-in-main-manifest-file-west-yaml

外部コンポーネントの一覧は west マニフェストファイル(west 目録)で管理されています。
zephyr/west.yml がそれです。

west マニフェストでは、コンポーネントの一つひとつを「プロジェクト」と呼んでいます。
bootloader, modules, tools の区分はその名のとおりの意味をもつと思われます。 modules には Zephyr に統合された外部ソースコードが置かれるようです。 これを「外部モジュール」と呼んでいます。Zephyr の機能の一部として使用されるが Zephyr ソースツリーの外に置かれているコンポーネントです。

tools ディレクトリには次の二つのディレクトリが作成されます。

  • edtt: Embedded Device Test Tool
  • net-tools: ネットワークツール

west update の実行によってすべての外部コンポーネントのソースが取得されるわけではありません。

west マニフェストに記載された west プロジェクトはデフォルトではすべてが有効です。しかし west プロジェクトはそれぞれ自身の属するグループを指定することができます。
そして west マニフェストはグループごとに無効を設定できます。 zephyr/west.yml を見ると下記グループが無効化されています(グループ名の頭に "-" を付けると無効化になります)。

group-filter: [-babblesim, -optional, -testing]

したがって、これらのグループに属する west プロジェクト(=外部コンポーネント)のソースは、デフォルトでは取得されません。 なお、zephyr/west.yml は zephyr/submanifests ディレクトリにある追加の west マニフェストファイルも取り込むようなのですが、詳細には立ち入らなことにします。
まとめますと、Zephyr の west 作業空間を構成するのは次の三種類です。

zephyrblog_03b.jpg

Zephyr ソースツリー

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

zephyrblog_04.jpg

  1. LICENSES
    ソースツリー内に含まれている一部のコンポーネントに適用される可能性があるライセンスファイルが置かれています。ただし、構築されたバイナリには適用されないライセンスです。
  2. arch
    Zephyr 4.3.0 がサポートしている CPU アーキテクチャは次のとおりです。
    https://docs.zephyrproject.org/latest/introduction/index.html#introduction

zephyrblog_05.jpg

  1. boards
    現時点でサポートしているボードはここで調べることができます。
  2. cmake
    Zephyr は構築システムに CMake を使用していますが、cmake ディレクトリは cmake にとってのライブラリのようなもののようです。
    CMakeLists.txt が共通して使用する関数などがこのディレクトリ配下にある *.cmake ファイルで定義されています。
  3. doc
    Zephyr 文書を構築するための CMakeLists.txt、スクリプトなどが置かれているディレクトリのようです。 ninja pdf などとすれば、Zephyr 文書の pdf ファイルが作成されるようなのですが、エラーになってしまってうまくいっていません。
  4. dts
    SoC と CPU アーキテクチャに関する dtsi ファイルが置かれています。 dts とは devicetree source の頭文字語で、デバイスツリーを定義するソースファイルです。
    dtsi とは dts ファイルや dtsi ファイルから #include されることが前提のデバイスツリーソースファイルです。
    ボードの dts ファイルは boards ディレクトリ配下にある各ボードの dts ファイルで定義されますが、共通に参照される dtsi ファイルはこのディレクトリ配下に配置されるようです。
  5. kernel
    Zephyr カーネルサービスコードです。
    https://docs.zephyrproject.org/latest/kernel/services/index.html#kernel-services
    スケジュール、割込み、同期、及びスレッド間、スレッド・ISR 間の通信に関するコードがあります。
  6. modules
    Zephyr ビルドシステムに統合されているが、Zephyr ソースツリーの外にあるオープンソースコードを構築するためのファイルが置かれているようです。CMakeLists.txt, Kconfig などに加えて、C ソースなどもあります。
  7. snippets

    snippet は構築システムの設定が保存される場所です。

    https://docs.zephyrproject.org/latest/develop/west/config.html#configuration
    snippet にはそれぞれ名前があり、どの snippet を使用するかはその名前を使います。

    たとえば app アプリを構築するとき、コンソールに CDC ACM console を使用したいときは、次のようにすればそのために必要なドライバ等が追加されるようです。

    west build -S cdc-acm-console app

    詳細はまだよくわかっていません。のちのち調べていきたいと思います。

  8. subsys
    kernel 以外で、OS がサポートしている機能を定義しているディレクトリのようです。
    https://docs.zephyrproject.org/latest/services/index.html#os-services に書かれている OS サービスのことであると思われます。

MIMXRT1170-EVKB 評価ボードの諸元

実際に作業を始める前に、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 ボードの諸元(の一部)は次のとおりです。

zephyrblog_06.jpg

マスストレージのうち、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. MIMXRT1170EVKBHUG.pdf :: MIMXRT1170-EVKB Board Hardware User Guide
  2. IMXRT1170RM.pdf :: i.MX RT1170 Processor Reference Manual
  3. Zephyr::MIMXRT1170-EVK
  4. Zephyr の始め方
  5. ※資料 1 および 2 については NXP サイトへのログインが必要となります。

Yocto Project 公式実践講座 4 月、6 月、7 月 開催分 受講お申込み受付中!
Vigiles サポート
Yocto Project よもやま話
Yocto よもやま話 第 19 回 「Yocto Project 5.3 Whinlatter」
Yocto よもやま話 第 19 回 「Yocto Project 5.3 Whinlatter」

2026 年 02 月 09 日 Yocto Project よもやま話

Yocto よもやま話 第 18 回 「Yocto Project 5.2 Walnascar」
Yocto よもやま話 第 18 回 「Yocto Project 5.2 Walnascar」

2026 年 02 月 09 日 Yocto Project よもやま話

Yocto よもやま話 第 17 回 「Yocto Project 5.1 Styhead」
Yocto よもやま話 第 17 回 「Yocto Project 5.1 Styhead」

2026 年 02 月 09 日 Yocto Project よもやま話

Linux 技術ネタ
RISC-Vについて学ぶ-後編
RISC-Vについて学ぶ-後編

2024 年 01 月 10 日 Linux 技術ネタ

RISC-Vについて学ぶ-前編
RISC-Vについて学ぶ-前編

2023 年 12 月 12 日 Linux 技術ネタ

イベントレポート
EdgeTech+ 2025 出展レポート
EdgeTech+ 2025 出展レポート

2025 年 12 月 01 日 イベントレポート

EdgeTech+ West 2025 出展レポート
EdgeTech+ West 2025 出展レポート

2025 年 08 月 08 日 イベントレポート

EdgeTech+ 2024 出展レポート
EdgeTech+ 2024 出展レポート

2024 年 12 月 06 日 イベントレポート

リクルート
新卒採用、絶賛募集中!
新卒採用、絶賛募集中!

2025 年 04 月 01 日 リクルート

新卒採用、絶賛募集中!
新卒採用、絶賛募集中!

2023 年 05 月 30 日 リクルート

信州リネオ便り
奈良井宿アイスキャンドル祭りに行ってきました
奈良井宿アイスキャンドル祭りに行ってきました

2026 年 02 月 09 日 信州リネオ便り

2026年 明けましておめでとうございます
2026年 明けましておめでとうございます

2026 年 01 月 06 日 信州リネオ便り

2025年忘年会を行いました
2025年忘年会を行いました

2025 年 12 月 23 日 信州リネオ便り

ソリューション統括部
Zephyrブログ 第一回 はじめての Zephyr(前編)
Zephyrブログ 第一回 はじめての Zephyr(前編)

2026 年 03 月 18 日 ソリューション統括部

シリコンバレー探検記 2019 ~番外編~
シリコンバレー探検記 2019 ~番外編~

2019 年 12 月 10 日 ソリューション統括部

シリコンバレー探検記 2019 ~後編~
シリコンバレー探検記 2019 ~後編~

2019 年 12 月 10 日 ソリューション統括部

マーケティング統括部
大成功決起大会!!(ET2019)
大成功決起大会!!(ET2019)

2019 年 12 月 13 日 マーケティング統括部

ESEC 2019 決起大会
ESEC 2019 決起大会

2019 年 04 月 25 日 マーケティング統括部

シリコンバレー探検記 その 2
シリコンバレー探検記 その 2

2018 年 12 月 18 日 マーケティング統括部