Developer World Spresense
English 日本語
目录

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设置

  1. 串行通信设置

    通过运行以下命令,将要使用的用户添加到 dialout 组。

    sudo usermod -a -G dialout <user-name>
    

    请在执行命令后重新启动。重启后设置才会生效。

  2. 建立编译环境所需的工具。启动终端并执行以下命令:

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

    执行以下命令以启用已安装的工具。

    source ~/spresenseenv/setup
    

    每次打开终端时都必须运行此命令。如果要省略此命令,请将以上命令添加到主目录下的 .bashrc

    工具链安装在主目录下的 spresenseenv/usr/bin 中。
  3. Spresense SDK 从存储库下载源代码。

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

2.2. Windows安装程序

  1. 从以下站点下载MSYS2安装程序并进行安装。

  2. 安装编译所需的工具。在开始菜单中启动 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 中。
  3. Spresense SDK 从存储库下载源代码。

    git clone --recursive https://github.com/sonydevworld/spresense.git
    
  4. 串口驱动安装

    在将 Spresense 板连接到PC之前,安装串行驱动程序。

    要将 Spresense 板与USB串口连接,必须安装驱动程序。从下面的链接下载驱动程序并安装它。

2.3. macOS设置

  1. 安装Apple提供的开发工具。启动终端并执行以下命令:

    xcode-select --install
    
  2. 从以下站点下载Python3安装程序并进行安装。

  3. 安装构建所需的工具。启动终端并执行以下命令:

    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 中。
  4. 在终端中执行以下命令,从 Spresense SDK 存储库下载源代码。

    git clone --recursive https://github.com/sonydevworld/spresense.git
    
  5. 串口驱动安装

    在将Spresense板连接到PC之前安装串行驱动程序。

    要将Spresense板与USB串口连接,必须安装驱动程序。从下面的链接下载驱动程序并安装它。

    如果在具有High Sierra(10.13)或更高版本的macOS上安装此驱动程序,则在安装期间将收到安全警告。 打开“系统首选项→安全性”菜单,阻止“常规”加载“Developer”Silicon Laboratories Inc“的系统软件。请单击右侧显示的“允许”按钮。如果未执行此操作,则无法串行连接。

2.4. 如何检查USB串口

Spresense 通过USB连接主板和PC。

spresense musb connect
图表 1. USB连接到主板

2.4.1. 如何在Linux上检查串行端口

  1. 打开一个终端。

  2. 输入以下命令。

    dmesg | grep "cp21.*attached"
    [12220.625979] usb 1-1: cp210x converter now attached to ttyUSB0
    
  3. 在上面的示例中,端口名称为 /dev/ttyUSB0

2.4.2. 如何在Windows上检查串行端口

  1. 打开 设备管理器

  2. 检查COM端口号 Silicon Labs CP210x USB to UART Bridge

    tutorial arduino windows device manager find port
    图表 2. 在设备管理器中检查COM端口
  3. 在上面的示例中,端口名称为 COM9

2.4.3. 如何在macOS上检查串行端口

  1. 打开一个终端。

  2. 输入以下命令。

    ls /dev/{tty,cu}.*
    /dev/cu.SLAB_USBtoUART  /dev/tty.SLAB_USBtoUART
    
  3. 在上面的示例中,端口名称为 /dev/cu.SLAB_USBtoUART

3. 引导加载程序安装

为了使 Spresense 主板正常工作,必须安装与版本匹配的引导加载程序。

  • Spresense板在出厂时未安装引导加载程序。

  • 要使用 Spresense 引导加载程序,您必须同意最终用户许可协议。

如果在运行稍后描述的 tools/config.pytools/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>
  1. 下载ZIP文件

    打开 下载URL 中描述的链接,然后下载ZIP文件。

  2. 解压缩ZIP文件

    使用 Install command 1. 中显示的命令解压缩下载的ZIP文件。

    ./tools/flash.sh -e spresense-binaries-vX.Y.Z.zip
    
  3. 将二进制文件加载到 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。

  1. 转到 sdk 目录。

    cd spresense/sdk
    
  2. 配置SDK。

    这次我们将构建一个名为 hello 的示例应用程序,因此请指定 examples/hello

    tools/config.py examples/hello
    

4.2. 建立程序

  1. 编译SDK。

    make
    

sdk 文件夹中创建了一个名为 nuttx.spk 的二进制映像。此二进制映像是可以在 Spresense 上运行的应用程序,可以在 Spresense 主板上上传并运行。

4.3. 烧入程序

