2019/08/17

Zephyr (6)

ここまでエミュレータで動かしただけだったので、そろそろ実機で動かしたいところだ。

動かしたいところなのだが・・・夏休みを終えて作業場に戻ってきてしまった。
となると、作業場のPCにもZephyrの環境を作りたい。
今までのPCは何だったかというと、移動用のPCだったのだ。

作業用PCもWindowsなのだが、同じようにWSLにインストールするのも面白味がない。
それに、WSLだとUSBが使えないので、ウェストフラッシュ!(west flushのこと)が使えないのだ。
だからWindows Nativeのインストールをしよう。

 

というわけで、今回はまたZephyr v2.0.0-rc1をインストールする話だ。 

https://docs.zephyrproject.org/latest/getting_started/index.html

pythonのことはスルーして、required toolsのインストールを行う。

https://docs.zephyrproject.org/latest/getting_started/installation_win.html

前回は、ここのOption 2になるはずだ。
今回はOption 1。recommendedだから、すんなりいくだろう。

PowerShellでもよいらしいが、私はcmdしか知らん。
そして、chocolateyというツールを使うらしい。思い出せないが、他の環境を作るときにこの手のツールを使ったことがある。Windows用のパッケージマネージャーの1つだ。
sudo …じゃなくてAdministratorでインストールする方を選択。そうじゃない方はめんどくさそうだったから。

何も考えずにchocoを使ってインストールしたのだけど、Noteを見ると、別に手動でインストールしてもよいらしい。
だが、やってしまったのだ。Option1の5と6を実行すると、WindowsのPATHに追加されていた。

image

まあ、インストールの説明って、どうしてもそうなるよな。
私も最近までインストールの資料を作っていて、細かい説明を書くのが面倒・・というか無理になってきたので、Ubuntuのaptを使った説明しか書かない、みたいなことをやっていたのだ。

image

binの中を見てみたけれど、gitなんかはコマンドが入ってないな。pythonもない。
ただ、pythonをcmd.exeで実行すると、Microsoft Storeのアプリが立ち上がってPythonアプリのインストールが出てくる。
いや、gitもpythonも、もうインストールされているのよ?
そこは考慮してくれないの??
いま気付いたけど、cmakeはProgram Filesにインストールしたの???

再起動して分かったが、cmakeもgitもProgram Filesにインストールされていて、コントロールパネルの「プログラムと機能」にも出ていた。 
「プログラムと機能」にCMakeが出ていたので「昔インストールしてたやつだろう」と思って削除したら消えていたので分かった。。。


あれこれやって、gitにもPATHを通して、west initからやり直す。
そして、”Zephyr (2)”の要領でZEPHYR_TOOLCHAIN_VARIANT=hostにして、ボードはqemu_x86にする。

そうすると、「指定されたファイルがが見つかりません」になった。
おそらくdts.cmakeの${CMAKE_C_COMPILER}だろう。
Windowsの場合、標準のコンパイラなどないから、gccなどをインストールするのだろう。

 

でも、そうするとWSLでいいやん、という気分になるので、QEMUを使うのは止めよう。

set ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
set BOARD=reel_board
set GNUARMEMB_TOOLCHAIN_PATH=C:\Winappli\gcc-arm-none-eabi-8-2019-q3-update-win32

こんなのをzephyrrc.cmdというファイルに保存して、c:\Users\xxxxの直下に置いた。west initなどしてダウンロードしたzephyr-env.cmdは、%userprofile%\zephyrrc.cmdを読み込むようになっているのだ。
west buildは、通った。

 

そして!
ようやくwest flashところまでやってきた。

D:\Prog\Zephyr\zephyr>west flash
-- west flash: rebuilding
ninja: no work to do.
-- west flash: using runner pyocd
-- runners.pyocd: Flashing file: D:/Prog/Zephyr/zephyr/build/zephyr/zephyr.hex
0000405:WARNING:common:STLink and CMSIS-DAPv2 probes are not supported because no libusb library was found.
No connected debug probes
0000417:CRITICAL:__main__:uncaught exception:
Traceback (most recent call last):
  File "c:\python37\lib\site-packages\pyocd\__main__.py", line 338, in run
    self._COMMANDS[self._args.cmd](self)
  File "c:\python37\lib\site-packages\pyocd\__main__.py", line 468, in do_flash
    with session:
  File "c:\python37\lib\site-packages\pyocd\core\session.py", line 284, in __enter__
    assert self._probe is not None
AssertionError
ERROR: command exited with status 1: pyocd flash -e sector -t nrf52 -f 4000000 D:/Prog/Zephyr/zephyr/build/zephyr/zephyr.hex

私としてはpyocdじゃなくてJ-Linkを使ってやりたいのだがね。

Nordic nRF5x Segger J-Link
https://docs.zephyrproject.org/latest/guides/tools/nordic_segger.html

残念ながら、west flashではできないようだ。
あれ・・・私がWSLを使わないでセットアップした理由はなんだったっけ。。。


ともかく、実機に焼いて動かす。
書いてあるとおりにHEXを焼いて、RTT Viewerを起動。
何も出ない。

 

そもそも、printk()が自動的にRTTを使ってくれるのかどうかわかっていない。
単にUARTに吐き出すだけかもしれない。
もう少しわかりやすく、LEDの点滅をさせよう。

https://docs.zephyrproject.org/latest/samples/basic/blinky/README.html

west build samples\basic\blinky --pristine
nrfjprog --eraseall -f nrf51
nrfjprog --program build\zephyr\zephyr.hex -f nrf51
nrfjprog --reset -f nrf51

なんか出た。
使ったボードはPCA10028じゃないけど、LED0のポートはGPIOとして使えるようになっていたので、そこにつなげた。

image

 

せっかくなので、オシロで間隔を測った。
若干、1秒よりも短いが、まあ仕方ないか。

image

 

あっさり動いたように書いたが、最初は別のGPIOを使おうとして動かなかったのだ。
ポート番号さえあってりゃいいんだろう、と思っていたけど、nRF51はGPIO0.xxという割り当てなので、GPIO0のところをdevice_get_binding()でやってやらんといかんらしい。

ここら辺になると、そろそろZephyrでの書き方というものを調べねばならぬだろう。

0 件のコメント:

コメントを投稿

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

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