前回からの続きです。
このテーマを最初からご覧になる場合はこちらからどうぞ。
「zephyr-sample」プロジェクトを動かそう!
さて、今回の本題「zephyr-sample」プロジェクトを「Visual Studio Code」で開き、ビルドをしてターゲット「nRF7002 Development Kit」上で動かしてみましょう。
まずは「zephyr-sample」のソースコードをダウンロードします。
これには2つの方法があります。
まず一つ目、以下のGitHubからZIPでダウンロードする方法です。
以下のリポジトリにアクセスしてもらって、緑色の「<>Code」というボタンをクリックします。
https://github.com/RyutaroMorita/zephyr-sample
次に「<>Code」ボタンの下に展開された「Download ZIP」という表示をクリックして「zephyr-sample-master.zip」をダウンロードします。
あとは「zephyr-sample-master.zip」を展開すればOKです。
2つ目の方法は「git clone」コマンドを使用することです。
Cygwinなどを使用して、ターミナルから以下のコマンドを入力すると「zephyr-sample」の
ソースツリーがダウンロードできます。
Cygwinのセットアップ方法は、こちらの記事を参考にしてください。
$ git clone git@github.com:RyutaroMorita/zephyr-sample.git
では、ゲットした「zephyr-sample」を「Visual Studio Code」で開いてみましょう。
まずは「nRF7002 Development Kit」をパソコンに接続した状態で「Visua
l Studio Code」を起動し、以下の操作を行います。
次に画面左端のアイコンが並んでいるところ、その中の四角いアイコン(「nRF Connect」)をクリックします。
画面左端の各項目が以下のように変化したはずです。
その中で、一番上にある「WELCOME」という表示の直下「+ Open an existing application」の表示をクリックします。
以下のようにディレクトリ選択ダイアログが表示されます。
ここで、ゲットしたソースコードのディレクトリを選択します。
ZIPファイルでダウンロードした場合は、ディレクトリ名が「zephyr-sample-master」、「git clone」コマンドでクローンした場合は、ディレクトリ名が「zephyr-sample」です。
いずれも「src」というディレクトリの一個上の階層のディレクトリを指定し、ダイアログ右下の「OK」ボタンをクリックです。
すると、以下の警告が表示されます。
ここは「はい、作成者を信頼します」をクリックしてください。
画面上方のリストビューには「zephyr-sample-master」、もしくは「zephyr-sample」という表示はされていますね?
画面左端の「フォルダー」アイコンをクリックしてソースディレクトリの中を確認してみましょう。
すると、ソースディレクトリの中にいくつかのファイルの他、更に「src」というディレクトリがあるようです。
この中もクリックして展開してみましょう。
ここから「zephyr-sample」の各ソースコードにアクセスできます。
試しに「sample1.c」をクリックすると「Visual Studio Code」のメインビューにソースコードが表示されます。
ここまで来れば、このソースコードのビルドや実行は、一からプロジェクトを作った前回と同じ手順です。
前回の記事のこの項目を参考に「zephyr-sample」のビルドと実行を行いましょう!
但し、今回はデバッガも本格的に使用したいので「Add Build Configuration」の画面の「Board Target」を「nrf7002dk/nfr5340/cpuapp/ns」に設定するのはもちろんのこと…
…「Optimization level」も「Optimize for debugging (-Og)」に設定してから「Genarate and Build」ボタンをクリックしましょう。
これを設定しないと、ブレークポイントを設定しても効いてくれませんのでご注意を!
ちなみに、これを忘れてデバッグしようとすると、以下のように「Debug options not enabled」というポップアップが出ますので、後で気付くことが良くあります…。
さて、不幸にもビルドの過程でエラーが発生してしまった方へ…。
もしや、以下のようなエラーメッセージではありませんでしたか?
私は今まさに、この記事を書いているときに遭遇しました…。
- …
- C:/ncs/v3.0.2/modules/crypto/mbedtls/library/memory_buffer_alloc.c:602:1: fatal error: opening dependency file secure_fw\partitions\crypto\mbedcrypto\nrf_security_src\CMakeFiles\crypto_service_mbedcry
- pto.dir\C_\ncs\v3.0.2\modules\crypto\mbedtls\library\memory_buffer_alloc.o.d: No such file or directory
- 602 | }
- | ^
- compilation terminated.
- ninja: build stopped: subcommand failed.
- FAILED: modules/trusted-firmware-m/tfm-prefix/src/tfm-stamp/tfm-build tfm/bin/tfm_s.elf tfm/bin/tfm_s.bin tfm/bin/tfm_s.hex tfm/bin/tfm_s_signed.bin tfm/bin/tfm_s_ns_signed.bin tfm/api_ns/interface/li
- b/s_veneers.o tfm/api_ns/interface/src/tfm_attest_api.c tfm/api_ns/interface/src/tfm_crypto_api.c tfm/api_ns/interface/src/tfm_fwu_api.c tfm/api_ns/interface/src/tfm_its_api.c tfm/api_ns/interface/src
- /tfm_platform_api.c tfm/api_ns/interface/src/tfm_ps_api.c tfm/api_ns/interface/src/tfm_tz_psa_ns_api.c tfm/api_ns/interface/src/tfm_ioctl_core_ns_api.c C:/cygwin64/home/User/zephyr-sample-ma
- ster/zephyr-sample-master/build/zephyr-sample-master/modules/trusted-firmware-m/tfm-prefix/src/tfm-stamp/tfm-build C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephy
- r-sample-master/tfm/bin/tfm_s.elf C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/bin/tfm_s.bin C:/cygwin64/home/User/zephyr-sample-m
- aster/zephyr-sample-master/build/zephyr-sample-master/tfm/bin/tfm_s.hex C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/bin/tfm_s_signed.bin C:
- /cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/bin/tfm_s_ns_signed.bin C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master
- /build/zephyr-sample-master/tfm/api_ns/interface/lib/s_veneers.o C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_attes
- t_api.c C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_crypto_api.c C:/cygwin64/home/User/zephyr-sample-mas
- ter/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_fwu_api.c C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_
- ns/interface/src/tfm_its_api.c C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_platform_api.c C:/cygwin64/home/Ryutaro
- uMorita/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_ps_api.c C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephy
- r-sample-master/tfm/api_ns/interface/src/tfm_tz_psa_ns_api.c C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/zephyr-sample-master/tfm/api_ns/interface/src/tfm_ioctl_cor
- e_ns_api.c
- cmd.exe /C "cd /D C:\cygwin64\home\User\zephyr-sample-master\zephyr-sample-master\build\zephyr-sample-master\tfm && C:\ncs\toolchains\0b393f9e1b\opt\bin\cmake.exe --build . -j 1"
- [12/231] Generating misc/generated/syscalls.json, misc/generated/struct_tags.json
- ninja: build stopped: subcommand failed.
- FAILED: _sysbuild/sysbuild/images/zephyr-sample-master-prefix/src/zephyr-sample-master-stamp/zephyr-sample-master-build C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build/
- _sysbuild/sysbuild/images/zephyr-sample-master-prefix/src/zephyr-sample-master-stamp/zephyr-sample-master-build
- cmd.exe /C "cd /D C:\cygwin64\home\User\zephyr-sample-master\zephyr-sample-master\build\zephyr-sample-master && C:\ncs\toolchains\0b393f9e1b\opt\bin\cmake.exe --build ."
- ninja: build stopped: subcommand failed.
- FATAL ERROR: command exited with status 1: 'C:\ncs\toolchains\0b393f9e1b\opt\bin\cmake.EXE' --build C:/cygwin64/home/User/zephyr-sample-master/zephyr-sample-master/build
- * ターミナル プロセスが終了コード 1 で終了しました。
- * ターミナルはタスクで再利用されます、閉じるには任意のキーを押してください。
この原因は、アプリケーションの存在するディレクトリのパスが長すぎることです。
この記事を書いている時は「zephyr-sample」のリポジトリからZIPファイルをダウンロードして、それを展開したものを「c:\cygwin\home\<ユーザー名>\」以下にコピーしました。
Windows11で「zephyr-sample-master.zip」を普通に展開してしまうと「zephyr-sample-master」ディレクトリの中に、更に「zephyr-sample-master」ディレクトリが生成され、その中にソースコードが格納されることになります。
この構造を「Visual Studio Code」に設定し「nRF Connect SDK Toolchain」を使ってしまったのが悪かった!
この場合、アプリケーションのディレクトリは非常に長くなります。
すなわち…
c:\cygwin\home\<ユーザー名>\zephyr-sample-master\zephyr-sample-master\~
…となります。
これは「nRF Connect SDK Toolchain」の制限(というか、バグ?)による問題です。
結構困っている人も多いみたいです。
回避策は、上記のパスを以下のように再配置することです。
つまり、余計なZIPファイル展開の過程で生成されてしまった余計な「zephyr-sample-master」ディレクトリを一階層上げてパスを短くします。
c:\cygwin\home\<ユーザー名>\zephyr-sample-master\~
これで正常にビルドが通るようになります。
とはいえ元のパスでも、それほど非常識な長さとは思えず、Nordic社に改善を求めたいところではあります。
こういうクダラナイ問題で長時間ハマると、気力がゴッソリ削られますので、マジお願いしますよ~。
ともあれ、正しくビルドが通り「zephyr-sample」が動作すると、TeraTermには以下のような表示が現れます。
そもそも、この「zephyr-sample」は「Zephyr」というRTOSを学習するために、μiTRONとの比較としてTOPPERS/ASP公式のサンプルプログラムを可能な限り忠実に再現したものです。
もちろん、コンフィギュレーションの方法は大分違いますが。
したがって、それ以外の操作方法や処理の流れは「TOPPERS/ASPのビルドからデバッグまで~サンプルプロジェクトで遊ぼう」の記事とほとんど同じです。
是非、遊んでみていただけると嬉しいです。
見た目の違いといえば、メッセージの「task(タスク)」が「Zephyr」の文化に合わせて「thread(スレッド)」となっている点くらいですかね。
次回は、このシリーズの最終回です。
今回の「zephyr-sample」で判明した「Zephyr」とμiTRONとの違いや、今後「Zephyr」を使用する上で注意しなければならないRTOSの設計思想の違いなどを自分なりにまとめてみたいと思います。
あくまで自分自身のための備忘録や警鐘の意味合いで…。
でも、私のようにμiTRONに長年慣れていて急に「Zephyr」を使わなきゃならなくなった人って、結構いるんじゃないかな?
…Nordicのせいだ。
<続く>