使用 tools/flash.sh 将编译的二进制映像 nuttx.spk 烧入Spresense板。

  1. Spresense用USB电缆连接主板和PC。

  2. 执行 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
    
  3. 烧入完成后,开发板将自动重启并运行写入的映像。

4.4. 串行终端上的操作检查

在此,使用串行终端确认正在执行的程序的操作。

在Linux/macOS环境中,使用串行终端软件,例如 screenminicom ; 在Windows环境中,使用串行通信软件,例如Tera Term。

串行通讯设置如下。

表格 1. 串行通讯设置

波特率

115200

bit数

8 bit

奇偶校验

none

停止

1 bit

流量控制

none

有关如何使用串行终端的详细信息,请参见相应的手册。

这是使用 screen 命令的示例。 对于Linux,使用以下命令安装 screen 命令:

sudo apt install screen
  1. 使用以下命令打开串行终端。

    screen /dev/ttyUSB0 115200
    

    如果如下所示显示NSH提示,则 Spresense 主板正在正确运行。

    NuttShell (NSH)
    nsh>
  2. 执行 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.pytools/mkdefconfig.py 的工具。

Usage of tools/config.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
Usage of tools/mkdefconfig.py
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 下指定以下选项并调用设置屏幕:

表格 2. 设置屏幕呼叫选项

选项

-m 相当于 --menuconfig

使用ncurses库选择CUI菜单

-q 相当于 --qconfig

使用Qt库选择GUI菜单

-g 相当于 --gconfig

使用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.pytools/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 选项结合使用。

5.2. 编译

编译SDK时,请输入以下内容。与内核一样,必须在 make 命令之前完成配置。

tools/config.py default
tools/config.py -m
(更改设置)
make

如果编译成功,可以在 sdk 目录下提供 nuttxnuttx.spk 文件。

nuttx

ELF格式的可执行文件。例如,在调试器中加载。

nuttx.spk

这是一个独特的格式的文件,包装到实际机器。

6. 烧入方法

本章介绍如何将引导加载程序和内置的软件映像烧入 Spresense 板。

6.1. 将引导加载程序烧入 Spresense 主板

6.2. 将图片烧入 Spresense 主板

使用 tools/flash.sh 将构建的图像 nuttx.spk 烧入 Spresense 板。

Usage of tools/flash.sh
./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>指定的串行端口。

  1. 用USB电缆连接 Spresense 主板和PC。

  2. 使用以下命令将 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
    
  3. 烧入完成后,开发板将自动重启并引导写入的映像。

