簡潔清晰的代碼結(jié)構(gòu)有利于項目代碼的管理,Zephyr的West工具對多倉庫代碼文件提供了多種拓撲結(jié)構(gòu)管理方式。West對多倉庫的管理基本概念可以參考Zephyr west簡介中”提貨單簡介”章節(jié),本文主要討論單一應用的提貨單使用方法。
Zephyr代碼工作空間的拓撲結(jié)構(gòu)
West支持的代碼拓撲結(jié)構(gòu)有三種
T1: 星型結(jié)構(gòu),manifest 在zephyr中
T2: 星型結(jié)構(gòu),manifest 在app中, 適用于單獨應用管理
T3: 樹型結(jié)構(gòu),專門的manifest目錄, 適用于多應用管理
T1
zephyr倉庫作為中央存儲庫,并在它的west.yml 中指定其模塊(外部項目), app可以放到任意目錄。這種形式在不修改west.yml的情況下會下載所有的外部module,適合于Zephyr本身的開發(fā)。
類似于以Zephyr為主項目,其它為git子模塊,這是Zephyr Getting Started示例使用的目錄結(jié)構(gòu),這里就不再舉例說明
T2
應用程序的倉庫充當中央存儲庫,并在它的west.yml中指定要使用的模塊(zephyr和其它外部項目)。該方式適合于單個獨立的Zephyr應用的開發(fā)。
類似于以Zephyr應用為主項目,其它(包括zephyr)為git子模塊,后文會詳細說明該方式的使用,這里不做舉例。
T3
不包含 Zephyr 源代碼的專用”提貨單”存儲庫,指定所有處于同一“級別”的項目列表,適合于多個相互獨立的Zephyr應用開發(fā)。
類似于google的repo管理,示例如下
工作空間的代碼結(jié)構(gòu)
├── 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結(jié)構(gòu)都可以。我希望應用倉庫里面只有單純和應用相關(guān)的代碼,同時又能夠通過應用倉庫拿到Zephyr代碼和必要的外部項目代碼,這一點T2就非常合適了。
應用倉庫的代碼拓撲結(jié)構(gòu)如下
app
├── CMakeLists.txt
├── boards
├── drivers
├── dts
├── prj.conf
├── scripts
├── src
└── west.yml
west.yaml內(nèi)容如下
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
執(zhí)行下面命令west init -l app/就會按照west.yaml指定的內(nèi)容下載zephyr和zephyr外部項目的代碼,該west.yaml要下載的內(nèi)容:
Zephyr的源代碼:指定下載v2.6.0 tag的
cmsis: 使用cortex-m7,需要cmsis
hal_nxp: 應用會跑到rt1052上因此需要nxp hal
hal_espressif: 應用會跑到esp32上因此需要espressif hal
fatfs:應用使用了文件系統(tǒng)
lvgl:應用使用了gui
除以上內(nèi)容外,不會再下載其它內(nèi)容,這樣大大縮減了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
-
拓撲結(jié)構(gòu)
+關(guān)注
關(guān)注
6文章
323瀏覽量
39189 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521 -
Zephyr
+關(guān)注
關(guān)注
0文章
21瀏覽量
5963
發(fā)布評論請先 登錄
相關(guān)推薦
評論