west的工作区

如果按照Zephyr启动指南,则您的工作空间看起来是这样的。
04.west工作区和支持的源代码拓扑方式 - 图1

  • zephyrproject目录:这个目录是项目目录,通过west init来指定,这个目录可以随便起。
  • .west目录:west的配置目录,是通过执行west init自动生成的。
  • .west/config文件: west的配置文件,里面记录了west的配置选项。
    04.west工作区和支持的源代码拓扑方式 - 图2
  • 主清单仓库:通过在.west/config中指定manifest.path来指定
  • 主清单文件:通过在.west/config中指定manifest.file来指定
  • 项目:指的就是第三方模块和应用程序
  • 扩展:可以实现自定义扩展west指令
  • 忽略文件:git的忽略文件和west的一些忽略文件

    west工作区的拓扑方式

  • T1: 星型拓扑, zephyr作为主存储库清单

  • T2: 星型拓扑, zephyr应用程序作为主存储库清单
  • T3: 森林拓扑, 独立的主存储库清单

    T1: 星型拓扑, zephyr作为主存储库清单

  • Zephyr存储库充当中央存储库,并在其west.yml中指定其模块(外部项目)。

  • 与现有机制的类比:以zephyr做为超级项目,模块和应用程序做为Git子模块。

    T2: 星型拓扑, zephyr应用程序作为主存储库清单

  • 对于开发单个应用非常有用

  • Zephyr应用程序作为中央存储库,并在west.yml中声明在其中构建它所需的其他项目,包括zephyr存储库和任何需要的模块。
  • 与现有机制的类比:以zephyr应用作为超级项目,Zephyr和其他项目作为子模块。

使用此拓扑的工作空间看起来像这样:
04.west工作区和支持的源代码拓扑方式 - 图3
Zephyr及其模块导入应用程序清单application/west.yml文件中:

  1. manifest:
  2. remotes:
  3. - name: zephyrproject-rtos
  4. url-base: https://github.com/zephyrproject-rtos
  5. projects:
  6. - name: zephyr
  7. remote: zephyrproject-rtos
  8. revision: v2.5.0
  9. import: true
  10. self:
  11. path: application

如果您以这种方式使用,您仍然可以选择性地”覆盖”单个Zephyr模块。
zephyr/west.yml里面的内容复制到application/west.yml中。

  1. manifest:
  2. remotes:
  3. - name: zephyrproject-rtos
  4. url-base: https://github.com/zephyrproject-rtos
  5. defaults:
  6. remote: zephyrproject-rtos
  7. projects:
  8. - name: zephyr
  9. revision: v2.5.0
  10. west-commands: scripts/west-commands.yml
  11. - name: net-tools
  12. revision: some-sha-goes-here
  13. path: tools/net-tools
  14. # ... other Zephyr modules go here ...
  15. self:
  16. path: application

T3: 森林拓扑, 独立的主存储库清单

  • 适用于那些支持多个独立应用程序没有中央存储库的开发。
  • 专用的清单存储库,其中不包含 Zephyr 源代码,并指定了所有处于同一级别的项目列表
  • 与现有机制的类比:基于谷歌的源码分布

使用此拓扑的工作空间看起来像这样:
04.west工作区和支持的源代码拓扑方式 - 图4
manifest-repo/west.yml的内容如下:

  1. manifest:
  2. remotes:
  3. - name: zephyrproject-rtos
  4. url-base: https://github.com/zephyrproject-rtos
  5. - name: your-git-server
  6. url-base: https://git.example.com/your-company
  7. defaults:
  8. remote: your-git-server
  9. projects:
  10. - name: zephyr
  11. remote: zephyrproject-rtos
  12. revision: v2.5.0
  13. import: true
  14. - name: app1
  15. revision: SOME_SHA_OR_BRANCH_OR_TAG
  16. - name: app2
  17. revision: ANOTHER_SHA_OR_BRANCH_OR_TAG
  18. self:
  19. path: manifest-repo