通过使用-b选项指定波特率,可以高速写入。
您可以为波特率指定任何值,但建议值应为
1152000、1000000、921600、576000、500000、460800、230400、115200
中的一种。

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 ,并在 MakefileMake.defsKconfighello_main.c 中复制 hello 将所有字符串替换为任何字符串。将 hello_main.c 的文件名更改为任何文件名。 (参考添加应用示例

替换所有字符串后,在 sdk 目录中单击 make clean 以显示 tools/config.py 中的配置菜单。

cd sdk
make clean
tools/config.py -m
kconfig菜单
Examples  --->
  [ ] My first app example (NEW)
如果添加或删除 Kconfig 文件,则配置菜单将在 sdk 目录中运行 make clean 以更新。

启用SDK后生成SDK。

make

安装并重新启动已创建的 nuttx.spk 后,添加的应用将作为命令运行。

7.1.1. 添加应用示例

Kconfig
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文件中的 config_<symbol> 中定义的符号可以在Makefile中的变量 CONFIG_<symbol> 中引用。

Kconfig 文件中定义的选项符号在SDK中必须是唯一的。如果符号重叠,则在运行配置工具时将显示警告。
Makefile
-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

为此变量设置的字符串是命令名称

PROGNAME

设置命令任务的优先级

STACKSIZE

设置命令任务的堆栈大小

MODULE

选择应用程序构建为可加载的ELF或不加载

如果未配置上述APPNAME、PRIORITY或STACKSIZE,则不会成为该命令。

Make.defs
ifneq ($(CONFIG_EXAMPLES_MYFIRSTAPP),)
CONFIGURED_APPS += myfirstapp
endif
CONFIGURED_APPS

生成此变量的目录

7.2. 添加到其它目录

如果用户希望在存储库之外管理应用,则可以创建另一个目录并将其添加到生成中。 要向生成添加另一个目录,请执行以下操作:

  1. 在与sdk相同的目录中创建任何目录

  2. examples 目录中复制 Makefilemake.defs.sdksubdirs

  3. 在上面添加到 examples步骤中,将任何应用程序添加到新创建的目录中

  4. sdk 目录中的 make

7.2.1. 添加另一个目录的示例

如果目录为 myapps ,则应用程序为 myfirstapp 的示例

创建文件后的文件配置
|-- sdk
|-- examples
|-- myapps
    |-- .sdksubdirs
    |-- Make.defs
    |-- Makefile
    `-- myfirstapp
        |-- Kconfig
        |-- Make.defs
        |-- Makefile
        `-- myfirstapp_main.c
myapps/Makefile
MENUDESC = "My Apps"

include $(SDKDIR)/tools/Sdk.mk
MENUDESC

配置菜单中显示的字符串

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 目录中运行上述工具。

7.3.1. 使用示例

将应用 myfirstapp 添加到examples
cd spresense/sdk
tools/mkcmd.py myfirstapp "My first app example"
创建新目录 myapps ,并向其添加应用 myfirstapp
cd spresense/sdk
tools/mkappsdir.py myapps "My Apps"
tools/mkcmd.py -d myapps myfirstapp "My first app example"

8. Spresense 命令脚本 (Beta版)

Spresense SDK 提供了一个脚本 tools/build-env.sh ,包含常用命令。 运行此脚本可添加以下功能。

  1. 在 Spresense SDK 目录以外的位置注册应用程序

  2. 支持Spresense命令

  3. 使用 ./tools/config.py 时,可用TAB建补全

命令行

source tools/build-env.sh
此脚本设置终端的环境变量。如果切换终端,请再次执行上述操作。

8.1. 将应用程序注册到Spresense SDK目录以外的位置

Spresense SDK 将应用程序添加到任何位置。

sdk user application
图表 3. Spresense SDK与应用程序路径的关系

如上图所示,Spresense SDK 和独立的 应用程序路径 可以创建SDK应用程序。 通过将以相同方式创建的应用程序复制到 应用程序路径 来捕获应用程序。

使用以下命令注册应用程序路径并创建应用程序。

  • spr-create-approot

  • spr-set-approot

  • spr-create-app

详细信息,请参考 Spresense命令

8.2. Spresense命令

命令 功能

spr-config

用于配置SDK生成的命令。与 ./tools/config.py 具有相同的功能。

spr-make

生成SDK的命令。 与 make 有相同的功能,但可以在用户应用程序所在的位置运行。

spr-create-approot

创建目录(应用程序目录)以保存Spresense SDK应用程序组的命令。可以在创建的目录中创建和管理多个应用程序。

spr-set-approot

用于设置已创建的应用程序路径的命令。此命令必须运行 spr-create-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-approotspr-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.pyspr-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

8.8. spr-go-sdk

进入 Spresense SDK 命令。 用于更新 Spresense SDK 存储库或使用工具。

8.9. spr-go-approot

用于进入已设置的应用程序路径的命令。

9. 附录

9.1. 示例应用程序 “Hello,World!” 执行过程 (旧的)

Hello, World! 描述了从编译到示例应用程序执行的流程。
有关如何配置和编译的详细信息,请参见以下章节。

9.1.1. 配置步骤

转到下载的spresense/sdk文件夹并配置内核和SDK。

  1. 转到 sdk 目录。

    cd spresense/sdk
    
  2. 配置NuttX内核。

    tools/config.py --kernel release
    
  3. 配置SDK。

    这次我们将构建一个名为 hello 的示例应用程序,因此请指定 examples/hello

    tools/config.py examples/hello
    

9.1.2. 建立程序

  1. 编译NuttX内核。

    make buildkernel
    
  2. 编译SDK。

    make
    

sdk 文件夹中创建了一个名为 nuttx.spk 的二进制映像。此二进制映像是可以在 Spresense 上运行的应用程序,可以在 Spresense 主板上上传并运行。

9.1.3. 烧入程序

使用 tools/flash.sh 将编译的二进制映像 nuttx.spk 烧入Spresense板。

  1. Spresense用USB电缆连接主板和PC。

  2. 执行 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
    
  3. 烧入完成后,开发板将自动重启并运行写入的映像。

9.1.4. 串行终端上的操作检查

在此,使用串行终端确认正在执行的程序的操作。

在Linux/macOS环境中,使用串行终端软件,例如 screenminicom ; 在Windows环境中,使用串行通信软件,例如Tera Term。

串行通讯设置如下。

表格 3. 串行通讯设置

波特率

115200

bit数

8 bit

奇偶校验

none

停止

1 bit

流量控制

none

有关如何使用串行终端的详细信息,请参见相应的手册。

这是使用 screen 命令的示例。 对于Linux,使用以下命令安装 screen 命令:

sudo apt install screen
  1. 使用以下命令打开串行终端。

    screen /dev/ttyUSB0 115200
    

    如果如下所示显示NSH提示,则 Spresense 主板正在正确运行。

    NuttShell (NSH)
    nsh>
  2. 执行 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.pytools/mkdefconfig.py 的工具。

Usage of tools/config.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
Usage of tools/mkdefconfig.py
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设置(如果指定)。例如,如果要更改内核配置,请执行以下操作:

e.g.
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 下指定以下选项并调用设置屏幕:

表格 4. 设置屏幕呼叫选项

选项

-m 相当于 --menuconfig

使用ncurses库选择CUI菜单

-q 相当于 --qconfig

使用Qt库选择GUI菜单

-g 相当于 --gconfig

使用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.pytools/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 目录下进行。

Diagram
图表 4. 生成工作流
9.2.2.1. 编译 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内核设置或未修改源代码,则无需再次构建。
9.2.2.2. 编译 SDK

编译SDK时,请输入以下内容。与内核一样,必须在 make 命令之前完成配置。

tools/config.py default
tools/config.py -m
(更改设置)
make

如果编译成功,可以在 sdk 目录下提供 nuttxnuttx.spk 文件。

nuttx

ELF格式的可执行文件。例如,在调试器中加载。

nuttx.spk

这是一个独特的格式的文件,包装到实际机器。

9.3. 添加用户应用 (旧的)

当用户创建新应用时,可以执行以下操作:

9.3.1. 添加到 examples

最简单的方法是使用 hello 作为模板。 将 hello 复制到每个目录的 examples ,并在 MakefileMake.defsKconfighello_main.c 中复制 hello 将所有字符串替换为任何字符串。将 hello_main.c 的文件名更改为任何文件名。 (参考添加应用示例

替换所有字符串后,在 sdk 目录中单击 make clean 以显示 tools/config.py 中的配置菜单。

cd sdk
make clean
tools/config.py -m
kconfig菜单
Examples  --->
  [ ] My first app example (NEW)
如果添加或删除 Kconfig 文件,则配置菜单将在 sdk 目录中运行 make clean 以更新。

启用SDK后生成SDK。

make

安装并重新启动已创建的 nuttx.spk 后,添加的应用将作为命令运行。

9.3.1.1. 添加应用示例
Kconfig
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文件中的 config_<symbol> 中定义的符号可以在Makefile中的变量 CONFIG_<symbol> 中引用。

Kconfig 文件中定义的选项符号在SDK中必须是唯一的。如果符号重叠,则在运行配置工具时将显示警告。
Makefile
-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

为此变量设置的字符串是命令名称

PROGNAME

设置命令任务的优先级

STACKSIZE

设置命令任务的堆栈大小

如果未配置上述APPNAME、PRIORITY或STACKSIZE,则不会成为该命令。

Make.defs
ifeq ($(CONFIG_EXAMPLES_MYFIRSTAPP),y)
CONFIGURED_APPS += myfirstapp
endif
CONFIGURED_APPS

生成此变量的目录

9.3.2. 添加到其它目录

如果用户希望在存储库之外管理应用,则可以创建另一个目录并将其添加到生成中。 要向生成添加另一个目录,请执行以下操作:

  1. 在与sdk相同的目录中创建任何目录

  2. examples 目录中复制 LibTarget.mkMakefilemake.defsApplication.mk

  3. 更改 LibTarget.mk 中的存档路径

  4. 更改 Application.mk 中的存档路径

  5. Makefile 中的 BIN 变量的文件名更改为与 LibTarget.mk 中重命名的文件名相同的文件名

  6. 在上面添加到 examples步骤中,将任何应用程序添加到新创建的目录中

  7. 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
myapps/LibTarget.mk
# 将目录从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)
DELIM

路径分隔符(Windows为 \ 、Linux为 /

LIBEXT

库文件扩展名( .a

myapps/Makefile
MENUDESC = "My Apps"

BIN = libmyapps$(LIBEXT)  # libexamplesをlibmyappsに変更

include $(SDKDIR)/Makefile.ext
MENUDESC

配置菜单中显示的字符串

myapps/Application.mk
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 目录中运行上述工具。
9.3.3.1. 使用示例
将应用 myfirstapp 添加到examples
cd spresense/sdk
tools/mkcmd.py myfirstapp "My first app example"
创建新目录 myapps ,并向其添加应用 myfirstapp
cd spresense/sdk
tools/mkappsdir.py myapps "My Apps"
tools/mkcmd.py -d myapps myfirstapp "My first app example"