West提货单单一应用的提货单使用方法

描述

简洁清晰的代码结构有利于项目代码的管理,Zephyr的West工具对多仓库代码文件提供了多种拓扑结构管理方式。West对多仓库的管理基本概念可以参考Zephyr west简介中”提货单简介”章节,本文主要讨论单一应用的提货单使用方法。

Zephyr代码工作空间的拓扑结构

West支持的代码拓扑结构有三种

T1: 星型结构,manifest 在zephyr中

T2: 星型结构,manifest 在app中, 适用于单独应用管理

T3: 树型结构,专门的manifest目录, 适用于多应用管理

T1

zephyr仓库作为中央存储库,并在它的west.yml 中指定其模块(外部项目), app可以放到任意目录。这种形式在不修改west.yml的情况下会下载所有的外部module,适合于Zephyr本身的开发。

类似于以Zephyr为主项目,其它为git子模块,这是Zephyr Getting Started示例使用的目录结构,这里就不再举例说明

T2

应用程序的仓库充当中央存储库,并在它的west.yml中指定要使用的模块(zephyr和其它外部项目)。该方式适合于单个独立的Zephyr应用的开发。

类似于以Zephyr应用为主项目,其它(包括zephyr)为git子模块,后文会详细说明该方式的使用,这里不做举例。

T3

不包含 Zephyr 源代码的专用”提货单”存储库,指定所有处于同一“级别”的项目列表,适合于多个相互独立的Zephyr应用开发。

类似于google的repo管理,示例如下

工作空间的代码结构

west-workspace/

├── app1/ # .git/ project

│ ├── CMakeLists.txt

│ ├── prj.conf

│ └── src/

│ └── main.c

├── app2/ # .git/ project

│ ├── CMakeLists.txt

│ ├── prj.conf

│ └── src/

│ └── main.c

├── manifest-repo/ # .git/ never modified by west

│ └── west.yml # main manifest with optional import(s) and override(s)

├── modules/

│ └── lib/

│ └── tinycbor/ # .git/ project from either the main manifest or

│ # from some import

└── zephyr/ # .git/ project

└── west.yml # This can be partially imported with lower precedence or ignored.

# Only the ‘manifest-rev’ version can be imported.

对应的提货单应该放在manifest-repo/west.yml

manifest:

remotes:

- name: zephyrproject-rtos

url-base: https://github.com/zephyrproject-rtos

- name: your-git-server

url-base: https://git.example.com/your-company

defaults:

remote: your-git-server

projects:

- name: zephyr

remote: zephyrproject-rtos

revision: v2.5.0

import: true

- name: app1

revision: SOME_SHA_OR_BRANCH_OR_TAG

- name: app2

revision: ANOTHER_SHA_OR_BRANCH_OR_TAG

self:

path: manifest-repo

单一应用West提货单

我的个人项目只有单应用,因此采用T1或者T2结构都可以。我希望应用仓库里面只有单纯和应用相关的代码,同时又能够通过应用仓库拿到Zephyr代码和必要的外部项目代码,这一点T2就非常合适了。

应用仓库的代码拓扑结构如下

app

├── CMakeLists.txt

├── boards

├── drivers

├── dts

├── prj.conf

├── scripts

├── src

└── west.yml

west.yaml内容如下

manifest:

remotes:

- name: zephyrproject-rtos

url-base: https://github.com/zephyrproject-rtos

projects:

- name: zephyr

remote: zephyrproject-rtos

revision: zephyr-v2.6.0

clone-depth: 1

import:

name-allowlist:

- cmsis

- hal_nxp

- hal_espressif

- fatfs

- lvgl

self:

west-commands: scripts/west-commands.yml

执行下面命令west init -l app/就会按照west.yaml指定的内容下载zephyr和zephyr外部项目的代码,该west.yaml要下载的内容:

Zephyr的源代码:指定下载v2.6.0 tag的

cmsis: 使用cortex-m7,需要cmsis

hal_nxp: 应用会跑到rt1052上因此需要nxp hal

hal_espressif: 应用会跑到esp32上因此需要espressif hal

fatfs:应用使用了文件系统

lvgl:应用使用了gui

除以上内容外,不会再下载其它内容,这样大大缩减了T1模式下载代码的时间和占用的空间

├── LICENSE

├── README.en.md

├── README.md

├── app

│ ├── CMakeLists.txt

│ ├── boards

│ ├── drivers

│ ├── dts

│ ├── prj.conf

│ ├── scripts

│ ├── src

│ └── west.yml

├── modules

│ ├── fs

│ ├── hal

│ └── lib

└── zephyr

参考

https://docs.zephyrproject.org/latest/guides/west/workspaces.html#topologies-supported

编辑:jq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分