1. 引言
本页说明如何使用CLI(命令行界面)安装和设置 Spresense SDK 以及创建简单的示例应用程序 Hello,World!
。了解如何使用 Spresense SDK 。
1.1. 用户名和文件夹名的限制
取决于用户名或文件夹名,下表中描述的功能受到限制。
文件夹和用户名中包含的字符 |
||||
仅适用于字母数字字符(例:SonyTaro) |
〇 |
〇 |
〇 |
〇 |
包含空格(例:Sony Taro) |
× |
× |
× |
〇 |
包含中文(例:索尼太郎) |
〇 |
〇 |
△ ※1 |
〇 |
- ※1
-
Ubuntu/macOS: 支持。
Windows: 支持。但是,需要使用 Spresense SDK 版本v1.4.2或更高版本。请使用 Spresense SDK v1.4.2或更高版本的
install_tools.sh
和 工具设置 。(在Windows上,自 Spresense SDK v1.4.1或更早版本开始,工具链的安装位置已更改。)
2. 设置开发工具
Spresense SDK 可以在Linux/Windows/macOS上开发。请根据用户使用的环境设置以下内容。
支持的操作系统
-
Linux(64位)
-
Ubuntu 16.04或更高版本
-
-
Windows(64位)
-
10
-
-
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
执行以下命令以启用已安装的工具。
source ~/spresenseenv/setup
每次打开终端时都必须运行此命令。如果要省略此命令,请将以上命令添加到主目录下的
.bashrc
。工具链安装在主目录下的 spresenseenv/usr/bin
中。 -
Spresense SDK 从存储库下载源代码。
git clone --recursive https://github.com/sonydevworld/spresense.git
2.2. Windows安装程序
-
从以下站点下载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
执行以下命令以启用已安装的工具。
source ~/spresenseenv/setup
每次打开终端时都必须运行此命令。如果要省略此命令,请将以上命令添加到主目录下的
.bashrc
。工具链安装在 /opt/spresenseenv/usr/bin
中。 -
Spresense SDK 从存储库下载源代码。
git clone --recursive https://github.com/sonydevworld/spresense.git
-
串口驱动安装
在将 Spresense 板连接到PC之前,安装串行驱动程序。 要将 Spresense 板与USB串口连接,必须安装驱动程序。从下面的链接下载驱动程序并安装它。
2.3. macOS设置
-
安装Apple提供的开发工具。启动终端并执行以下命令:
xcode-select --install
-
从以下站点下载Python3安装程序并进行安装。
-
安装构建所需的工具。启动终端并执行以下命令:
curl -L https://raw.githubusercontent.com/sonydevworld/spresense/master/install-tools.sh > install-tools.sh bash install-tools.sh
执行以下命令以启用已安装的工具。
source ~/spresenseenv/setup
每次打开终端时都必须运行此命令。如果要省略此命令,请将以上命令添加到主目录下的
.bash_profile
。工具链安装在主目录下的 spresenseenv/usr/bin
中。 -
在终端中执行以下命令,从 Spresense SDK 存储库下载源代码。
git clone --recursive https://github.com/sonydevworld/spresense.git
-
串口驱动安装
在将Spresense板连接到PC之前安装串行驱动程序。 要将Spresense板与USB串口连接,必须安装驱动程序。从下面的链接下载驱动程序并安装它。
如果在具有High Sierra(10.13)或更高版本的macOS上安装此驱动程序,则在安装期间将收到安全警告。 打开“系统首选项→安全性”菜单,阻止“常规”加载“Developer”Silicon Laboratories Inc“的系统软件。请单击右侧显示的“允许”按钮。如果未执行此操作,则无法串行连接。
2.4. 如何检查USB串口
Spresense 通过USB连接主板和PC。
2.4.1. 如何在Linux上检查串行端口
-
打开一个终端。
-
输入以下命令。
dmesg | grep "cp21.*attached" [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0
-
在上面的示例中,端口名称为
/dev/ttyUSB0
。
3. 引导加载程序安装
为了使 Spresense 主板正常工作,必须安装与版本匹配的引导加载程序。
|
如果在运行稍后描述的 tools/config.py
和 tools/flash.sh
时找不到与该版本相匹配的引导加载程序,则会出现以下 WARNING
,因此进行相应的安装。
WARNING: New loader vX.Y.Z is required, please download and install. Download URL : https://developer.sony.com/file/download/spresense-binaries-vX.Y.Z.zip 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/user/spresense/firmware/spresense -c <port>
-
下载ZIP文件
打开
下载URL
中描述的链接,然后下载ZIP文件。 -
解压缩ZIP文件
使用
Install command 1.
中显示的命令解压缩下载的ZIP文件。./tools/flash.sh -e spresense-binaries-vX.Y.Z.zip
-
将二进制文件加载到 Spresense 主板中
用USB电缆连接Spresense主板和PC。
执行上面的Install command 2.
中显示的命令。
用-c
选项指定的<port>应该根据您的环境进行更改,请参考 如何检查USB串口 。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
4. 示例应用程序 “Hello,World!” 执行过程
旧的文件在这里
Hello, World!
描述了从编译到示例应用程序执行的流程。
有关如何配置和编译的详细信息,请参见以下章节。
4.1. 配置步骤
转到下载的spresense/sdk文件夹并配置内核和SDK。
-
转到
sdk
目录。cd spresense/sdk
-
配置SDK。
这次我们将构建一个名为
hello
的示例应用程序,因此请指定examples/hello
。tools/config.py examples/hello
4.2. 建立程序
-
编译SDK。
make
在 sdk
文件夹中创建了一个名为 nuttx.spk
的二进制映像。此二进制映像是可以在 Spresense 上运行的应用程序,可以在 Spresense 主板上上传并运行。
4.3. 烧入程序
使用 tools/flash.sh
将编译的二进制映像 nuttx.spk
烧入Spresense板。
-
Spresense用USB电缆连接主板和PC。
-
执行
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
-
烧入完成后,开发板将自动重启并运行写入的映像。
4.4. 串行终端上的操作检查
在此,使用串行终端确认正在执行的程序的操作。
在Linux/macOS环境中,使用串行终端软件,例如 screen
或 minicom
;
在Windows环境中,使用串行通信软件,例如Tera Term。
串行通讯设置如下。
波特率 |
115200 |
bit数 |
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
退出。
5. 编译方法
旧的文件在这里
本章介绍了编译方法的详细信息。
5.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] [-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 目录下运行。
|
5.1.1. menuconfig, qconfig, gconfig
如果要更改设置,请在 tools/config.py
下指定以下选项并调用设置屏幕:
选项 |
|
|
使用ncurses库选择CUI菜单 |
|
使用Qt库选择GUI菜单 |
|
使用gtk库选择GUI菜单 |
上述菜单选择方法取决于 kconfig-frontend
的功能。根据建造 kconfig-frontend
时候的选项,也有不能使用的情况。不过,无论哪种方式功能都同等。
5.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
5.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
选项结合使用。
6. 烧入方法
本章介绍如何将引导加载程序和内置的软件映像烧入 Spresense 板。
6.1. 将引导加载程序烧入 Spresense 主板
参考 引导加载程序安装 。
6.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)
通过参考 如何检查USB串口 ,根据环境更改为<Serial port>指定的串行端口。
-
用USB电缆连接 Spresense 主板和PC。
-
使用以下命令将
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选项指定波特率,可以高速写入。 tools/flash.sh -c /dev/ttyUSB0 -b 1000000 nuttx.spk
如果速度太高,根据PC环境的不同,烧入时可能会发生通信错误。 如果发生错误,请连接和断开USB,然后降低波特率值,然后重试。 |
7. 添加用户应用
旧的文件在这里
当用户创建新应用时,可以执行以下操作:
7.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后生成SDK。
make
安装并重新启动已创建的 nuttx.spk
后,添加的应用将作为命令运行。
7.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
如果未配置上述APPNAME、PRIORITY或STACKSIZE,则不会成为该命令。 |
ifneq ($(CONFIG_EXAMPLES_MYFIRSTAPP),) CONFIGURED_APPS += myfirstapp endif
|
7.2. 添加到其它目录
如果用户希望在存储库之外管理应用,则可以创建另一个目录并将其添加到生成中。 要向生成添加另一个目录,请执行以下操作:
-
在与sdk相同的目录中创建任何目录
-
从
examples
目录中复制Makefile
、make.defs
和.sdksubdirs
-
在上面添加到 examples步骤中,将任何应用程序添加到新创建的目录中
-
sdk
目录中的make
7.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
|
7.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 目录中运行上述工具。
|
8. Spresense 命令脚本 (Beta版)
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
具有与 make
等效的功能的命令,用于生成 Spresense SDK。此命令还可以从 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
9. 附录
9.1. 示例应用程序 “Hello,World!” 执行过程 (旧的)
Hello, World!
描述了从编译到示例应用程序执行的流程。
有关如何配置和编译的详细信息,请参见以下章节。
9.1.1. 配置步骤
转到下载的spresense/sdk文件夹并配置内核和SDK。
-
转到
sdk
目录。cd spresense/sdk
-
配置NuttX内核。
tools/config.py --kernel release
-
配置SDK。
这次我们将构建一个名为
hello
的示例应用程序,因此请指定examples/hello
。tools/config.py examples/hello
9.1.2. 建立程序
-
编译NuttX内核。
make buildkernel
-
编译SDK。
make
在 sdk
文件夹中创建了一个名为 nuttx.spk
的二进制映像。此二进制映像是可以在 Spresense 上运行的应用程序,可以在 Spresense 主板上上传并运行。
9.1.3. 烧入程序
使用 tools/flash.sh
将编译的二进制映像 nuttx.spk
烧入Spresense板。
-
Spresense用USB电缆连接主板和PC。
-
执行
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
-
烧入完成后,开发板将自动重启并运行写入的映像。
9.1.4. 串行终端上的操作检查
在此,使用串行终端确认正在执行的程序的操作。
在Linux/macOS环境中,使用串行终端软件,例如 screen
或 minicom
;
在Windows环境中,使用串行通信软件,例如Tera Term。
串行通讯设置如下。
波特率 |
115200 |
bit数 |
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
退出。
9.2. 编译方法 (旧的)
本章介绍了编译方法的详细信息。
9.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 目录下运行。
|
9.2.1.1. menuconfig, qconfig, gconfig
如果要更改设置,请在 tools/config.py
下指定以下选项并调用设置屏幕:
选项 |
|
|
使用ncurses库选择CUI菜单 |
|
使用Qt库选择GUI菜单 |
|
使用gtk库选择GUI菜单 |
上述菜单选择方法取决于 kconfig-frontend
的功能。根据建造 kconfig-frontend
时候的选项,也有不能使用的情况。不过,无论哪种方式功能都同等。
9.2.1.2. 预定义配置(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。
|
9.2.1.3. 保存设置
如果要保存用户更改的设置,使用以下命令将当前 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
选项结合使用。
9.2.2. 编译
编译分为NuttX内核和SDK,包含对应的配置。每一个都必须执行。 在这两种情况下,都应在 sdk
目录下进行。
9.3. 添加用户应用 (旧的)
当用户创建新应用时,可以执行以下操作:
9.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后生成SDK。
make
安装并重新启动已创建的 nuttx.spk
后,添加的应用将作为命令运行。
9.3.1.1. 添加应用示例
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
|
9.3.2. 添加到其它目录
如果用户希望在存储库之外管理应用,则可以创建另一个目录并将其添加到生成中。 要向生成添加另一个目录,请执行以下操作:
-
在与sdk相同的目录中创建任何目录
-
从
examples
目录中复制LibTarget.mk
、Makefile
、make.defs
和Application.mk
-
更改
LibTarget.mk
中的存档路径 -
更改
Application.mk
中的存档路径 -
将
Makefile
中的BIN
变量的文件名更改为与LibTarget.mk
中重命名的文件名相同的文件名 -
在上面添加到 examples步骤中,将任何应用程序添加到新创建的目录中
-
sdk
目录中的make
9.3.2.1. 添加另一个目录的示例
如果目录为 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
9.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 目录中运行上述工具。
|