Spresenseの開発環境をRaspberryPiで作ってみる


はじめに

ソニーから発売されているSpresenseはGNSSによる位置測位や、ハイレゾオーディオ、
ソニー製イメージセンサを使ったカメラ、そしてLTE接続などに対応した高機能ボードです。

公式から公開されている開発環境はWindows/Linux/macOSですが、Linuxはどうやらx86_64環境だけに対応している模様。
今回はaarch64(ARM 64bit)であるRaspberryPiを使ってSpresenseで遊んでみようと思います。

用意するもの

Spresense

今回はSpresenseメインボードとLTE拡張ボードを使ってみます。

ここで購入しました。
https://www.switch-science.com/catalog/3900/

RaspberryPi

今回は開発環境をRaspberryPi 4 model Bを使いました。発熱がすごいので金属ケースも追加で買いました。
ここで購入しました。
https://www.switch-science.com/catalog/6370/

接続方法

RaspberryPi 4 model BはほぼほぼPCと同一なので特にこれといった特殊な接続はないです。
RaspberryPi 4 model BのUSBポートにSpresense MainボードのUSBをUSBケーブルで接続するだけです。

RaspberryPiの作業概要

  1. RaspberryPiにUbuntuをセットアップ
  2. 公式の手順で環境セットアップ
  3. SPKツールのビルド
  4. 書き込みツールのビルド

RaspberryPiにUbuntuをセットアップ

@y-tsutsuさんのページを参考にセットアップしました。
Raspberry Pi 4でUbuntuデスクトップを動かして遊ぶ

公式の手順で環境セットアップ

まずは公式の手順でセットアップしちゃいます。
公式の手順はSpresense SDK スタートガイド (CLI 版)に記載されています。

ターミナルを開く

すべてはターミナルを開いてから始まります。
Ctrl + Alt + t キーを同時押してサクッと立ち上げます。

シリアル通信の設定

Spresense MainボードとのUART接続は以下のコマンドを実行すると可能になる。
コマンド実行後RaspberryPiを再起動しないといけないので要注意。


$ sudo usermod -a -G dialout $USER

ツールチェーンのインストール

ツールチェーンはスクリプトで一括インストールできる。
スクリプトをダウンロードして、bashで実行するだけのようだ。
内部でsudoを実行しているのでパスワードが1回聞かれます。要注意!


$ wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh
$ bash install-tools.sh -r

ツールチェーンの有効化

ツールチェーンの有効化というよりは、ツールチェーンのPATHを設定している模様。


$ source ~/spresenseenv/setup

.bashrc に spresenseenv/setup を追加

毎度このコマンドを実行するのはダルいので以下のコマンドで自動実行されるようにする。
コマンドの中の >> は2文字が重要!1文字にしないように要注意!


$ echo "source ~/spresenseenv/setup" >> ~/.bashrc

Spresense SDKのダウンロード

Spresense SDKはGithubで公開されているので、git コマンドを使ってダウンロードする。


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

ビルドを試してみる

すんなり、ツールチェーンもインストールできてしまった。
もしかしてこのままRaspberryPiでSpresenseをビルドして遊ぶことができちゃう・・?(だとしたらこの記事の意味...)

やはり対応していないようでビルドに失敗する。
ビルドエラーの失敗の要因は以下のメッセージのようだ。どうやらmkspkというツールがx86_64用にコンパイルされている模様。
これをaarch64デコンパイルしてみたらビルド成功するのでは・・?


/bin/sh: 1: tools/cxd56/mkspk: Exec format error

mkspkを作り直してみよう。

SPKツールのビルド

ここでは、先ほどビルド失敗した要因のSPKツール(mkspk)をaarch64用にコンパイルして使えるようにしてみる。

mkspkのソースコードは spresense/nuttx/tools/cxd56 に有ったのでこれをコンパイルしてみる。


$ cd spresense/nuttx/tools/cxd56
$ make -f Makefile.host clean
$ make -f Makefile.host

試しに実行してみる。

おぉ!formatエラーから解放されたようだ!
これを spresense/sdk/tools/linux/ にコピーすればCleanしても使い続けられるようなので次のコマンドでコピーする。


$ cp -a mkspk ../../../sdk/tools/linux/

改めてSpresenseをビルドしなおしてみる。


$ cd spresense/sdk
$ ./tools/config.py examples/hello
$ make -j

めでたくビルドが通った!
次はビルドした nuttx.spk をSpresenseに書き込んでみる。

おっと、、、書き込みのツールもx86_64用にコンパイルされているようだ。
flash_writerも作り直してみよう。

書き込みツールのビルド

ここでは先ほど失敗した nuttx.spk の書き込みに使う flash_writer をaarch64用にコンパイルしてみる。

flash_writer のソースコードは spresense/sdk/tools/flash_writer にあるようだ。
この中の README.md によると pyserialpyinstaller が必要なので、次のコマンドでサクッとインストール。


$ pip install pyserial
$ pip install pyinstaller

そして、 Makefile も用意されているのでコンパイルも make を実行するだけでよいらしい。


$ cd spresense/sdk/tools/flash_writer
$ make

無事にコンパイルできたようだ。
試しに、 nuttx.spk をSpresenseに書き込んでみる。


$ cd spresense/sdk
$ ./tools/flash.sh -c /dev/ttyUSB0 nuttx.spk

おぉ!書き込みもできた!

続いて試しにSpresenseのターミナルを minicom で開いてみる。


$ minicom -D /dev/ttyUSB0

ビルドしたものでターミナルを開くこともできた!

★minicomで開くときは Hardware Flow ControlNo にしておく必要があるので要注意。

最後に

Spresense SDKの開発環境をWindowsで用意している人は、そのセットアップの複雑さやビルド時間の長さで困っている人も多いと思います。
より安価で準備できるRaspberryPiを使うことでそれが少しでも改善すればうれしいです。

また、今回 mkspkflash_writer を再作成する方法を紹介しましたが、これを一発で行えるpatchファイルを作ったので、
是非使ってみてください。

更新ファイル(spresense-aarch64.tar.bz2)ダウンロード

反映方法


$ cd spresense/
$ tar xvf spresense-aarch64.tar.bz2