lazionote

雑記ノート

Microbit v1でZephyr OSを動かしてみた

はじめに

MicrobitプロジェクトがリリースしているMicrobit v1ボードでZephyr OSを動かしてみた。

環境

  • ホストOS: Windows 10
  • Microbit v1ボード: Micobitのサイトでオリジナルmicro:bitと書かれているボード
  • Zephyr OS: version 2.7.99
  • GNU Arm Embedded Toolchain: 9 2020-q2-update

Zephyr開発環境構築

Zephyr 2.7.0のドキュメントGetting Started Guideを参考にして開発環境を準備する。

chocolateyをインストール

Chocolatey Softwareサイトの右上のInstall Nowボタンを押す。

Step1はOptionalなので何もしないで、Step 2のIndivisualを押す。

WindowsPowerShellを管理者で起動して、表示されている以下のコマンドをコピペして実行する。

Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

これでChocolateyがインストールされるようだ。 Chocolateyのバージョンは、v0.11.3だった。

chocolateyを使ってビルド用のコマンドをインストール

コマンドプロンプトを管理者で起動して以下のコマンドを実行。

choco feature enable -n allowGlobalConfirmation
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
choco install ninja gperf python git dtc-msys2
  • cmake v3.22.1
  • ninjav1.10.2
  • gperf v3.1
  • python v3.10.1
  • git v2.34.1
  • dtc-msys2 v1.5.1

などがインストールされた。

pipが更新されているようなので最新版に更新

python -m pip install --upgrade pip

Zephyr OSのツールwestをインストール

pip3 install -U west

westツールでZephyrソースコード入手とpythonスクリプトをインストール

cd c:\
west init zephyrproject
cd zephyrproject
west update
west zephyr-export
pip3 install -r c:\zephyrproject\zephyr\scripts\requirements.txt

GNU Arm Embedded Toolchainの設定

事前にインストールしていたGNU Arm Embedded Toolchainサイトの9-2020-q2-updateを使うように環境変数を設定したバッチファイルをC:\zephyrproject\seup.batとして用意した。

set ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
set GNUARMEMB_TOOLCHAIN_PATH=C:\zephyrproject\gnuarmemb-9-2020-q2-update

最初、GNUARMEMB_TOOLCHAIN_PATHには9-2020-q2-updateの標準のインストール先を指定していたが、スペース文字やダブルクォートが含まれているとwest build時にエラーになるので、9 2020-q2-updateフォルダをc:\zephyrproject\gunarmemb-9-2020-q2-updateにコピーして、環境変数もこちらを参照するようにした。

また、west buildすると、このパスの存在をc:/zephyrproject/zephyr/cmake/compiler/gcc/generic.cmakeの15行目でチェックしているようだが、ここで必ずNothing found at GNUARMEMB_TOOLCHAIN_PATHエラーになってしまうため、このチェックも以下の様にコメントアウトした。

#if(NOT EXISTS ${GNUARMEMB_TOOLCHAIN_PATH})
#  message(FATAL_ERROR "Nothing found at GNUARMEMB_TOOLCHAIN_PATH: '${GNUARMEMB_TOOLCHAIN_PATH}'")
#endif()

pyelftools をインストール

west build時にimport elftoolsが実行されるので、以下のコマンドを実行して事前にelftoolsをインストールしておく。

pip3 install pyelftools

この問題は以下のissuesにレポートされていた。

No module named 'elftools' · Issue #1392 · zephyrproject-rtos/zephyr · GitHub

Microbit用サンプルプログラム hello_worldをビルド

cd c:\zephyrproject
setup
west build -b bbc_microbit samples/hello_world

これでビルドはできるようになった。

pyOCDのインストール

プログラムをwest flashでMicrobitボードに書き込むには、pyOCDが必要らしい。

pyOCDサイトのDeveloper's guideを参考にしてインストールする。

cd c:\zephyrproject
git clone https://github.com/pyocd/pyOCD
cd pyOCD
python -m venv venv
venv\Scripts\activate
pip install -e .[test]

venv環境にてpyocdがc:\zephyrproject\pyOCD\Scripts\pyocd.exeに作成された。 このあと、venv環境のままwest flashするので、コマンドプロンプトはこの状態にしておく。

Tera Termを起動

Tera Termを起動して115200 Baud rateでMicrobitに接続しておく。

hello_worldプログラムを書き込む

venv環境にて、以下のコマンドを実行してビルドしたhello_worldプログラムをMicrobitボードに書き込む。

cd c:\zephyrproject\zephyr
west flash

書き込みが完了するとすぐに実行されて、Tera Termウインドウに以下のように表示された。

f:id:lazionote:20220110155051p:plain

Microbit用サンプルプログラム

hello_world以外のサンプルもBoard specific samplesに記載されている。 displayサンプルもMicrobit v1で動作するようなので、以下のようにビルドと書き込みをして動かしてみた。9から0へのカウントダウン表示からHello Zephyr!のスクロール表示まで、いくつかの表示がされた。

west build -b bbc_microbit samples/boards/bbc_microbit/display
west flash

変更履歴

  • 2022/01/10 新規作成