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
を押すと切断&終了できます。
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 <UART Port> -b <UART Baudrate>] <(e)spk file> [<(e)spk file> ...]
Mandatory argument:
(e)spk file path
Optional arguments:
-c: Serial port (default: /dev/ttyUSB0)
-b: Serial baudrate (default: 115200)
-e: Extract loader archive
-l: Flash loader
-r: Remove nuttx(Main Core SPK) file from spresense board
-w: Worker load mode
-h: Show help (This message)
<Serial port> に指定するシリアルポートは USB シリアルポートの確認方法 を参照し、環境に合わせて変更してください。
-
Spresense メインボードと PC を USB ケーブルで接続します。
-
次のコマンドで
nuttx.spk
を Spresense へ書き込みます。Linux 環境でのコマンド例
tools/flash.sh -c /dev/ttyUSB0 nuttx.spk
Windows 環境でのコマンド例
tools/flash.sh -c COM9 nuttx.spk
macOS 環境でのコマンド例
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 メインボードを正しく動作させるためにはバージョンに合わせたブートローダーのインストールが必要です。
|
適切なバージョンのブートローダーがインストールされていない場合、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/ttyUSB0
Windows 環境でのコマンド例
./tools/flash.sh -l /home/user/spresense/firmware/spresense -c COM9
macOS 環境でのコマンド例
./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 ディレクトリで実行してください。
|