nuttx-apps:基于 NuttX 的应用开发支持项目

Apps is a collection of tools, shells, network utilities, libraries, interpreters and can be used with the openvela.

分支10Tags4
文件最后提交记录最后更新时间
1 个月前
27 天前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前
2 个月前

应用程序文件夹

目录内容

  • 概述
  • 目录位置
  • 内置应用程序
  • NuttShell (NSH) 内置命令
  • 同步内置命令
  • 应用程序配置文件
  • 示例内置应用程序
  • 在源代码树外部构建包含特定于板的组件的 NuttX

概述

此文件夹提供了位于子目录中的各种应用程序。这些应用程序并非 NuttX 的固有部分,但提供给您以帮助开发自己的应用程序。apps/ 目录是配置中的一个可分离部分,您可以选择使用或不用。

目录位置

NuttX 构建所使用的默认应用程序目录应命名为 apps/(或 apps-x.y.z/,其中 x.y.z 是 NuttX 的版本号)。此 apps/ 目录应该在目录树中与 NuttX 目录处于同一级别。如下所示:

 .
 |- nuttx
 |
 `- apps

如果以上所有条件均为真,那么 NuttX 将能够找到应用程序目录。如果您的应用程序目录名称不同或位于其他位置,那么您需要通知 NuttX 构建系统该位置。有几种方法可以实现:

  1. 您可以在 NuttX 配置文件中将 CONFIG_APPS_DIR 定义为应用程序目录的完整路径。
  2. 您可以在命令行上提供应用程序目录的路径,如:make APPDIR=<路径>make CONFIG_APPS_DIR=<路径>
  3. 当您使用 tools/configure.sh 配置 NuttX 时,可以在配置命令行中提供应用程序目录的路径,如:./configure.sh -a <应用程序目录> <开发板名称>:<配置名称>

内置应用程序

NuttX 还支持可以使用名称字符串启动的应用程序。在这种情况下,应用程序入口点及其需求被收集在两个文件中:

  • builtin/builtin_proto.h —— 入口点,原型函数
  • builtin/builtin_list.h —— 应用程序特定信息及需求

构建过程分为几个阶段,随着不同构建目标的执行而进行:(1) 上下文,(2) 依赖,和 (3) 默认(全部)。应用程序信息在 make 上下文构建阶段收集。

要执行应用程序函数:

exec_builtin()apps/include/builtin/builtin.h 中定义。

NuttShell (NSH) 内置命令

内置应用程序的一种用途是提供一种通过 NuttShell (NSH) 命令行调用自定义应用程序的方式。当以下选项在 NuttX 配置文件中启用时,NSH 将支持一种无缝调用应用程序的方法:

CONFIG_NSH_BUILTIN_APPS=y

apps/builtin/builtin_list.h 文件中注册的应用程序之后将可以通过 NSH 命令行进行访问。如果在 NSH 提示符下输入 help,您将看到已注册命令的列表。

同步内置命令

默认情况下,从 NSH 命令行启动的内置命令将异步运行。如果您希望强制 NSH 执行命令并等待命令执行完成,您可以通过在 NuttX 配置文件中添加以下内容来启用该功能:

CONFIG_SCHED_WAITPID=y

配置选项启用了对 waitpid() RTOS 接口的支持。启用该接口后,NSH 将使用它进行等待,直到内建命令执行完毕才会休眠。

当然,即使在定义了 CONFIG_SCHED_WAITPID=y 的情况下,也可以通过在 NSH 命令后添加与号 (&) 强制特定命令异步运行。

应用配置文件

NuttX 配置使用 kconfig-frontends 工具和 NuttX 配置文件(.config)。例如,NuttX .config 文件可能包含:

CONFIG_EXAMPLES_HELLO=y

这将以下列方式选择 apps/examples/hello

  • 顶层 make 将包含 apps/examples/Make.defs
  • apps/examples/Make.defs 将设置 CONFIGURED_APPS += $(APPDIR)/examples/hello,如下所示:
  ifneq ($(CONFIG_EXAMPLES_HELLO),)
  CONFIGURED_APPS += $(APPDIR)/examples/hello
  endif

示例内置应用程序

一个示例应用程序框架可以在 examples/hello 子目录下找到。这个示例展示了如何将一个内置应用程序添加到项目中。需要进行以下操作:

  1. 创建子目录:progname

  2. 在此目录中应包含:

    • 一个 Make.defs 文件,该文件将被 apps/Makefile 包含
    • 一个 Kconfig 文件,供配置工具使用(见 NuttX 工具库中的 kconfig-language.txt 文件)。这个 Kconfig 文件应该被 apps/Kconfig 文件包含
    • 一个 Makefile
    • 应用程序源代码
  3. 应用程序源代码应提供入口点:

    main()
    
  4. Makefile 文件中设置要求,特别是以下几行:

    PROGNAME   = progname
    PRIORITY   = SCHED_PRIORITY_DEFAULT
    STACKSIZE  = 768
    ASRCS      = 汇编源文件列表如 a.asm b.asm ...
    CSRCS      = C 源文件列表如 foo1.c foo2.c ..
    
  5. Make.defs 文件应包括如下行:

    ifneq ($(CONFIG_PROGNAME),)
    CONFIGURED_APPS += progname
    endif
    

在源树外部构建针对特定板件的 NuttX

问:有人提出一种整洁的方法,在源树外部构建针对特定板件的 NuttX 吗?

答:以下是三种方法:

  1. 有一个叫做 make export 的构建目标。它会构建 NuttX,然后将所有头文件、库、启动对象和其他构建组件捆绑到一个 .zip 文件中。你可以将这个 .zip 文件移动到任何构建环境中。你甚至可以在 DOS CMD 窗口中构建 NuttX。

    这个构建目标在顶层 nuttx/README.txt 中有文档说明。

  2. 你可以替换整个 apps/ 目录。如果 apps/ 目录中没有任何你需要的东西,你可以在 .config 文件中定义 CONFIG_APPS_DIR 以指向一个不同的自定义应用程序目录。

    你可以根据需要从旧的 apps/ 目录中复制任何内容到你的自定义应用程序目录。

    这在 NuttX/boards/README.txt 和在线的 NuttX 移植指南 https://cwiki.apache.org/confluence/display/NUTTX/Porting+Guide 中有文档说明。

  3. 如果你喜欢 apps/ 目录中的东西,但只是想通过外部子目录扩展现有组件,也有一个简单的方法:你只需要在 apps/ 目录中创建一个符号链接,将其重定向到你的应用程序子目录。

    为了将其纳入构建过程,你链接到 apps/ 目录下的目录应包含:(1)支持 cleandistclean 目标的 Makefile(参见其他 Makefile 中的示例),以及(2)一个简单的 Make.defs 文件,它仅将自定义构建目录添加到变量 CONFIGURED_APPS 中,如下所示:

    CONFIGURED_APPS += my_directory1 my_directory2
    

    apps/Makefile 会自动检查包含 MakefileMake.defs 文件的子目录的存在。Makefile 将仅用于支持清理操作。Make.defs 文件提供了要构建的目录集合;这些目录还必须包含一个 Makefile。该 Makefile 必须能够构建源代码并将对象添加到 apps/libapps.a 归档文件中(参见其他 Makefile 中的示例)。它应该支持 all、install、context 和 depend 目标。

    apps/Makefile 不依赖于任何硬编码的目录列表。相反,它会执行通配符搜索以找到所有适当的目录。这意味着要安装新应用程序,你只需将目录(或链接)复制(或链接)到 apps/ 目录。如果新目录包含 MakefileMake.defs 文件,那么它将自动包含在构建中。

    如果添加的目录还包含 Kconfig 文件,那么它将自动包含在 NuttX 配置系统中。apps/Makefile 使用 apps/tools/mkkconfig.sh 中的工具在预配置时间动态构建 apps/Kconfig 文件。

    例如,你可以创建一个名为 install.sh 的脚本来安装自定义应用程序、配置和特定板件的目录:

    a) 将 MyBoard 目录复制到 boards/MyBoard。 b) 在 apps/external 处添加 MyApplication 的符号链接。 c) 通常通过以下方式配置 NuttX:

    tools/configure.sh MyBoard:MyConfiguration
    

    使用名称 apps/external 是推荐的,因为这个名称包含在 .gitignore 文件中,可以节省在使用 GIT 时的麻烦。

出口限制

此发行版包含加密软件。你目前居住的国家可能对加密软件的进口、持有、使用和/或将加密软件再出口到其他国家有限制。在使用任何加密软件之前,请检查你所在国家关于加密软件进口、持有或使用以及再出口的法律、法规和政策,以了解这是否被允许。更多信息请见 http://www.wassenaar.org/

美国商务部工业安全局(BIS)已将本软件分类为出口商品管制编号(ECCN)5D002.C.1,其中包括使用或执行非对称算法加密功能的信息安全软件。本 Apache 软件基金会的发行形式和方式使其有资格根据许可证例外 ENC 技术软件无限制(TSU)例外(见 BIS 出口管理条例第 740.13 节)进行出口,适用于对象代码和源代码。

以下提供了关于包含的加密软件的更多详细信息: https://tls.mbed.org/supported-ssl-ciphersuites。 https://github.com/intel/tinycrypt。

项目介绍

Apps 是一系列工具、外壳程序、网络实用工具、库和解释器的集合,可与 openvela 配合使用。【此简介由AI生成】

定制我的领域