Help us understand the problem. What is going on with this article?

SpresenseをWindows10(WSL)で開発する

More than 1 year has passed since last update.

噂のSpresenseが届いたぞ

すごいぞソニー、(SPIRITZERとして発表した1年前から)待ってたぞソニー

重さは5.9g GNSS込みでこのサイズ感なのでロボットやドローンにもってこいなだな
ただし本体についてるGPIOは1.8Vなのでこういうレベル変換が必要

何がすごいってこのブロック図がやばい
メインプロセッサはCortex-M4の6コアだけど、GNSS用のCortex-M4とIO用のCortex-M0+も乗ってる
大奮発だな!

早速開発環境を用意するぞ

SpresenseはNuttXというPOSIXなリアルタイムOSで動いている
ちなみにドローンのコントローラで有名なPixHawkも実はNuttXで動いてたりする

Arduino?男は黙ってRTOSだぞ
...別に否定するつもりはないんですが、Arduinoだと今のところマルチコア使うプログラムは書けないそうで
価格帯からしても入門者向けなマイコンではないんじゃないかな

けどLinux用意するの面倒だなぁ (USBブートとか仮想とかラズパイとかあるけどさ)

Windows10上で開発できるようにする

Windows Subsystem for Linuxを利用します ちょっと前までBash on Ubuntu on Windowsとか呼ばれてたあれです。
わたしゃコレとゲーム画面録画機能がwindows10最大の恩恵だと思ってます

2018/9/18
・Windows10 Pro 1803 (April 2018 Update)
・WSL Ubuntu 16.04 LTS (Linux 4.4.0-17134-Microsoft)
・Spresense SDK v1.0.1
所要時間:おおよそ45分(WSL導入に時間がかかる)

始める前に

Linuxにほとんど触ったことないって人は、コマンドをググりながら頑張ってね
それと指定のフォルダでコマンドライン(cmd.exe)の作業をしたいとき、

エクスプローラでフォルダを開き、そのアドレスバーにcmdと打つと

そのフォルダを作業フォルダとしてcmdが呼べます
またアドレスバーにbashと打つとWSL(ubuntu)が起動できます
さらにcmd上でwsl lsのように頭にwslを付けるとlinuxコマンドが使えます

今回はNuttXのビルドをWSLで、書き込みをcmdで行うのでややこしいです

1、WSLをインストールする

https://qiita.com/Brutus/items/f26af71d3cc6f50d1640
こちらとか参考に
以下ざっくり説明
1、スタートから「Windowsの機能の有効化または無効化」を検索
2、「Windows Subsystem for Linux」にチェックを入れ、指示に従い再起動
3、Microsoft StoreでLinuxと検索しUbuntuを入手、起動してユーザー名とパスワード設定
4、レポジトリを日本(jaist)に設定して更新

$ sudo sed -i -e 's%http://.*.ubuntu.com%http://ftp.jaist.ac.jp/pub/Linux%g' /etc/apt/sources.list
$ sudo apt-get update
$ sudo apt-get upgrade

linuxコマンドなんて使ったことないって人はググってね
upgradeは時間がかかるのでほっといて次の作業に移りましょう

2、雑多な準備

作業フォルダを用意します
今回は私の好みでユーザーフォルダ内にwsというフォルダを作って、作業フォルダとします
C:\Users\ユーザー名\ws

書き込みに必要なCP2101N(シリアル変換)のドライバーを入手
https://jp.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers
zipを解凍し、CP210xVCPInstaller_x64.exeに従いドライバーを導入してください
スタートでデバイスマネージャを検索し実行します
ポート(COMとLPT)の項目にSilicon Labs CP210x USBto UART Bridge (COM3)
という項目があれば成功です COMポート番号を覚えておいてください

3、WSL内にSpresense SDKを構築

公式wikiGithubのREADMEを参考に

作業フォルダC:\Users\ユーザー名\wsでWSLを呼び出します(アドレスバーにbashと入力)

ツールの準備

$ sudo apt-get install make git gperf libncurses5-dev flex bison gcc-arm-none-eabi

Spresense SDkを取ってきます (wiki手順が間違ってます修正されたようです 9/3追記)

$ git clone --recursive https://github.com/sonydevworld/spresense.git
$ git submodule foreach git checkout master

kconfigの取得とリポジトリのクローン (wiki手順だと失敗?Githubを参照)

