1. はじめに
このページでは、CLI (コマンドラインインターフェース) を用いて Spresense SDK のインストール、セットアップならびに簡単なサンプルアプリケーション Hello, World! の作成について解説しています。Spresense SDK の基本的な使い方を学ぶことができます。
2. 開発ツールのセットアップ
Spresense SDK はLinux/Windows/macOSで開発を行うことができます。
ユーザーが使用する環境に応じて以下のセットアップを行ってください。
サポートされているオペレーティングシステム
-
Linux (64bit)
-
Ubuntu 16.04以降
-
-
Windows (64bit)
-
10 (MSYS2)
-
11 (WSL2)
-
-
macOS
-
High Sierra (10.13)以降
-
| 32bit版 OS には対応していません。 |
2.1. Linux向けセットアップ
-
シリアル通信の設定
以下のコマンドを実行し、使用するユーザーを
dialoutグループに追加します。sudo usermod -a -G dialout <user-name>コマンドを実行した後、再起動してください。再起動するまで設定は有効になりません。
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh bash install-tools.sh
wget や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.shを取得し-rオプションを付与してinstall-tools.shを実行してください。bash install-tools.sh -r既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setupを実行した後にarm-none-eabi-gcc -vを実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setupこのコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrcに上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/binにインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git既に git clone済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。
2.2. Windows10(MSYS2)向けセットアップ
-
下記のサイトからMSYS2のインストーラをダウンロードし、インストールします。
-
ビルドに必要なツールをインストールします。スタートメニューにある
MSYS2 MSYSを起動し、以下のコマンドを実行します。一緒にインストールされる MSYS2 MinGW 64-bitなど他のターミナルを使用するとエラーが発生し正しくビルドできません。curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh bash install-tools.sh
curl や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.shを取得し-rオプションを付与してinstall-tools.shを実行してください。bash install-tools.sh -r既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setupを実行した後にarm-none-eabi-gcc -vを実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setupこのコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrcに上記コマンドを追加してください。ツールチェーンは /opt/spresenseenv/usr/binにインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git既に git clone済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
| Windows 10/11 環境にて Silicon Labs の最新ドライバ (v11.2.0) を使用すると、USB の通信にエラーが発生してプログラムの書き込みに失敗することがあります。 上記 URL より v11.1.0 をダウンロードしてお使いください。 |
2.3. Windows11(WSL2)向けセットアップ
-
WSL2のインストール
WSL2をまずインストールします。
-
PowerShellを開きます
-
wslコマンドを実行してWSL2をインストールします。wsl --install以下のようなコマンドでWSL2としてインストールするUbuntuのバージョンを指定することができます。(以下のコマンドは Ubuntu 20.04をインストールする場合の例です。)
wsl --install -d Ubuntu-20.04 -
WSL2のインストール後、Windowsのメニューに
Ubuntuというアプリケーションが追加されるので、そのアプリケーションを開きます。
-
初回起動の場合は以下のようにアカウント作成を求められるので、ユーザ名・パスワードを入力します。
-
アカウントが作成し以下のようにコンソールが開けばWSL2のセットアップ完了です。
-
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
wget https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh bash install-tools.sh
wget や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.shを取得し-rオプションを付与してinstall-tools.shを実行してください。bash install-tools.sh -r既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setupを実行した後にarm-none-eabi-gcc -vを実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setupこのコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bashrcに上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/binにインストールされます。 -
Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git既に git clone済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
| Windows 10/11 環境にて Silicon Labs の最新ドライバ (v11.2.0) を使用すると、USB の通信にエラーが発生してプログラムの書き込みに失敗することがあります。 上記 URL より v11.1.0 をダウンロードしてお使いください。 |
2.4. macOS向けセットアップ
-
Apple社が提供している開発ツールをインストールします。 ターミナルを起動し、以下のコマンドを実行します。
xcode-select --install -
以下のサイトからPython3のインストーラをダウンロードし、インストールします。
-
wgetをインストールします。(一部のNuttXアプリケーション・ツールをビルドする際に必要になります)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" brew install wget
-
flockをインストールします。(SDKv3.2.0以降のバージョンを使用する際に必要になります)
brew tap discoteq/discoteq brew install flock
-
ビルドに必要なツールをインストールします。ターミナルを起動し、以下のコマンドを実行します。
curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh bash install-tools.sh
curl や install-tools.sh をプロキシ環境下で実行する場合は、事前にお使いのプロキシサーバーを設定してください。
export http_proxy=http://プロキシーサーバー名:ポート番号 export https_proxy=http://プロキシーサーバー名:ポート番号
SDKv2.3, v3.0リリースにて、GNU Arm Embedded Toolchain (コンパイラ) のバージョンを更新しています。
SDK version GNU Arm Toolchain version SDKv3.0以降
gcc-arm-none-eabi-10.3-2021.10
SDKv2.3以降
gcc-arm-none-eabi-9-2019-q4-major
SDKv2.2以前
gcc-arm-none-eabi-7-2018-q2-update
コンパイラの更新を含めて再インストールを行う場合は、最新の
install-tools.shを取得し-rオプションを付与してinstall-tools.shを実行してください。bash install-tools.sh -r既にインストール済みのコンパイラバージョンを確認するには、
source ~/spresenseenv/setupを実行した後にarm-none-eabi-gcc -vを実行してください。最終行にバージョン情報が表示されます。arm-none-eabi-gcc -v (snip) gcc version 10.3.1 20210824 (release) (GNU Arm Embedded Toolchain 10.3-2021.10)インストールしたツールを使用可能にするために、以下のコマンドを実行します。
source ~/spresenseenv/setupこのコマンドは、ターミナルを開くごとに実行する必要があります。このコマンドを省略したい場合は、ホームディレクトリ以下の
.bash_profileに上記コマンドを追加してください。ツールチェーンはホームディレクトリ以下の spresenseenv/usr/binにインストールされます。 -
ターミナルで以下のコマンドを実行し、Spresense SDK リポジトリからソースコードをダウンロードします。
git clone --recursive https://github.com/sonydevworld/spresense.git既に git clone済みの spresense.git リポジトリを更新し、指定バージョンに更新する場合は 指定バージョンのSDKを取得する方法 をご参照ください。 -
シリアルドライバのインストール
シリアルドライバのインストールは、Spresense ボードをPCに接続する前に行ってください。 Spresense ボードをUSBシリアルで接続するために、ドライバをインストールする必要があります。下記リンクよりドライバをダウンロードし、インストールしてください。
High Sierra (10.13)以降のmacOSにこのドライバをインストールする場合、インストール中にセキュリティに関する警告が表示されます。 「システム環境設定 > セキュリティ」 メニューを開き、「一般」にある「開発元"Silicon Laboratories Inc"のシステムソフトウェアの読み込みがブロックされました。」と表示されている右にある「許可」ボタンをクリックしてください。この操作が行われない場合、シリアルで接続することができません。
2.5. USB シリアルポートの確認方法
Spresense メインボードと PC を USB で接続します。
2.5.1. Linux 上でのシリアルポートの確認方法
-
ターミナルを開きます。
-
次のコマンドを入力してください。
dmesg | grep "cp21.*attached" [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0 -
上記の例では、 ポート名は
/dev/ttyUSB0になります。
3. サンプルアプリケーション "Hello, World!" の実行手順
SDKv1.xの旧方法はこちら
"Hello, World!" サンプルアプリケーションのビルドから実行までの一連の流れを説明します。
コンフィグレーション方法やビルド方法の詳細については以降の章を参照してください。
3.1. コンフィグレーション手順
ダウンロードした spresense/sdk フォルダに移動し、Kernel および SDK のコンフィギュレーションを行います
-
sdkディレクトリへ移動します。cd spresense/sdk -
SDKのコンフィギュレーションを行います。
今回は
helloというExampleアプリケーションをビルドするのでexamples/helloを指定します。tools/config.py examples/hello
WARNING: New loader vX.Y.Z is required, please download and install. のようなメッセージが表示された場合は、適切なブートローダーをインストールする必要があります。 ブートローダーのインストール を参照し、ブートローダーをインストールしてください。
|
3.2. ビルド手順
-
SDK のビルドを行います。
make
|
SDKv2.3以降、 make -j
|
sdk フォルダに nuttx.spk というバイナリイメージ作成されます。このバイナリイメージは Spresense で実行可能なアプリケーションであり、Spresense メインボードにアップロードして実行することができます。
3.3. 書き込み手順
tools/flash.sh を用いて、ビルドしたバイナリイメージ nuttx.spk を Spresense ボードに書き込みます。
-
Spresense メインボードと PC を USB ケーブルで接続します。
-
tools/flash.shスクリプトを使用して書き込みを行います。-cオプションで指定する <port> は USB シリアルポートの確認方法 を参照してください。Linux 環境でのコマンド例
tools/flash.sh -c /dev/ttyUSB0 nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
Windows 環境でのコマンド例
tools/flash.sh -c COM9 nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
macOS 環境でのコマンド例
tools/flash.sh -c /dev/cu.SLAB_USBtoUART nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
-
書き込みが完了すると、ボードは自動的にリブートし書き込まれたイメージを実行します。
WARNING: New loader vX.Y.Z is required, please download and install. のようなメッセージが表示された場合は、適切なブートローダーをインストールする必要があります。 ブートローダーのインストール を参照し、ブートローダーをインストールしてください。
|
3.4. シリアルターミナル上での動作確認
ここではシリアルターミナルを用いて、実行されているプログラムの動作を確認します。
Linux/macOS 環境の場合、 screen や minicom などのシリアルターミナルソフトを、
Windows 環境の場合は、 Tera Term などのシリアル通信ソフトを使用してください。
シリアル通信設定は以下の通りです。
ボーレート |
115200 |
データ |
8 bit |
パリティ |
none |
ストップ |
1 bit |
フロー制御 |
none |
シリアルターミナルの使用方法に関する詳細は、それぞれのマニュアルなどを参照してください。
ここでは screen コマンドを使用する際の例を挙げます。Linuxの場合は、以下のコマンドで screen コマンドをインストールしてください。
sudo apt install screen
-
次のコマンドでシリアルターミナルを開きます。
screen /dev/ttyUSB0 115200以下のようにNSHプロンプトが表示されればSpresense メインボードは正しく起動しています。
NuttShell (NSH) nsh>
-
helloコマンドを実行しHello, World!と表示されれば完了です。NuttShell (NSH) nsh> hello Hello, World!! nsh>
screenを終了させるにはCtrl+aの後にkを押すと、Really kill this window [y/n]と表示されるので、yを押すと切断&終了できます。
Spresense SDK開発環境に含まれている簡易シリアルターミナルツール (miniterm) を使用することもできます。
| 環境 | ツールパス |
|---|---|
Linux |
tools/linux/miniterm |
Windows |
tools/macos/miniterm |
macOS |
tools/windows/miniterm.exe |
Windows環境での実行例を以下に示します。
-
--raw --eol LFオプションを付けて、minitermコマンドを実行します。以下のようにシリアルポートリストが表示されます。
./tools/windows/miniterm.exe --raw --eol LF --- Available ports: --- 1: COM5 'Silicon Labs CP210x USB to UART Bridge (COM5)' --- Enter port index or full name:
-
Spresenseボードが正しく接続されている場合、
Silicon Labs CP210x USB to UART Bridgeが表示されます。上記の例では、
1を選択してEnterキーを実行します。以下のようにNSHプロンプトが表示されます。
./tools/windows/miniterm.exe --raw --eol LF --- Available ports: --- 1: COM5 'Silicon Labs CP210x USB to UART Bridge (COM5)' --- Enter port index or full name: 1 --- Miniterm on COM5 115200,8,N,1 --- --- Quit: Ctrl+] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H --- NuttShell (NSH) NuttX-12.3.0 nsh>
事前にCOMポート番号が分かっている場合は、
./tools/windows/miniterm.exe --raw --eol LF COM5
のようにCOMポート番号を引数に指定することでポート番号の確認をスキップして直接接続することもできます。 -
シリアルターミナルを終了するときは、
Ctrl+](Controlキーを押しながら])を実行してください。
4. ビルド方法
この章では、ビルド方法の詳細について説明します。
SDKv1.xの旧方法はこちら
4.1. コンフィギュレーション
NuttXカーネルおよび Spresense SDK は、様々な状況に対応できるよう、ユーザーの目的にあったコンフィギュレーションを行うことが可能です。
コンフィギュレーションは、 tools/config.py を使用して行います。また tools/mkdefconfig.py を使用してユーザーが設定した内容を保存しておくことができます。
tools/config.py および tools/mkdefconfig.py は、内部でLinuxでも使用されているKconfigビルドシステムを使用します。開発ツールのセットアップ を参照して、Kconfigツールをインストールしてください。
cd spresense/sdk tools/config.py -h usage: config.py [-h] [-k] [-l] [-m] [-q] [-g] [-d DIR] [-v] [-i [config [config ...]]] [<config name> [<config name> ...]] Configuration tool positional arguments: <config name> configuration name optional arguments: -h, --help show this help message and exit -k, --kernel DEPRECATED -l, --list list default configurations. show kernel defconfigs with --kernel. -m, --menuconfig run config in "menuconfig" -q, --qconfig run config in "qconfig" -g, --gconfig run config in "gconfig" -d DIR, --dir DIR change configs directory -v, --verbose verbose messages -i [config [config ...]], --info [config [config ...]] show configuration information
cd spresense/sdk tools/mkdefconfig.py -h usage: mkdefconfig.py [-h] [-k] [-d DIR] [-y] [--all] [--verbose] <config name> Make default config from current config positional arguments: <config name> configuration name optional arguments: -h, --help show this help message and exit -k DEPRECATED -d DIR, --dir DIR change configs directory -y overwrite existing defconfig --all DEPRECATED --verbose, -v verbose messages
tools/config.py ツールは、 menuconfig などのフロントエンドおよび定義済みコンフィギュレーション(後述)のロードなどを行います。
tools/config.py tools/mkdefconfig.py はディレクトリ構造に依存しているため、必ず sdk ディレクトリ以下で実行してください。
|
4.1.1. menuconfig, qconfig, gconfig
設定を変更したい場合は、 tools/config.py の以下のオプションを指定し、設定画面を呼び出します。
オプション |
|
|
ncursesライブラリを用いた、CUIメニュー選択 |
|
Qtライブラリを使用したGUIメニュー選択 |
|
gtkライブラリを使用したGUIメニュー選択 |
上記のメニュー選択方式は kconfig-frontend の機能に依存しています。kconfig-frontend をビルドする際のオプションによっては使用できない場合がありますが、いずれの方式でも機能は同等です。
4.1.2. 定義済みコンフィギュレーション(defconfig)
定義済みコンフィギュレーション(defconfig)は、ある機能を使用したい場合に必要な設定の組み合わせを事前に定義したものです。defconfigファイルは spresense/sdk/configs ディレクトリ以下に保存されています。defconfigを使用したい場合は、 tools/config.py ツールの引数にdefconfig名を指定します。defconfig名には、 -l オプションで表示されるdefconfigを指定できます。
定義済みdefconfigのリストは次のようにして確認できます。
tools/config.py --list
(SDK 定義済みコンフィグレーションリストの表示)
定義済みコンフィギュレーションの表示にタブ補完機能を使用することができます。
source tools/build-env.sh tools/config.py (Tab キーを押すと一覧表示されます)
defconfigは同時に複数指定することができます。defconfigを複数指定した場合は、指定されたdefconfigの組み合わせとなります。
tools/config.py device/sdcard feature/wifi
tools/config.py にコンフィグ名を指定した場合は、以前の設定が消えて、指定されたdefconfigが新たにセットされます。
|
defconfigの内容がわからない場合は、-i または --info オプションをを使用することで、指定されたdefconfigの情報が表示されます。
./tools/config.py -i device/sdcard
=== device/sdcard ===
[Description]
This configuration contains required options to use SD card slot.
[Differences]
+CXD56_SDIO=y
4.1.3. 設定の保存
ユーザーが変更した設定は保存しておくことが可能です。以下のコマンドで現在のSDKの設定を <config name> として保存します。
tools/mkdefconfig.py <config name>
保存した設定は tools/config.py に指定することができるようになります。
<config name> に指定した名前が既に存在する場合は、上書きするかどうかの確認が表示されます。
|
tools/config.py と tools/mkdefconfig.py は、 sdk/configs 以下にあるdefconfigを対象に適用/保存を行います。もしユーザーが別のディレクトリでコンフィギュレーションを管理したい場合は、 -d または --dir オプションで保存先を変更することができます。
tools/mkdefconfig.py -d ../path/to/configs <config name>
別のディレクトリに保存したdefconfigを使用する場合は以下のようにします。
tools/config.py -d ../path/to/configs <config name>
ディレクトリの変更は、 -k オプションと組み合わせても使用可能です。
4.2. ビルド
ビルドを行う場合は、以下のように入力します。ビルドを行う前に、コンフィギュレーションを行っておく必要があります。
tools/config.py default tools/config.py -m (設定の変更) make
|
SDKv2.3以降、 make -j
|
ビルドが成功すると sdk ディレクトリ以下に nuttx ファイルと nuttx.spk ファイルができます。
nuttx-
ELF形式の実行ファイルです。デバッガでロードする場合などで使用します。
nuttx.spk-
実機に書き込むためにパッケージングされた独自形式のファイルです。
5. ボードへの書き込み方法
この章ではブートローダ及びビルドしたソフトウェアイメージを Spresense ボードに書き込む方法について説明します。
5.1. Spresense メインボードへのブートローダーの書き込み
ブートローダーのインストール を参照してください。
5.2. Spresense メインボードへのイメージの書き込み
tools/flash.sh を用いて、ビルドしたイメージ nuttx.spk を Spresense ボードに書き込みます。
./tools/flash.sh -h
Usage:
./tools/flash.sh [-c <port> -b <baudrate>] [-B] [-w] [<file> ...]
Optional arguments:
-c: Serial port (default: /dev/ttyUSB0)
-b: Serial baudrate (default: 115200)
-B: Install Bootloader
-r: Remove nuttx(Main Core SPK) and other files from spresense board
-w: Worker load mode
-h: Show help (This message)
<port> に指定するシリアルポートは USB シリアルポートの確認方法 を参照し、環境に合わせて変更してください。
-
Spresense メインボードと PC を USB ケーブルで接続します。
-
次のコマンドで
nuttx.spkを Spresense へ書き込みます。Linux 環境でのコマンド例
tools/flash.sh -c /dev/ttyUSB0 nuttx.spkWindows 環境でのコマンド例
tools/flash.sh -c COM9 nuttx.spkmacOS 環境でのコマンド例
tools/flash.sh -c /dev/cu.SLAB_USBtoUART nuttx.spk -
書き込みが完了すると、ボードは自動的にリブートし書き込まれたイメージを起動します。
|
-b オプションで baudrate を指定して高速に書き込みを行うことができます。 tools/flash.sh -c /dev/ttyUSB0 -b 1000000 nuttx.spk
高速化しすぎるとPC 環境に依存して書き込み時に通信エラーが発生することがあります。 もし、エラーが発生した場合は、USB を抜き差しした後に、baudrate 値を下げて試してください。 |
6. ユーザーアプリの追加方法
SDKv1.xの旧方法はこちら
ユーザーが新しいアプリを作成する場合は、以下の方法があります。
6.1. examplesに追加する
もっとも簡単な方法は、sdk/apps/examples/hello をテンプレートとして使用することです。
sdk/apps/examples/hello をディレクトリごと examples 以下にコピーし、Makefile、Make.defs、Kconfig、hello_main.c の中にある hello の文字列をすべて任意の文字列に置き換えてください。hello_main.c のファイル名も任意のファイル名に変更してください。(アプリ追加例参照)
すべての文字列を置き換えたら、sdk ディレクトリで一旦 make clean をして、tools/config.py でコンフィグメニューを表示します。 追加した項目が表示されるので、それを有効にします。
cd sdk make clean tools/config.py -m
Examples ---> [ ] My first app example (NEW)
Kconfig ファイルを追加または削除した場合は、sdk ディレクトリで make clean を実行することで、コンフィグメニューが更新されます。
|
有効にしたらSDKをビルドします。
make
|
SDKv2.3以降、 make -j
|
作成された nuttx.spk をインストールし、再起動すれば追加したアプリがコマンドとして実行可能になります。
6.1.1. アプリ追加例
config EXAMPLES_MYFIRSTAPP tristate "My first app example" default n ---help--- Enable the my first app example if EXAMPLES_MYFIRSTAPP config EXAMPLES_MYFIRSTAPP_PROGNAME string "Program name" default "myfirstapp" ---help--- This is the name of the program that will be use when the NSH ELF program is installed. config EXAMPLES_MYFIRSTAPP_PRIORITY int "My firstapp task priority" default 100 config EXAMPLES_MYFIRSTAPP_STACKSIZE int "My firstapp stack size" default 2048 endif
|
Kconfigファイル内の |
Kconfig ファイルに定義するオプションシンボルはSDKで一意である必要があります。シンボルが重複した場合、コンフィギュレーションツール実行時に警告が表示されます。
|
-include $(TOPDIR)/Make.defs PROGNAME = $(CONFIG_EXAMPLES_MYFIRSTAPP_PROGNAME) PRIORITY = $(CONFIG_EXAMPLES_MYFIRSTAPP_PRIORITY) STACKSIZE = $(CONFIG_EXAMPLES_MYFIRSTAPP_STACKSIZE) MODULE = $(CONFIG_EXAMPLES_MYFIRSTAPP) MAINSRC = myfirstapp_main.c include $(APPDIR)/Application.mk
上記のPROGNAME、PRIORITYおよびSTACKSIZEのいずれかが設定されていない場合は、コマンドになりません。 |
ifneq ($(CONFIG_EXAMPLES_MYFIRSTAPP),) CONFIGURED_APPS += myfirstapp endif
|
6.2. 別ディレクトリに追加する
ユーザーがリポジトリの外でアプリを管理したい場合は、別のディレクトリを作成し、それをビルド対象に追加することができます。 別ディレクトリをビルド対象に加えるには以下のようにします。
-
任意のディレクトリをsdkと同じディレクトリに作成
-
examplesディレクトリから、Makefile、Make.defsおよび.sdksubdirsをコピー -
上述のexamplesに追加すると同じ手順で、新規に作成したディレクトリ内に任意のアプリケーションを追加
-
sdkディレクトリでmake
6.2.1. 別ディレクトリ追加例
ディレクトリを myapps 、アプリケーションを myfirstapp とした場合の例
|-- sdk
|-- examples
|-- myapps
|-- .sdksubdirs
|-- Make.defs
|-- Makefile
`-- myfirstapp
|-- Kconfig
|-- Make.defs
|-- Makefile
`-- myfirstapp_main.c
MENUDESC = "My Apps" include $(SDKDIR)/tools/Sdk.mk
|
6.3. ツールを使用する
前述のexamplesに追加する手順及び別ディレクトリに追加する手順は、下記ヘルパーツールを使用して簡単に行うことができます。
tools/mkcmd.py -h
usage: mkcmd.py [-h] [-d BASEDIR] [-v] <app name> [desc]
Create a new application
positional arguments:
<app name> New application name
desc Menu description
optional arguments:
-h, --help show this help message and exit
-d BASEDIR, --basedir BASEDIR
Base directory to create new application
-v, --verbose Verbose messages
This tool create a new application at examples directory.
You can use '-d' option to change application directory, it is a same level
of sdk and examples.
tools/mkapppsdir.py -h
usage: mkappsdir.py [-h] [-s] [-v] <dir name> [desc]
Create a new application directory at the outside of sdk repository
This tool must be run on sdk directory.
positional arguments:
<dir name> New application directory name
desc Menu description
optional arguments:
-h, --help show this help message and exit
-s, --spresense_home using spresense home
-v, --verbose verbose messages
上記ツールは、 sdk ディレクトリで実行してください。
|
7. ブートローダーのインストール
Spresense メインボードを正しく動作させるためにはバージョンに合わせたブートローダーのインストールが必要です。 SDKv3.4.3以降のバージョンからブートローダーのインストール方法が変更されています。 SDKv3.4.2以前のバージョンをお使いのユーザーは旧インストール方法を参照してください。
|
7.1. ブートローダーのインストール方法 (SDKv3.4.3以降)
適切なバージョンのブートローダーがインストールされていない場合、tools/flash.sh ツールを実行したときに次のような WARNING が表示されます。
Install command: に書かれた内容に従ってブートローダーのインストールを行ってください。
------------------------------------------------------------------------ WARNING: New bootloader vX.Y.Z is required, please install. By agreeing to the EULA, the installation process will begin. Install command: $ ./tools/flash.sh -c <port> -B NOTE: Replace <port> with your serial port (e.g., /dev/ttyUSB0 or COM3). ------------------------------------------------------------------------
-
ブートローダーのインストールコマンドを実行する。
Spresense メインボードと PC を USB ケーブルで接続した後、下記コマンドを実行します。
-cオプションで指定する <port> は USB シリアルポートの確認方法 を参考にお使いの環境に合わせて変更してください。 以下に、Linux / Windows / macOS 環境での実行コマンド例を示します。Linux 環境でのコマンド例
./tools/flash.sh -c /dev/ttyUSB0 -BWindows 環境でのコマンド例
./tools/flash.sh -c COM9 -BmacOS 環境でのコマンド例
./tools/flash.sh -c /dev/cu.SLAB_USBtoUART -B -
ターミナルにEnd User License Agreementが表示されます。
END USER LICENSE AGREEMENT FOR SPRESENSE BOOTLOADER FILES ========================================================= IMPORTANT: ---------- : Press Enter to continue...
"Press Enter to continue…"が表示されて、次ページへ送る場合は Enter キーを入力してください。
: By agreeing to the EULA, the installation process will begin. Do you agree to the EULA? (Y/N):
最後に"Do you agree to the EULA? (Y/N):"が表示されます。
同意する場合は 'y' を入力して Enter キーを押してください。
-
ブートローダーのインストールが始まります。
>>> Install files ... install -b 115200 Install .../sdk/tools/../../firmware/spresense/loader.espk |0%-----------------------------50%------------------------------100%| ###################################################################### 130080 bytes loaded. Package validation is OK. Saving package to "loader" updater# install -b 115200 Install .../sdk/tools/../../firmware/spresense/AESM.espk |0%-----------------------------50%------------------------------100%| ###################################################################### 28944 bytes loaded. Package validation is OK. Saving package to "AESM" updater# install -b 115200 Install .../sdk/tools/../../firmware/spresense/dnnrt-mp.espk |0%-----------------------------50%------------------------------100%| ###################################################################### 109808 bytes loaded. Package validation is OK. Saving package to "dnnrt-mp" updater# install -b 115200 Install .../sdk/tools/../../firmware/spresense/gnssfw.espk |0%-----------------------------50%------------------------------100%| ###################################################################### 454528 bytes loaded. Package validation is OK. Saving package to "gnssfw" updater# install -b 115200 Install .../sdk/tools/../../firmware/spresense/mp3dec.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 48016 bytes loaded. Package validation is OK. Saving package to "mp3dec" updater# install -b 115200 Install .../sdk/tools/../../firmware/spresense/sysutil.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 307168 bytes loaded. Package validation is OK. Saving package to "sysutil" updater# sync updater# Restarting the board ... reboot
ブートローダーのインストールに成功すると"reboot"が表示されます。
もしインストールに失敗した場合は、Ctrl-Cで実行をキャンセルし、再度インストールコマンドを実行してください。
7.2. ブートローダーのインストール方法 (SDKv3.4.2以前)
適切なバージョンのブートローダーがインストールされていない場合、spresense/sdk ディレクトリの下で、 tools/config.py 及び tools/flash.sh ツールを実行したときに次のような WARNING が表示されます。
Install command: に書かれた内容に従ってインストールを行います。
WARNING: New loader vX.Y.Z is required, please download and install.
Download URL : <<お使いのSpresense SDK用に適切なブートローダーのダウンロードURLが表示されます>>
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 <<展開されたブートローダのパスが表示されます>> -c <port>
-
ZIP ファイルのダウンロード
tools/config.pyあるいはtools/flash.shを実行した時に表示されるWARNINGメッセージ中の Download URL に記載されているリンクを開き ZIP ファイルをダウンロードします。 -
ZIP ファイルを展開
下記コマンドを実行してダウンロードした ZIP ファイルを展開します。
./tools/flash.sh -e <<ダウンロードしたzipファイル>> -
バイナリのSpresense メインボードへのロード
Spresense メインボードと PC を USB ケーブルで接続した後、下記コマンドを実行します。
-cオプションで指定する <port> は USB シリアルポートの確認方法 を参考にお使いの環境に合わせて変更してください。 以下に、Linux / Windows / macOS 環境での実行コマンド例を示します。以下はWARNINGに記載されているInstall commandの2. が
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c <port>の場合の例です。Linux 環境でのコマンド例
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c /dev/ttyUSB0Windows 環境でのコマンド例
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c COM9macOS 環境でのコマンド例
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c /dev/cu.SLAB_USBtoUART
8. Spresense コマンドスクリプト(β版)
Spresense SDKでは、頻繁に使用するコマンドを簡易化するスクリプト tools/build-env.sh を用意しています。
このスクリプトを実行することで以下の機能が追加されます。
-
Spresense SDKディレクトリ以外の場所へのアプリケーションの登録
-
Spresenseコマンドの対応
-
./tools/config.py使用時のTAB補完
実行方法
source tools/build-env.sh
| 本スクリプトは、ターミナルの環境変数を設定します。ターミナルを切り替えた場合は再度上記の実行方法を実施してください。 |
8.1. Spresense SDKディレクトリ以外の場所へのアプリケーションの登録
Spresense SDKでは任意の場所にアプリケーションを追加することができます。
上図のように、Spresense SDKと独立して アプリケーションルート にSDKのアプリケーションを作成することができます。
同じ方法で作成したアプリケーションを アプリケーションルート にコピーすることでアプリケーションを取り込むこともできます。
アプリケーションルートの登録及びアプリケーションの作成については、次のコマンドを利用します。
-
spr-create-approot -
spr-set-approot -
spr-create-app
コマンドの詳細は Spresenseコマンド を参照ください。
8.2. Spresenseコマンド
| コマンド名 | 機能 |
|---|---|
spr-config |
SDKのビルドに関するコンフィギュレーションを行うためのコマンドです。 |
spr-make |
SDKをビルドするコマンドです。基本的には |
spr-create-approot |
Spresense SDKのアプリケーション群を保存するためのディレクトリ(アプリケーションルート)を作成するコマンドです。作成されたディレクトリ内に複数のアプリケーションを作成し管理することができます。 |
spr-set-approot |
作成されているアプリケーションルートを設定するためのコマンドです。このコマンドは |
spr-create-app |
アプリケーションルートにSDKアプリケーションのスケルトンを作成するためのコマンドです。 |
spr-go-sdk |
Spresense SDKへ移動するためのコマンドです。 |
spr-go-approot |
現在設定されているアプリケーションルートへ移動するためのコマンドです。 |
8.3. spr-config
spr-config ではSDKのビルドに必要なコンフィギュレーションを行えます。機能は tools/config.py と同一です。また TAB補完 にも対応しており、以下のようにコマンドを入力することでコンフィギュレーションのキー入力を補助できます。
spr-config exam<TABキー> spr-config examples/he<TABキー> spr-config examples/hello
また、この機能を応用することで以下のように利用できるコンフィギュレーションを一覧として確認することができます。
spr-config <TABキー><TABキー>
board/collet examples/hello
board/corvo examples/helloxx
board/spresense examples/jpeg_decode
default examples/lcdrw
device/accelerometer examples/light
device/adc examples/lte_awsiot
device/bcm20706 examples/lte_http_get
device/camera examples/lte_lwm2m
device/charger examples/lte_mqtt
device/colorsensor examples/lte_tls
device/lcd examples/lte_websocket
device/lightsensor examples/mag
device/magnetometer examples/nx
device/pressure examples/nxhello
8.4. spr-make
Spresense SDKのビルドコマンド make と同等の機能を持つコマンドです。 spresense/sdk 以外の場所からもこのコマンドでビルドを実行することができます。サブコマンド buildkernel などにも対応しています。
spr-config --kernel release spr-config examples/hello spr-make buildkernel spr-make
8.5. spr-create-approot
アプリケーションルート として使用するディレクトリを作成(設定)するコマンドです。
SDKでのビルドに必要なファイルもこのコマンドによって作成されます。
/home/user/myapps に作成する場合
spr-create-approot /home/user/myapps
Creating application directory into /home/user/myapps
上記コマンドを実行すると以下のようにディレクトリとビルドに必要なファイルが作成されます。
tree /home/user/myapps
/home/user/myapps
├── Application.mk
├── LibTarget.mk
├── Make.defs
└── Makefile
0 directories, 4 files
このコマンドにより作成されたディレクトリの中にアプリケーションを登録することができます。
設定した アプリケーションルート はターミナル切り替え時、再度 source ./tools/build-env.sh を実行することで復帰します。
|
8.6. spr-set-approot
アプリケーションルート として使用するディレクトリを切り替えるコマンドです。
切り替えるディレクトリは事前に spr-create-approot コマンドで作成されている必要があります。
/home/user/myapps に切り替える場合
spr-set-approot /home/user/myapps
8.7. spr-create-app
新しい空のアプリケーションを作成するコマンドです。
アプリケーションは spr-create-approot または spr-set-approot によって選択したアプリケーションルートに作成されます。
myapp という名前で作成する場合
spr-create-app myapp
New 'myapp' app successfully created at '/home/user/myapps/myapp'.
上記コマンドを実行すると以下のようにディレクトリとビルドに必要なファイルが作成されます。
tree /home/user/myapps/myapp
/home/user/myapps/myapp
├── configs
│ └── default-defconfig
├── Kconfig
├── Make.defs
├── Makefile
└── myapp_main.c
1 directory, 5 files
また、アプリケーションは <アプリケーション名>_main.c にプログラムを記述することによって更新ができます。
このコマンドによってプログラムファイルは以下のように作成され、
myapp_main(int argc, char *argv[]) 関数内にプログラムを記載することができます。
cat /home/user/myapps/myapp/myapp_main.c #include <sdk/config.h> #include <stdio.h> #ifdef CONFIG_BUILD_KERNEL int main(int argc, FAR char *argv[]) #else int myapp_main(int argc, char *argv[]) #endif { return 0; }
また、作成されたアプリケーションは ./tools/config.py や spr-config によって myapp/myapp/default として選択することができます。
spr-config <TAB>
...
examples/audio_recorder_pre examples/mag myapp/myapp/default
examples/audio_through examples/nx
examples/ble_central examples/nxhello
10. 付録
10.1. 指定バージョンのSDKを取得する方法
Spresense SDK スタートガイド (CLI 版)章では、SDKを git clone を用いて、一からダウンロードする方法を解説いたしました。
ここでは、すでに git clone にてダウンロード済みのSDKリポジトリに対して、指定のバージョンに置き換える方法を解説いたします。
10.1.1. リポジトリ内のクリーン
指定バージョンのSDKに置き換える場合は、置き換える前にリポジトリ内をクリーンする必要があります。以下の手順で状態を確認し、リポジトリをクリーンしてください。
10.1.1.2. リポジトリ修正内容のクリーン
以下のコマンドでCommitしていないリポジトリの編集内容を確認します。
git status
リポジトリに編集しているファイルがある場合は、下記のように modified や Untracked files として表示されます。
On branch master Changes not staged for commit: (use "git add <file>..." to update what will be committed) (use "git checkout -- <file>..." to discard changes in working directory) modified: examples/accel/accel_main.c Untracked files: (use "git add <file>..." to include in what will be committed) examples/accel/README no changes added to commit (use "git add" and/or "git commit -a")
このような場合は、編集内容をCommitするか、下記コマンドで一時退避を行ってください。
git stash
git stash で一旦退避させた編集内容は git stash pop にて呼び戻すことができます。
|
10.1.2. リポジトリ管理情報の更新
以下の方法でリポジトリの管理情報を更新します。管理情報はリポジトリディレクトリ内の .git に含まれ、この作業でこの中の情報のみが更新されます。
例:/home/user/spresense にリポジトリをcloneした場合
cd /home/user/spresense git fetch origin
origin はリモートリポジトリ名で、 git clone <URL> で指定した <URL> に紐付いています。
|
10.1.3. 指定バージョンでリポジトリをチェックアウト
例:v2.0.2 でチェックアウトする場合
git checkout v2.0.2 git submodule init git submodule update
リリースバージョンを指定する場合は上記の例の通りバージョン番号でチェックアウトします。ブランチを指定する場合は、 origin/master や origin/develop のようにブランチ名を指定しチェックアウトしてください。
|
チェックアウトすると、前のバージョンで編集しCommitした内容が消えてしまいます。Commitした内容を保持しつつ、指定のバージョンを取得するためには git merge コマンドを利用して、Commitをマージしてください。
|
10.1.4. チェックアウト後に Untracked files: が残っている場合
SDK v1.5.1 → v2.0.2 、 v2.0.2 → v1.5.1 などメジャーバージョンを変更してチェックアウトした場合は、以下のように Untracked files: が残る場合があります。
HEAD detached at v2.0.2 Untracked files: (use "git add <file>..." to include in what will be committed) externals/nnabla-c-runtime/ nothing added to commit but untracked files present (use "git add" to track)
その場合は、手動で対象ディレクトリを削除してください。
10.2. v1.5以前のバージョンのSDKをビルドする方法
SDK v1.5以前のビルド方法を以下に示します。
10.2.1. サンプルアプリケーション "Hello, World!" の実行手順 (旧バージョン1.X)
"Hello, World!" サンプルアプリケーションのビルドから実行までの一連の流れを説明します。
コンフィグレーション方法やビルド方法の詳細については以降の章を参照してください。
10.2.1.1. コンフィグレーション手順
ダウンロードした spresense/sdk フォルダに移動し、Kernel および SDK のコンフィギュレーションを行います
-
sdkディレクトリへ移動します。cd spresense/sdk -
SDKのコンフィギュレーションを行います。
今回は
helloというExampleアプリケーションをビルドするのでexamples/helloを指定します。tools/config.py examples/hello
10.2.1.2. ビルド手順
-
SDK のビルドを行います。
make
sdk フォルダに nuttx.spk というバイナリイメージ作成されます。このバイナリイメージは Spresense で実行可能なアプリケーションであり、Spresense メインボードにアップロードして実行することができます。
10.2.1.3. 書き込み手順
tools/flash.sh を用いて、ビルドしたバイナリイメージ nuttx.spk を Spresense ボードに書き込みます。
-
Spresense メインボードと PC を USB ケーブルで接続します。
-
tools/flash.shスクリプトを使用して書き込みを行います。-cオプションで指定する <port> は USB シリアルポートの確認方法 を参照してください。Linux 環境でのコマンド例
tools/flash.sh -c /dev/ttyUSB0 nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
Windows 環境でのコマンド例
tools/flash.sh -c COM9 nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
macOS 環境でのコマンド例
tools/flash.sh -c /dev/cu.SLAB_USBtoUART nuttx.spk >>> Install files ... install -b 115200 Install nuttx.spk |0%-----------------------------50%------------------------------100%| ###################################################################### 252480 bytes loaded. Package validation is OK. Saving package to "nuttx" updater# sync updater# Restarting the board ... reboot
-
書き込みが完了すると、ボードは自動的にリブートし書き込まれたイメージを実行します。
10.2.1.4. シリアルターミナル上での動作確認
ここではシリアルターミナルを用いて、実行されているプログラムの動作を確認します。
Linux/macOS 環境の場合、 screen や minicom などのシリアルターミナルソフトを、
Windows 環境の場合は、 Tera Term などのシリアル通信ソフトを使用してください。
シリアル通信設定は以下の通りです。
ボーレート |
115200 |
データ |
8 bit |
パリティ |
none |
ストップ |
1 bit |
フロー制御 |
none |
シリアルターミナルの使用方法に関する詳細は、それぞれのマニュアルなどを参照してください。
ここでは screen コマンドを使用する際の例を挙げます。Linuxの場合は、以下のコマンドで screen コマンドをインストールしてください。
sudo apt install screen
-
次のコマンドでシリアルターミナルを開きます。
screen /dev/ttyUSB0 115200以下のようにNSHプロンプトが表示されればSpresense メインボードは正しく起動しています。
NuttShell (NSH) nsh>
-
helloコマンドを実行しHello, World!と表示されれば完了です。NuttShell (NSH) nsh> hello Hello, World!! nsh>
screenを終了させるにはCtrl+aの後にkを押すと、Really kill this window [y/n]と表示されるので、yを押すと切断&終了できます。
10.2.2. ビルド方法 (旧バージョン1.X)
この章では、ビルド方法の詳細について説明します。
10.2.2.1. コンフィギュレーション
NuttXカーネルおよび Spresense SDK は、様々な状況に対応できるよう、ユーザーの目的にあったコンフィギュレーションを行うことが可能です。
コンフィギュレーションは、Linuxでも使用されているKconfigビルドシステムを使用します。開発ツールのセットアップ を参照して、コンフィギュレーションツールをインストールしてください。
コンフィギュレーションは、NuttXカーネルとSDKのコンフィギュレーションに分かれています。Spresense SDKでは、それらのコンフィギュレーションを行うためのツール tools/config.py tools/mkdefconfig.py を提供しています。
cd spresense/sdk tools/config.py -h usage: config.py [-h] [-k] [-l] [-m] [-q] [-g] [-d DIR] [-v] [<config name> [<config name> ...]] Configuration tool positional arguments: <config name> configuration name optional arguments: -h, --help show this help message and exit -k, --kernel kernel config -l, --list list default configurations. show kernel defconfigs with --kernel. -m, --menuconfig run config in "menuconfig" -q, --qconfig run config in "qconfig" -g, --gconfig run config in "gconfig" -d DIR, --dir DIR change configs directory -v, --verbose verbose messages
cd spresense/sdk tools/mkdefconfig.py -h usage: mkdefconfig.py [-h] [-k] [-d DIR] [--all] [--verbose] <config name> Make default config from current config positional arguments: <config name> configuration name optional arguments: -h, --help show this help message and exit -k save kernel configuration -d DIR, --dir DIR change configs directory --all Save SDK and kernel configuration with same name --verbose, -v verbose messages
tools/config.py ツールは、 menuconfig などのフロントエンドおよび定義済みコンフィギュレーション(後述)のロードなどを行います。
このツールは、NuttXカーネルおよび Spresense SDK の設定を行うことができますが、どちらの設定を行うかどうかは -k または --kernel オプションによって切り替えます。 -k オプションが指定されていた場合はNuttXカーネルの設定、指定されていない場合はSDKの設定を変更します。例えば、カーネルのコンフィギュレーションを変更したい場合は、以下のようにします。
cd spresense/sdk tools/config.py -k -m
tools/config.py tools/mkdefconfig.py はディレクトリ構造に依存しているため、必ず sdk ディレクトリ以下で実行してください。
|
menuconfig, qconfig, gconfig
設定を変更したい場合は、 tools/config.py の以下のオプションを指定し、設定画面を呼び出します。
オプション |
|
|
ncursesライブラリを用いた、CUIメニュー選択 |
|
Qtライブラリを使用したGUIメニュー選択 |
|
gtkライブラリを使用したGUIメニュー選択 |
上記のメニュー選択方式は kconfig-frontend の機能に依存しています。kconfig-frontend をビルドする際のオプションによっては使用できない場合がありますが、いずれの方式でも機能は同等です。
定義済みコンフィギュレーション(defconfig)
定義済みコンフィギュレーション(defconfig)は、ある機能を使用したい場合に必要な設定の組み合わせを事前に定義したものです。defconfigファイルは spresense/sdk/configs ディレクトリ以下に保存されています。defconfigを使用したい場合は、 tools/config.py ツールの引数にdefconfig名を指定します。defconfig名には、 -l オプションで表示されるdefconfigを指定できます。
定義済みdefconfigのリストは次のようにして確認できます。
tools/config.py --kernel --list (NuttX kernel 定義済みコンフィグレーションリストの表示) tools/config.py --list (SDK 定義済みコンフィグレーションリストの表示)
定義済みコンフィギュレーションの表示にタブ補完機能を使用することができます。
source tools/build-env.sh tools/config.py (Tab キーを押すと一覧表示されます)
定義済みコンフィギュレーションを指定する場合は次のようにして行うことができます。
tools/config.py --kernel release tools/config.py board/spresense
defconfigは同時に複数指定することができます。defconfigを複数指定した場合は、指定されたdefconfigの組み合わせとなります。
tools/config.py board/spresense device/sdcard
tools/config.py にコンフィグ名を指定した場合は、以前の設定が消えて、指定されたdefconfigが新たにセットされます。
|
設定の保存
ユーザーが変更した設定は保存しておくことが可能です。以下のコマンドで現在のSDKの設定を <config name> として保存します。
tools/mkdefconfig.py <config name>
上記の例では、SDKの設定のみ保存され、NuttXカーネルの設定は保存されません。カーネルの設定を保存したい場合は、
-k オプションまたは --all オプションを使用します。 --all オプションを指定した場合は、SDKとカーネルの両方の現在の設定が指定された名前で保存されます。
tools/mkdefconfig.py -k <config name>
保存した設定は tools/config.py に指定することができるようになります。
<config name> に指定した名前が既に存在する場合は、上書きするかどうかの確認が表示されます。
|
tools/config.py と tools/mkdefconfig.py は、 sdk/configs 以下にあるdefconfigを対象に適用/保存を行います。もしユーザーが別のディレクトリでコンフィギュレーションを管理したい場合は、 -d または --dir オプションで保存先を変更することができます。
tools/mkdefconfig.py -d ../path/to/configs <config name>
別のディレクトリに保存したdefconfigを使用する場合は以下のようにします。
tools/config.py -d ../path/to/configs <config name>
ディレクトリの変更は、 -k オプションと組み合わせても使用可能です。
10.2.2.2. ビルド
ビルドは、コンフィギュレーションと同様にNuttXカーネルとSDKに分かれています。それぞれビルドする必要があります。どちらの場合も、 sdk ディレクトリ以下で行います。
NuttXカーネルのビルド
NuttXカーネルのビルドを行う場合は、以下のように入力します。ビルドを行う前に、カーネルのコンフィギュレーションを行っておく必要があります。
cd spresense/sdk tools/config.py -k release tools/config.py -k -m (設定の変更) make buildkernel
カーネルのコンフィギュレーションを省略したい場合は、以下のようにすることもできます。
cd spresense/sdk make buildkernel KERNCONF=release
| NuttXカーネルの設定変更およびソースの修正を行っていない場合は、再度ビルドする必要はありません。 |
10.2.3. ユーザーアプリの追加方法 (旧バージョン1.X)
ユーザーが新しいアプリを作成する場合は、以下の方法があります。
10.2.3.1. examplesに追加する
もっとも簡単な方法は、hello をテンプレートとして使用することです。
hello をディレクトリごと examples 以下にコピーし、Makefile、Make.defs、Kconfig、hello_main.c の中にある hello の文字列をすべて任意の文字列に置き換えてください。hello_main.c のファイル名も任意のファイル名に変更してください。(アプリ追加例参照)
すべての文字列を置き換えたら、sdk ディレクトリで一旦 make clean をして、tools/config.py でコンフィグメニューを表示します。 追加した項目が表示されるので、それを有効にします。
cd sdk make clean tools/config.py -m
Examples ---> [ ] My first app example (NEW)
Kconfig ファイルを追加または削除した場合は、sdk ディレクトリで make clean を実行することで、コンフィグメニューが更新されます。
|
有効にしたらSDKをビルドします。
make
作成された nuttx.spk をインストールし、再起動すれば追加したアプリがコマンドとして実行可能になります。
アプリ追加例
config EXAMPLES_MYFIRSTAPP bool "My first app example" default n ---help--- Enable the my first app example if EXAMPLES_MYFIRSTAPP config EXAMPLES_MYFIRSTAPP_PROGNAME string "Program name" default "myfirstapp" depends on BUILD_KERNEL ---help--- This is the name of the program that will be use when the NSH ELF program is installed. config EXAMPLES_MYFIRSTAPP_PRIORITY int "My firstapp task priority" default 100 config EXAMPLES_MYFIRSTAPP_STACKSIZE int "My firstapp stack size" default 2048 endif
|
Kconfigファイル内の |
Kconfig ファイルに定義するオプションシンボルはSDKで一意である必要があります。シンボルが重複した場合、コンフィギュレーションツール実行時に警告が表示されます。
|
-include $(TOPDIR)/Make.defs -include $(SDKDIR)/Make.defs # My first app built-in application info CONFIG_EXAMPLES_MYFIRSTAPP_PRIORITY ?= SCHED_PRIORITY_DEFAULT CONFIG_EXAMPLES_MYFIRSTAPP_STACKSIZE ?= 2048 APPNAME = myfirstapp PRIORITY = $(CONFIG_EXAMPLES_MYFIRSTAPP_PRIORITY) STACKSIZE = $(CONFIG_EXAMPLES_MYFIRSTAPP_STACKSIZE) # My first app Example ASRCS = CSRCS = MAINSRC = myfirstapp_main.c CONFIG_EXAMPLES_MYFIRSTAPP_PROGNAME ?= myfirstapp$(EXEEXT) PROGNAME = $(CONFIG_EXAMPLES_MYFIRSTAPP_PROGNAME) include $(APPDIR)/Application.mk
上記のAPPNAME、PRIORITYおよびSTACKSIZEのいずれかが設定されていない場合は、コマンドになりません。 |
ifeq ($(CONFIG_EXAMPLES_MYFIRSTAPP),y) CONFIGURED_APPS += myfirstapp endif
|
10.2.3.2. 別ディレクトリに追加する
ユーザーがリポジトリの外でアプリを管理したい場合は、別のディレクトリを作成し、それをビルド対象に追加することができます。 別ディレクトリをビルド対象に加えるには以下のようにします。
-
任意のディレクトリをsdkと同じディレクトリに作成
-
examplesディレクトリから、LibTarget.mk、Makefile、Make.defsおよびApplication.mkをコピー -
LibTarget.mk内のアーカイブのパスを変更 -
Application.mk内のアーカイブのパスを変更 -
Makefile内のBIN変数のファイル名をLibTarget.mkで変更したファイル名と同じファイル名に変更 -
上述のexamplesに追加すると同じ手順で、新規に作成したディレクトリ内に任意のアプリケーションを追加
-
sdkディレクトリでmake
別ディレクトリ追加例
ディレクトリを myapps 、アプリケーションを myfirstapp とした場合の例
|-- sdk
|-- examples
|-- myapps
|-- Application.mk
|-- LibTarget.mk
|-- Make.defs
|-- Makefile
`-- myfirstapp
|-- Kconfig
|-- Make.defs
|-- Makefile
`-- myfirstapp_main.c
# ディレクトリをexamplesからmyappsに変更 # アーカイブ名をlibexamplesからlibmyappsに変更 $(SDKDIR)$(DELIM)..$(DELIM)myapps$(DELIM)libmyapps$(LIBEXT): context $(Q) $(MAKE) -C $(dir $@) TOPDIR="$(TOPDIR)" SDKDIR="$(SDKDIR)" $(notdir $@) lib$(DELIM)libmyapps$(LIBEXT): $(SDKDIR)$(DELIM)..$(DELIM)myapps$(DELIM)libmyapps$(LIBEXT) $(Q) install $< $@ EXTLIBS += lib$(DELIM)libmyapps$(LIBEXT)
|
MENUDESC = "My Apps" BIN = libmyapps$(LIBEXT) # libexamplesをlibmyappsに変更 include $(SDKDIR)/Makefile.ext
|
ifeq ($(WINTOOL),y)
BIN = "${shell cygpath -w $(APPDIR)$(DELIM)libmyapps$(LIBEXT)}" # libexamplesをlibmyappsに変更
INSTALL_DIR = "${shell cygpath -w $(BIN_DIR)}"
else
BIN = $(APPDIR)$(DELIM)libmyapps$(LIBEXT) # libexamplesをlibmyappsに変更
INSTALL_DIR = $(BIN_DIR)
endif
ROOTDEPPATH = --dep-path .
VPATH =
all: .built
.PHONY: clean preconfig depend distclean
.PRECIOUS: $(APPDIR)/libmyapps$(LIBEXT) # libexamplesをlibmyappsに変更
10.2.3.3. ツールを使用する
前述のexamplesに追加する手順及び別ディレクトリに追加する手順は、下記ヘルパーツールを使用して簡単に行うことができます。
tools/mkcmd.py -h
usage: mkcmd.py [-h] [-d BASEDIR] [-v] <app name> [desc]
Create a new application
positional arguments:
<app name> New application name
desc Menu description
optional arguments:
-h, --help show this help message and exit
-d BASEDIR, --basedir BASEDIR
Base directory to create new application
-v, --verbose Verbose messages
This tool create a new application at examples directory.
You can use '-d' option to change application directory, it is a same level
of sdk and examples.
tools/mkapppsdir.py -h
usage: mkappsdir.py [-h] [-s] [-v] <dir name> [desc]
Create a new application directory at the outside of sdk repository
This tool must be run on sdk directory.
positional arguments:
<dir name> New application directory name
desc Menu description
optional arguments:
-h, --help show this help message and exit
-s, --spresense_home using spresense home
-v, --verbose verbose messages
上記ツールは、 sdk ディレクトリで実行してください。
|