2019/08/13

Zephyr (1)

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 update

pip3 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 件のコメント:

コメントを投稿

コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。

注: コメントを投稿できるのは、このブログのメンバーだけです。