$ git clone -n https://patacongo@bitbucket.org/nuttx/tools.git tools
$ cd tools
$ git config core.autocrlf false
$ git checkout 891510d2534287afef6b5c90a375f94442a7e94d
$ cd kconfig-frontends/
$ ./configure
$ make
$ sudo make install
$ sudo ldconfig
$ cd ..
$ cd ..

ブートローダーを以下からダウンロードしてきます (注:2018/8/18現在 このリンクが分かりにくい)
https://developer.sony.com/file/download/download-spresense-firmware-v1-0-000
ws内に移動して解凍し、zipもws内に残しておきます

ブートローダー更新

$ cd spresense/sdk
$ tools/config.py examples/hello
$ ./tools/flash.sh -e /mnt/c/Users/ユーザー名/ws/spresense-binaries-v1.0.000.zip

Update succeed.と表示されれば成功です

ここから、windows側でブートローダーの書き込みを行います

ここからは公式にない自己流です
WSLから書き込むことができなかったため、flash.shが呼び出しているflash_writer.exeを使います

まず、先ほど解凍したブートローダーの中にある
gnssfw.espk loader.espkの2ファイルをコピーし、
/ws/spresense/sdk/tools/windows/フォルダ内に貼り付けます
このwindowsフォルダにてcmd.exeを呼び出します(エクスプローラのアドレスバーにcmd)
以下を実行します(COMポート番号はデバイスマネージャで確認)

cmd.exe
flash_writer.exe -s -c COM3 -d -b 115200 -n gnssfw.espk loader.espk

何事もなく元のcmdに戻ってきたら書き込み成功です cmdを閉じてください
Cannnot open port : COM3 と出た場合、シリアル接続に問題があるようです

最後に、flash_writer.exeをコピーし、/ws/spresense/sdk内に貼り付けます

4、サンプルコードのビルドと書き込み

いよいよサンプルコードのビルドです
なぜかWSLがCPUをフルパワーで使ってくれないので結構時間がかかります
(引き続き/ws/spresense/sdkにてWSLを起動して)

$ tools/config.py --kernel release
$ tools/config.py examples/hello
$ make buildkernel
$ make

これでエラー表示が出ず、sdkフォルダ内にnuttx.spkが生成されれば成功です

書き込みは/ws/spresense/sdkでcmd.exeを呼び出して

cmd.exe
flash_writer.exe -s -c COM3 -d -b 115200 -n nuttx.spk

これで書き込めました
WSLからscreenでシリアル接続してみます(Teraterm等お好みで)
デバイスは(COM3の時)ttyS3、ボーレートは115200、フロー制御:なし です

sudo screen /dev/ttyS3 115200 -fn

enterを押すとnshターミナルが出てきます
helpで実行可能なコマンドと先ほど書き込んだサンプルコードが見えます

helloでサンプルコードが実行されます

screenはCtrl + a k y で終了できます (終了できないとプロセスが残るのでタスクマネージャから消してください)

いまのところ手元には拡張ボードがないので、ほかに試せるサンプルはgnssぐらいですね

デバッガはまた今度

だって拡張ボード買うお金ないんだもん
VScodeにopenOCDを連携させるつもりです
いずれはVScodeからビルドも呼び出せるようにしたい

感想

twitterで様子見してましたが、Ubuntu導入からつまずいてる人がちょくちょく見られるので書いてみました

Bash on Windowsが初めて登場した時はデバイスが繋がらなくてはーつっかえ...でしたが、いつの間にかUSBストレージやらシリアルやら使えるようになってたんですね
GithubにはdockerによるSDK導入も書いてあったんですが、私ではどうにもWSLにdockerが入らなかったので諦めました
Kconfigを使ってるので、完全にwindowsネイティブでビルドするのは今後も難しいんですかね

maker faire 2017で発表されたときはマルチコアなマイコンにどんな開発環境が用意されるのか不安でしたが、wikiを見た感じわりと丁寧に用意されてるようで安心しました
立ち位置的にはmbedやラズパイZERO(Edisonなんてなかった)がライバルといったところでしょうか
やや玄人向けですが、ハイグレード・マイコンとしてガシガシ使っていきたいです

...ところで、Spresenseってなんて読むんですか...?

FlyingYacht
好きなものはmbedとかラズパイとか、嫌いなものはrosとVS 以前は学生室内飛行ロボットコンテストに出てました。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away