みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

ZephyrをSTM32F4Discoveryで試す

はじめに

Zephyrの勉強のためにとりあえず動かしてみる。

準備

いろいろ事前にインストールが必要なのでやっておく。

west

直接gitでソースを取得するのではなくwestというツールを使用することが推奨されているようだ。

pip3が必要なのでインストールする。 OSの環境を汚したくないのでuserインストールする。

$ sudo apt install python3-pip
$ pip3 install --upgrade pip
$ sudo apt purge python3-pip

westのインストール。

$ pip3 install --user west

ninja

westは内部からninjaを叩くようなのでninjaをインストールする。

$ sudo apt install ninja-build

CMakeの更新

Ubuntu 18.04のcmakeでは古いため新しいcmakeをインストール

$ wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4.tar.gz
$ tar xvf ./cmake-3.14.4.tar.gz 
$ cd cmake-3.14.4
$ ./configure
$ make -j $(nproc)
$ sudo make install

Zephyr SDK

SDKインストーラをダウンロードする。

$ cd /tmp
$ wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.10.0/zephyr-sdk-0.10.0-setup.run

インストーラを実行する。

$ sh zephyr-sdk-0.10.0-setup.run
Verifying archive integrity... All good.
Uncompressing SDK for Zephyr  100%  
Enter target directory for SDK (default: /opt/zephyr-sdk/): ~/bin/zephyr-sdk

デフォルトでは/opt/zephyr-sdk/にインストールされる。 インストール先はどこでも良いが、ここでは~/bin/zephyr-sdkにインストールした。

環境変数を設定する必要がある。

次の内容を~/.bashrcに追加する。

export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=${HOME}/bin/zephyr-sdk

.bashrcを読み込む。

$ source ~/.bashrc

Zephyrのソースを取得

westでソースを取得する。

$ west init zephyrproject
$ cd zephyrproject
$ west update

依存パッケージのインストール

依存するpythonパッケージをインストールする。

$ pip3 install --user -r zephyr/scripts/requirements.txt

westでビルドする

先程のzephyrprojectディレクトリに戻り次のコマンドを実行する。

$ cd zephyr
$ source zephyr-env.sh

対応ボードを調べる

次のコマンドでSTM32F4Discoveryを探す。

$ west boards | grep stm32f4
stm32f411e_disco
stm32f412g_disco
stm32f429i_disc1
stm32f469i_disco
stm32f4_disco

stm32f4_discoが見つかった。

Hello worldをビルドする

手始めに世界に挨拶してみる。

$ west build -b stm32f4_disco samples/hello_world

westで書き込む

次のコマンドで書き込みからボードのリセットまでやってくれる。

$ west flash

次のように接続し、minicomなどのターミナルを起動しておく

USB Cable STM32
TXD PA3
RXD PA2
GND GND

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

***** Booting Zephyr OS zephyr-v1.14.0-1091-ge58df2c34eab *****
Hello World! stm32f4_disco

まとめ

だいたい全部westで片付く。

platformioみたい。最近はこういうのが流行りなのか。

(おまけ)qemuで実行

実機なしで手軽に試すにはqemuを使用できる。

$ west build -b qemu_x86 samples/hello_world
$ west build -t run
...(snip)...
SeaBIOS (version rel-1.12.0-0-ga698c8995f-prebuilt.qemu.org)
Booting from ROM..***** Booting Zephyr OS zephyr-v1.14.0-1091-ge58df2c34eab *****
Hello World! qemu_x86

Ctrl+a, xで終了。