2026 年 08 月 07 日 ソリューション統括部
Zephyr OS とは ? について解説するブログの第四回目です。
今回は Zephyr アプリに挑戦します。
何かボタンを押すごとに LED を点灯・消灯するアプリを書いてみようと思います。
「Zephyr アプリに挑戦」は全三回を予定しています。中編は 9 月中旬頃の公開予定です。
これまでの Zephyr ブログを読んでいない方は
「Zephyrブログ 第一回 はじめての Zephyr(前編)」から読んでいただけると、より理解が深まります。
Zephyr のアプリを作るためにはアプリディレクトリが必要です。
アプリディレクトリとは次のようなファイルから構成されたディレクトリのことです
(https://docs.zephyrproject.org/latest/develop/application/index.html#overview)。
*ここでアプリに固有とは、「ターゲットボードなどによらず、そのアプリにとって必要なもの」という意味です。
この中で一番大事なのは CMakeLists.txt です。それから prj.conf も重要です。prj.conf はなくても構築する方法がありますが、通常は用意しておくファイルです。そのほかは必要に応じて、という理解でよさそうです。
また、ここに挙げたものがアプリディレクトリの構成要素のすべてではなく、ほかにもまだあるようです。
上に挙げた項目のうち、CMakeLists.txt と src ディレクトリ以外は、アプリコンフィグディレクトリに配置することになっています。ただし、アプリコンフィグディレクトリはとくに指定しない限り、アプリディレクトリと同一となります。というのもアプリコンフィグディレクトリは、変数 APPLICATION_CONFIG_DIR で指定するのですが、この変数の値は、cmake コマンド行に引数 -DAPPLICATION_CONFIG_DIR=<path> として渡すか、CMakeLists.txt で定義しない限り、アプリディレクトリのパスが自動的に設定されるからです(https://docs.zephyrproject.org/latest/develop/application/index.html#application-configuration-directory)。
アプリディレクトリ自身をどこに配置するかについて、3 つのオプションがあります(https://docs.zephyrproject.org/latest/develop/application/index.html#application-types 参照)。
本記事では、作業空間型でアプリディレクトリを作成することにします。
Zephyr 構築システムには、アプリを書き起こすにあたって参考となる雛型が用意されています。
example-applicationといいます(以下、見本アプリと呼ぶ)。一から書き起こすことも、もちろん可能でしょうが、通常はこれをベースにするのだと思われます。本記事でもこれを使用してみることにします。
見本アプリは次のようなことをするアプリです。
より正確な処理は以下です。
当初作成することを想定していたアプリが見本アプリに動作が似ているため、計画を変更してこの見本アプリを MIMXRT1170-EVKB ボードで走らせることにしました。
example-application リポジトリのトップディレクトリには次のようなディレクトリがあって、app が見本アプリのアプリディレクトリです。以下に example-application 配下の一部を挙げました。

drivers ディレクトリには見本アプリが使用するドライバが定義されています。dts ディレクトリにはそのドライバのためのデバイスツリーバインディング(デバイスツリーノードの型を定義するファイルのこと)があります。boards ディレクトリと zephyr ディレクトリについてはこのあと述べます。
west.yml は west のマニフェストファイルです。west 作業空間は複数の git リポジトリから成りますが、それを管理するのがマニフェストファイルです。west 作業空間はいずれかのリポジトリからマニフェストファイルを選択します。
これを提供したリポジトリはマニフェストリポジトリと呼ばれます。west 作業空間には必ず唯一つのマニフェストリポジトリが存在します。どのリポジトリも有効な内容のマニフェストファイルがあればマニフェストリポジトリになれます
(https://docs.zephyrproject.org/latest/develop/west/basics.html#workspace-concepts の
"manifest repository" の項参照)。
「はじめての Zephyr」と「LCD に表示してみる」の回で使用していた west 作業空間 ~/zephyrproject のマニフェストリポジトリは zephyr リポジトリでした。しかし example-application のように、マニフェストファイルがあれば、それ以外のリポジトリがマニフェストリポジトリになることが可能です。
これによって、west 作業空間のリポジトリの構成を独自に制御することができるわけです。Zephyr は、どれがマニフェストリポジトリとなるかによって、3 タイプの west 作業空間を定義しています
(https://docs.zephyrproject.org/latest/develop/west/workspaces.html#topologies-supported 参照)。
T1: star トポロジは標準的なトポロジです。~/zephyrproject はこれでした。
T2: star トポロジはアプリがマニフェストリポジトリになるトポロジです。example-application リポジトリをマニフェストリポジトリにすれば、このタイプになります。
T3: forest トポロジは、複数のアプリを一つの west 作業空間に配置するようなトポロジです。「独立」と称するのは、マニフェストファイル専用のリポジトリをとくに用意することから来ているようです。
本記事では T1: star トポロジのまま見本アプリを構築することを目指すことにします。
なお、example-application リポジトリをマニフェストリポジトリとする west 作業空間を作成するには、次のようにします。
$ cd ~ $ . ~/zephyrproject/.venv/bin/activate $ west init -m https://github.com/zephyrproject-rtos/example-application --mr main my-workspace $ cd my-workspace $ west update
T1: star トポロジを使用し、作業空間型でアプリディレクトリを作成することにしましたので、まずは example-application リポジトリをこれまで使用してきた west 作業空間 ~/zephyrproject 配下にクローンします。
ディレクトリ名は
https://docs.zephyrproject.org/latest/develop/application/index.html#zephyr-workspace-application に倣い、applications としました。
$ cd ~/zephyrproject $ git clone https://github.com/zephyrproject-rtos/example-application applications
何はともあれ、見本アプリをコンパイルしてみることにします。
applications/app ディレクトリが見本アプリのアプリディレクトリです。構築ディレクトリは applications ディレクトリ配下としましょう。
$ cd ~/zephyrproject/applications $ west build -b mimxrt1170_evk/mimxrt1176/cm7 app
エラーが発生しました。
/home/hoge/zephyrproject/applications/app/prj.conf:7: warning: attempt to assign the value 'y' to the undefined symbol BLINK error: Aborting due to Kconfig warnings CMake Error at /home/hoge/zephyrproject/zephyr/cmake/modules/kconfig.cmake:409 (message): command failed with return code: 1
Kconfig の警告が原因でアボートしたといっているので、その前に出ている "the undefined symbol BLINK" がエラーの原因のようです。
見ると applications/app/prj.conf ファイルが CONFIG_BLINK=y としています。これは、探してみると、ファイル applications/drivers/blink/Kconfig で定義されていました。つまり、見本アプリは applications/drivers/blink ドライバを使用しているが、構築システムはそれを見付けることができない、という意味になるようです。
では、新たに追加されているドライバを構築システムに教えるにはどうしたらいいのでしょうか?
$ cd ~/zephyrproject $ git clone https://github.com/zephyrproject-rtos/example-application applications
$ cd ~/zephyrproject/applications $ west build -b mimxrt1170_evk/mimxrt1176/cm7 app
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 技術ネタ
2026 年 08 月 05 日 イベントレポート
2025 年 12 月 01 日 イベントレポート
2025 年 08 月 08 日 イベントレポート
2025 年 04 月 01 日 リクルート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2026 年 07 月 01 日 信州リネオ便り
2026 年 05 月 25 日 信州リネオ便り
2026 年 04 月 09 日 信州リネオ便り
2026 年 08 月 07 日 ソリューション統括部
2026 年 05 月 26 日 ソリューション統括部
2026 年 04 月 14 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部