モダンOSのお砂場(58) Zephyr再び、Windows上でビルド可能にする

Joseph Halfmoon

パソコンを更新してから2か月近くもたつのですが未だに旧機種でできていたことの全てはできませぬ。機械的に移設するわけではなく、旧機種で失敗していたところを変更したり、違うやり方を試みたりしているのも一因です。今回は Zephyr RTOSのビルド環境を整え?ました。いろいろ問題あるのだけれどビルドして実行できたのでOK?

※「モダンOSのお砂場」投稿順Indexはこちら

正直いって、ZephyrはRTOS素人にはFreeRTOSやMbedOSよりも敷居が高く感じます。抽象度が高いからかな~。みんなデバイス・ツリーのせい?

それもあって、旧パソコンではZephyrのビルド環境は偉大なPlatform IOに頼ってました。テキトーにクリクリしていけばとりあえずサンプルプログラムくらいのビルドできる環境が出来上がってしまうので。

それではいけない(何がいけないのか自分でも分かってないですが、探索本能みたいなものか)ということで、今回は、Platform IOに頼らずビルド環境を自力で整えることにいたしました。以下のZephyrページに「だいたい」従ってインストール作業を行い、とりあえずサンプルプログラムをビルドして動作確認するところまでやってみました。

Getting Started Guide

ビルド環境構築、いつものことだがトホホあり

今回使用する環境は以下です。

Windows11上のMSYS2(MingW64)環境

つまり、

    • クロス・ツール類はWindows上で走る exe。
    • makeやbinutilなどのLinux(Unix)系ツールセットはMSYS2環境のもの。
    • Windows上のデバイスドライバ経由でマイコンFlash書き込み

です。ここで今回の教訓が一つ。

CMD.EXE(あるいはPowerShell)とbashの使い分けは意識すること

であります。今回はMSYS2環境へのインストールということで、最初MSYS2環境の bash を使ってセットアップを始めたのです。この方がLinuxっぽいし。しかし直ぐにボロがでました。ダウンロードするSDKなどは、Linux用ではなくWindows用のものでないとならないので、セットアップ用のスクリプトなどが、cmd.exe用だったりします。batファイルの実行のために、慌てて cmd.exe に切り替えます。勿論、MSYS2環境へのパスは設定してあるので、cmake(MSYS2環境なので cmake.exe ですが)などLinux系のコマンドもコマンドプロンプトから実行できます。しかし、コマンドプロンプトから呼び出された Makefileの中で呼び出されている find の期待値は、Linux系のfindなのに、DOS(Windows)系のfindが呼び出されてエラー発生、といった塩梅で大混乱。頭が混乱しているのはお前だ、と。

インストールの大体のところを振り返る

混沌の中、大体の手順は以下です。

    1. CMake、Python、Devicetree compilerなどをインストール
    2. westのインストール
    3. west使って Zephyrのソースのインストール
    4. Zephyr SDKのwgetとunzip
    5. Zephyr SDKの setup

まず1ですが、ZephyrのGetting Startedでは、chcolatey(Windows用のパッケージマネージャ)を使え、とあるのです。直にそうすればよかったのかもしれませんが、MSYS2にはpacmanあり、まあ、そちらでやっても何とかなるじゃん、ホントか?ということで pacmanで各種ソフトをインストールしました。ただでさえディスクの肥やしが多いので、あんまりいろいろ入れたくないのだ。

バージョンについてはGetting Startedで列挙されているバージョンより新しいです(Zephyrの要求は結構新しめのバージョンでした。手元のWSL2 Ubuntu20.04LTSやラズパイOSでデフォルトでインストールできるものより新しいものが要求されてます。MSYS2は新しいものが入るようなので大丈夫なハズ。)

2そして3、特に3はZephyrのソース一式をもってくるのですが、それほど時間がかからなかったです。しかし、4のSDKのwgetは結構時間がかかったです。2Gバイト弱ほどものダウンロードサイズで、途中接続断もあり、wgetの再接続機能を頼りにしばらくプラプラしてました。

実は、4まではMSYS2のbashで操作していたのですが、ここでようやく気づきました。4でダウンロードしたSDKの setup用のスクリプトファイル、CMD.EXE用でした。Windows版ダウンロードしているのだし当然か。CMD.EXEに切り替えて setupをいたしました。こんな感じ。

ZephyrSDKsetupCmd

BBC microbit V2をターゲットにサンプルプログラムをビルド

上記で開発環境のインストールができた(だいたい)ので、サンプルプログラムをビルドしてみることにいたします。ターゲットボードは、BBC micorobit V2です。このところ有休状態。しかし、ノルディック nRF52チップを搭載、結構馬力も容量もあるマイコンです。

一部、Pythonのモジュールのインストールが失敗していてうまく行かないところがあったのですが、無理やり該当モジュールを別途インストールしたりしてビルドできるように持ち込みました。ビルドスタートは、こんな感じ。-p alwaysと-bでボード名 bbc_microbit_v2を指定しているところっすかね、ポイントは。StartBuildHelloWorld

ビルド結果が以下に、おお、ビルド成功しているみたい。EndtBuildHelloWorld

Flash書き込みと実行

Zephyr環境の場合、ビルドもFlash書き込みも皆 west コマンドでできるはずなのですが、今回の west flash は失敗してしまいました。こんな感じ。

再び、Pythonのモジュールが欠けておるというご指摘です。ErrorPyOcd

しかし、pyocdがなくても、BBC microbit V2の場合パソコンのUSBに接続すればストレージとしてWindowが開きます。そこに上記でビルドされている hexファイルを直接書き込めば動作するハズ。書き込んでみました。書き込み後、USBの仮想シリアルにTeratermを接続してみたところが以下に。

RunOK

おお、Zephyr v3.2.0から Hello World!とな。例によってドタバタだったけれども動くことは動いたです。

モダンOSのお砂場(57) Make-GCC-ARMイクスポート、MbedOS2ようやく成功 へ進む