みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

Zephyrにアプリケーションを追加する

はじめに

Zephyrに自作のアプリケーションを追加したい。

ここの手順を参考にする。

環境変数の読み込み

とりあえず一番始めにsource zephyr-env.shを実行して環境変数を読み込む。 これを忘れるとwestがまともに動かない。

$ cd zephyr
$ source zephyr-env.sh

作成するファイル

次のような構成になるようにファイルを作成する。

app
├── CMakeLists.txt
├── prj.conf
└── src
    └── main.c

ディレクトリの名前はapp以外でも問題ない。 zephyrのソースツリー配下である必要もない。

今回は次のように作成する。

$ mkdir -p ~/zephyr_app/hello/src
$ cd ~/zephyr_app/hello

westでビルドする予定なので、あえて一段深い階層を作成する。

最終的には次のようになる。

~/zephyr_app
└── hello
    ├── CMakeLists.txt
    ├── prj.conf
    └── src
        └── main.c

CMakeLists.txt

CMakeLists.txtを次の内容で作成する、

cmake_minimum_required(VERSION 3.13.1)
include($ENV{ZEPHYR_BASE}/cmake/app/boilerplate.cmake NO_POLICY_SCOPE)
project(my_zephyr_app)

target_sources(app PRIVATE src/main.c)

使用するボイラープレートの都合でCMakeLists.txtに記述するプロジェクト名はappとしなければならない。

prj.conf

プロジェクト固有のコンフィグ設定を記述する。何もない場合は内容は空でもよいがファイルは作成する。

$ echo '# nothing here' > prj.conf

src/main.c

プログラム本体。

#include <stdio.h>

int main(int argc, char *argv[])
{
    printf("My first Zephyr application. \n");
    return 0;
}

ビルド

westでビルドする。

$ cd ~/zephyr_app
$ west build -b qemu_x86 hello

アプリケーションと同じ階層にbuildが作成され、その中に成果物が出力される。

とりあえずqemu向けにビルドする。

実行

qemuなのでwestで実行できる。

$ west build -t run

次のように表示されればOK.

SeaBIOS (version rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org)
Booting from ROM..***** Booting Zephyr OS zephyr-v1.14.0-1091-ge58df2c34eab *****
My first Zephyr application.

Ctrl+a,xで終了。

まとめ

source zephyr-env.sh環境変数を読み込んでしまえば、zephyrのソースツリー以外でもwestが使用できる。

アプリケーションを管理するためのディレクトリもzephyrのソースツリーの外に置くことができるので、管理がしやすい。

アプリケーションのビルドやデバッグにもwestが使用できるので便利。