はじめに
ソニーから発売されている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の作業概要
- RaspberryPiにUbuntuをセットアップ
- 公式の手順で環境セットアップ
- SPKツールのビルド
- 書き込みツールのビルド
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
によると pyserial
と pyinstaller
が必要なので、次のコマンドでサクッとインストール。
$ 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 Control
を No
にしておく必要があるので要注意。
最後に
Spresense SDKの開発環境をWindowsで用意している人は、そのセットアップの複雑さやビルド時間の長さで困っている人も多いと思います。
より安価で準備できるRaspberryPiを使うことでそれが少しでも改善すればうれしいです。
また、今回 mkspk
や flash_writer
を再作成する方法を紹介しましたが、これを一発で行えるpatchファイルを作ったので、
是非使ってみてください。
更新ファイル(spresense-aarch64.tar.bz2)ダウンロード
反映方法
$ cd spresense/
$ tar xvf spresense-aarch64.tar.bz2