1.2 Apache Mynewt相关概念

1.2.1 项目(Project)

项目是嵌入式软件树的基础目录。是一个包含源代码逻辑集合的工作空间,实现一个或多个应用。一个项目包含以下内容:

  • 项目定义:定义项目级别依赖关系、参数(位于project.yml

默认Apache Mynewt项目的定义如下:

  1. # project.yml
  2. # <snip>
  3. project.name: "my_project"
  4. project.repositories:
  5. - apache-mynewt-core
  6. # Use github's distribution mechanism for core ASF libraries.
  7. # This provides mirroring automatically for us.
  8. #
  9. repository.apache-mynewt-core:
  10. type: github
  11. vers: 1-latest
  12. user: apache
  13. repo: mynewt-core

其中:

  • project.repositories: 定义项目所依赖的远程仓库
  • repository.apache-mynewt-core: 定义apache-mynewt-core仓库的信息
  • vers=1-latest: 定义仓库的版本。latest将使用github上Master分支的最新稳定版本。要使用master分支的最新版本,需要将此参数改为vers=0-dev,但是需要注意此分支可能并不稳定

存储仓库是包的不同版本的集合。

项目可以依赖远程存储库来实现功能,而newt工具可以解析这些远程仓库,并将正确的版本下载到本地的源码树中。最新获取的仓库将被放置到项目的repos中,并且可以通过使用@specifier在系统中引用。

默认情况下,@apache-mynewt-core仓库将会被每个项目包含。Apache Mynewt Core包含Apache Mynewt操作系统的基本功能,包含实时内核,蓝牙网络协议栈,Flash文件系统,控制台,Shell工具以及Bootloader。

注意:任何项目通过提供一个repository.yml文件而转化到一个仓库,并将其推到Github。关于更多数据仓库系统信息可以在Newt文档中查看。

1.2.2 包(package)

包是组成Mynewt操作系统功能单元的元素集合,包可以包含:

  • 应用(Applications)
  • 库文件(Libraries)
  • 编译器定义(Compiler definitions)
  • 目标(Targets)

在每个包的根目录下包含一个pkg.yml文件,下面是示例应用blinky的pkg.yml文件:

  1. # pkg.yml
  2. # <snip>
  3. pkg.name: apps/blinky
  4. pkg.type: app
  5. pkg.description: Basic example application which blinks an LED.
  6. pkg.author: "Apache Mynewt <dev@mynewt.apache.org>"
  7. pkg.homepage: "http://mynewt.apache.org/"
  8. pkg.keywords:
  9. pkg.deps:
  10. - "@apache-mynewt-core/libs/os"
  11. - "@apache-mynewt-core/hw/hal"
  12. - "@apache-mynewt-core/libs/console/full"

包中以下特性需要注意:

  • 依赖:包可以依赖其他的包,定义依赖后,将可以继承它们的功能(头文件、库定义等)
  • APIs:包可以导出应用编程接口,且要求某些特定的API存在,以便能够编译

Newt对于项目目录的了解全依赖于一个包,这使能编写一个可重用的组件变得非常干净与轻松,这可以将他们的依赖关系以及API对系统的其他部分描述。

1.2.3 目标(Target)

Apache Mynewt的Target与make中的目标非常类似。它是必须传递给Newt的参数的集合,从而Newt可以生成一个可复制的构建。目标代表构建树的顶层,在目标级别指定的任何包或参数,都会级联到所有依赖项。

目标也是包,存放在项目根目录的targets/目录下,大多数的目标都包含:

  • app:构建的应用
  • bsp:应用程序相结合的板级支持包
  • build_profile:debugoptimized

目标还可以指定一些额外的项目,包括:

  • aflags:希望在编译过程中指定的特定的汇编器标志
  • cflags:希望在编译过程中指定的特定的编译器标志
  • lflags:希望在编译过程中指定的特定的链接器标志

为了创建和操作目标,Newt工具提供了一组帮助指令,可以从中找到更多有用信息:

  1. $ newt target
  2. Usage:
  3. newt target [flags]
  4. newt target [command]
  5. Available Commands:
  6. amend Add, change, or delete values for multi-value target variables
  7. cmake
  8. config View or populate a target's system configuration
  9. copy Copy target
  10. create Create a target
  11. delete Delete target
  12. dep View target's dependency graph
  13. revdep View target's reverse-dependency graph
  14. set Set target configuration variable
  15. show View target configuration variables
  16. Global Flags:
  17. -h, --help Help for newt commands
  18. -j, --jobs int Number of concurrent build jobs (default 2)
  19. -l, --loglevel string Log level (default "WARN")
  20. -o, --outfile string Filename to tee output to
  21. -q, --quiet Be quiet; only display error output
  22. -s, --silent Be silent; don't output anything
  23. -v, --verbose Enable verbose output when executing commands
  24. Use "newt target [command] --help" for more information about a command.

1.2.4 配置(Configuration)

额外的一些帮助话题:

  1. $ newt target config show <target-name>
  2. ...
  3. * PACKAGE: sys/stats
  4. * Setting: STATS_CLI
  5. * Description: Expose the "stat" shell command.
  6. * Value: 0
  7. * Setting: STATS_NAMES
  8. * Description: Include and report the textual name of each statistic.
  9. * Value: 0
  10. * Setting: STATS_NEWTMGR
  11. * Description: Expose the "stat" newtmgr command.
  12. * Value: 0