SEGGER Embedded Studioを使って、nRF51822を久々に動かしてみようとした。
nRF51822は3年ぶりくらいでまったく記憶にない上、eclipseで作っていた環境もSESにはインポートできなさそうで、新たにやり直すことになりそうだ。
じゃあ、せっかくだし、別のを試すか。
nRF5x support within the Zephyr Project RTOS - Nordic Blog - Nordic Blog - Nordic DevZone
https://devzone.nordicsemi.com/nordic/nordic-blog/b/blog/posts/nrf5x-support-within-the-zephyr-project-rtos
まあ、SESの方が前の知識を生かしやすいとは思うが(知識が残っていたら)、少しかじっておくとどこかで使えるかもしれん。
インストール
今回は、Windows10のWSLにインストールしてみよう。
Windowsのネイティブ側でもよいそうなのだけど、まあ、なるべくLinuxに近い環境の方がやりやすい。
https://docs.zephyrproject.org/latest/getting_started/installation_linux.html
この中でつまづいたのが、dtc。
バージョンが1.4.6以上を要求されているのだが、持っているのは1.4.5。
ソースからビルドするか、Zephyr SDKに入ってるやつを使うか。
本物のUbuntu18.04だったらsnapが使えそうな気配があったのだが、WSLではsnapが使えないようだ。
まあいい。SDKのを使おう。
今の時点では、v0.10.2がリリースされている最新なのか。
Zephyr SDKはツールチェーンなど一式が入っているのだが、それ無しでもビルドできるようにはできているらしい。
まあ、まだそこまで考えなくてよいか。
最初に見つけたのがOSごとのインストールだったのだが、OS共通でいろいろインストールするものがあった。
https://docs.zephyrproject.org/latest/getting_started/index.html
こんな感じだろうか。
mkdir ~/.local/bin
(.bashrcなどでPATHに通す)pip3 install --user -U west
west init zephyrproject
cd zephyrproject
west updatepip3 install --user -r zephyr/scripts/requirements.txt
.local/binはどこかで使うのだろうか?
ツールチェーンはどうしたものか。
私は、たぶんnRF51822向けに使うだろうから、Cortex-M0か。
Xtensaもあるから、ESP8266でもいけるのかな?
手元にArm環境は無いのだが、8-2019-q3-updateのLinux 64bit版をインストールしておく。
~/.zephyrrcにcmakeのPATHは追加されていたので、Armの分を追加しておこう。
個々でいいのかどう亜走らんが。
export PATH=/home/xxxx/bin/cmake/cmake-3.13.1-Linux-x86_64/bin:$PATH
export ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
export GNUARMEMB_TOOLCHAIN_PATH=/home/xxxx/gcc-arm-none-eabi-8-2019-q3-update
あとは、ninja?とかいうのもインストールした。
いるのかどうか、よくわかってない。
https://docs.zephyrproject.org/latest/getting_started/index.html#build-hello-world
zephyr-env.shを読み込むと、~/.zephyerrcも読み込むようだ。
ビルドは、westかcmakeとninjaでできるようだ。
ninjaの代わりにmakeでもいいらしいが、まあ、せっかくインストールしたのでそのままやろう。
実行すると、ELFファイルができたっぽい。
コンソールには zephyr/zephyr.elfと出ていたが、ビルドを開始したディレクトリ基準にするとbuildの下らしい。
$ file build/zephyr/zephyr.elf
build/zephyr/zephyr.elf: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, with debug_info, not stripped
むう、自分で設定したとはいえ、Armのバイナリだ。
westかninjaでflashコマンドを実行するとUSB経由で焼いてくれるらしい。
あ、USB ?
WSLって、USBに対応していなかったはず。。。
01: $ west flash 02: -- west flash: rebuilding 03: ninja: no work to do. 04: -- west flash: using runner pyocd 05: -- runners.pyocd: Flashing Target Device 06: No connected debug probes 07: 0003517:CRITICAL:__main__:uncaught exception: 08: Traceback (most recent call last): 09: File "/home/xxxx/.local/lib/python3.6/site-packages/pyocd/__main__.py", line 338, in run 10: self._COMMANDS[self._args.cmd](self) 11: File "/home/xxxx/.local/lib/python3.6/site-packages/pyocd/__main__.py", line 468, in do_flash 12: with session: 13: File "/home/xxxx/.local/lib/python3.6/site-packages/pyocd/core/session.py", line 284, in __enter__ 14: assert self._probe is not None 15: AssertionError 16: ERROR: command exited with status 1: pyocd flash -e sector -t nrf52 -f 4000000 /home/xxxx/zephyrproject/zephyr/build/zephyr/zephyr.hex
デバイスはnRF52になっているようだ。
これがreel_boardというものらしい。
いまボードがないので、QEMUでやってみよう。
reel_boardと同じ要領でqemu_x86にしてみたのだが、既にreel_boardようになっているというエラーになった。
--pristineオプションを付けるとビルドが進んだ。。のだが、すぐこけた。
~/.zephyrrcにArm用の設定を追加していたので、そこをコメントアウトしてターミナルを立ち上げ直す。
$ west build -b qemu_x86 samples/hello_world --pristine
$ file build/zephyr/zephyr_prebuilt.elf
build/zephyr/zephyr_prebuilt.elf: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), statically linked, with debug_info, not stripped
$ west build -t run
SeaBIOS (version rel-1.12.1-0-ga5cab58e9a3f-prebuilt.qemu.org)
Booting from ROM..Optimal CONFIG_X86_MMU_PAGE_POOL_PAGES 9
***** Booting Zephyr OS build v2.0.0-rc1-10-g10ffef93e639 *****
Hello World! qemu_x86
Hello World!って出てきたので、動いたのだろうか?
まあ、そういうことにしておこう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。