Windows10(WSL)でSpresense SDKを使用する (令和元年5月版)

#このページについて
Windows10上で Spresense SDK を使用した開発を行うための環境を構築する手順です。

#Spresense SDKについて
[ソニーが提供しているチュートリアルのページ](https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment) にかかれている通り、Spresense SDK は 64bit Linux Ubuntu でしか動作しません。
しかし、Windows10 には Windows Subsystem for Linux (通称WSL) が使用でき、Windows10上でUbuntuを動作させることが可能です。
今回は、このWSL上でSpresense SDKを動かします。

## と、えらそうに書いていますが...
これ以降に書くことは、ソニーが提供しているヘルプページを参考にしつつ、先人たちの知恵を最新化しただけです。先人の方々には感謝いたします。

なお、以下の先人たちの知恵を ~~丸パクリ~~ 参考にいたしました。
- [WSL（Windows Subsystem for Linux）を使ってみた](https://qiita.com/Brutus/items/f26af71d3cc6f50d1640)
- [SpresenseをWindows10(WSL)で開発する](https://qiita.com/FlyingYacht/items/0f49ed82b4912381ffe7)

# Windows 10 on Spresense SDK の環境構築手順
## WSLをインストールする
WSLがインストールされていない方は、以下ページを参考にWSLをインストールしてください。
[WSL（Windows Subsystem for Linux）を使ってみた](https://qiita.com/Brutus/items/f26af71d3cc6f50d1640)

WSLが使えるようになると、Windowsメニューに Ubuntu が追加されます。
![ubuntu_menu.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/c9b1f3f1-3ed8-b0fb-7d36-4bd83a45b396.png)

### 念の為アップデート
Ubuntuを起動して、コンソールから以下を入力し、OSを最新化しておきましょう。

```
$ sudo apt-get update
$ sudo apt-get upgrade
```

## Spresense メインボードをPCに接続する
Spresense メインボードをUSBケーブルでPCに接続します。
おそらくドライバは自動的にインストールされると思います。

接続後、デバイスマネージャーを開いて、シリアルポートの番号をメモっておきます。
![devicemanager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/169018/cfa069e3-9e62-877e-1494-0d4bc1cdce54.png)

# Spresense SDKの開発環境のインストール

あとは、[Spresense SDKのチュートリアル](https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment) のページに書かれている通りの手順で進められます。

WSLで動かすための注意点としては、

- Spresenseのシリアルポートが `COM55` として認識されている場合は、Ubuntu上では `/dev/ttyS55` として使用できます。
- コマンドから `ttySXX` を使う場合は、頭に `sudo` をつけてコマンドを実行してください。WSLでは root でないとシリアルポートが使えないようです。（※私の環境だけかも？？？）

##手順
以下、ほぼ [Spresense SDKのチュートリアル](https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment) のコピペですが、以下の手順で進められると思います。

### 必要なパッケージのインストール

```
$ sudo apt-get install git gperf libncurses5-dev flex bison gcc-arm-none-eabi genromfs pkg-config autoconf automake cmake --install-recommends
```

### kconfig-frontends を取得し、インストール

```
$ git clone https://bitbucket.org/nuttx/tools.git
$ cd tools/kconfig-frontends/
$ ./configure --disable-shared
$ make
$ sudo make install
```

### Spresense SDK リポジトリからソースコードをダウンロード

```
$ git clone --recursive https://github.com/sonydevworld/spresense.git
```

### サンプルアプリケーション "Hello, World!" のビルド

```
$ cd spresense/sdk
$ tools/config.py --kernel release
$ tools/config.py examples/hello
```

ここまで実行すると、以下のような表示がされると思います。

```
WARNING: New loader v1.X.X is required, please download and install.
         Download URL   : https://developer.sony.com/file/download/download-spresense-firmware-v1-X-XXX
         Install command:
                          1. Extract loader archive into host PC.
                             ./tools/flash.sh -e <download zip file>
                          2. Flash loader into Board.
                             ./tools/flash.sh -l /home/hoge/spresense/firmware/spresense -c <port>
```

一旦 **この表示をメモしておきつつ** (ここ重要) 、ビルドを続けます。

```
$ make buildkernel
$ make
```

### ブートローダーのインストール

先程メモした表示のとおりの手順を実行します。

1. ダウンロードURLからファームウェアファイルをダウンロードします。  
なお github からダウンロードした SDKのバージョンと、必要なファームウェアのバージョンはリンクしていますので、必ず表示されたURLのファイルをダウンロードします。
2. 以下の通りコマンドを実行します  

```
$ ./tools/flash.sh -e /home/hoge/spresense-binaries-vX.X.X.zip (←ダウンロードしたファームウェアファイルのフルパス)
$ sudo ./tools/flash.sh -l /home/hoge/spresense/firmware/spresense -c /dev/ttySXX (←パス・シリアルポートの番号を自分の環境に合わせる)
```

なお、[先人の知恵](https://qiita.com/FlyingYacht/items/0f49ed82b4912381ffe7) では、ここで `flash_writer.exe` を使用したWindows独自のｺﾞﾆｮｺﾞﾆｮな方法を行っていますが、現（令和元年5月）時点ではそのようなｺﾞﾆｮｺﾞﾆｮの方法は必要なく、ソニーのチュートリアル通りの方法で進められます。

### Spresense メインボードにサンプルをインストール

```
$ sudo tools/flash.sh -c /dev/ttySXX nuttx.spk (←シリアルポートの番号を自分の環境に合わせる)
```

正しくインストール出来た場合、Spresenseメインボードが自動的に再起動します。

## 動作確認
### minicomをインストール

`minicom` をインストールしていない場合は、パッケージを追加します。

```
$ sudo apt-get install minicom
```

### Spresense メインボードのコンソールに接続する

```
$ sudo minicom -D /dev/ttySXX -b 115200 -s  (←シリアルポートの番号を自分の環境に合わせる)
```

`configuration` のメニューが表示されますので、`Serial port setup` を選択し、`Hardware Flow Control` を `No` にします。
続いて、 Enter Esc キーの順に入力し次のように表示されれば正常に起動されています。

```
nsh>
```

サンプルを実行してみます。

```
nsh> hello
Hello, World!
```

#まとめ
ということで、Windows 環境でも Spresense SDK が簡単に利用できます。
とっても便利。

#最後に
あらためて、先人の知恵達に感謝いたします。

##参考にしたページ
- [WSL（Windows Subsystem for Linux）を使ってみた](https://qiita.com/Brutus/items/f26af71d3cc6f50d1640)
- [SpresenseをWindows10(WSL)で開発する](https://qiita.com/FlyingYacht/items/0f49ed82b4912381ffe7)
- [Spresense SDK チュートリアル](https://developer.sony.com/ja/develop/spresense/developer-tools/get-started-using-nuttx/set-up-the-nuttx-environment)