簡(jiǎn)潔清晰的代碼結(jié)構(gòu)有利于項(xiàng)目代碼的管理,Zephyr的West工具對(duì)多倉(cāng)庫(kù)代碼文件提供了多種拓?fù)浣Y(jié)構(gòu)管理方式。West對(duì)多倉(cāng)庫(kù)的管理基本概念可以參考Zephyr west簡(jiǎn)介中”提貨單簡(jiǎn)介”章節(jié),本文主要討論單一應(yīng)用的提貨單使用方法。
Zephyr代碼工作空間的拓?fù)浣Y(jié)構(gòu)
West支持的代碼拓?fù)浣Y(jié)構(gòu)有三種
T1: 星型結(jié)構(gòu),manifest 在zephyr中
T2: 星型結(jié)構(gòu),manifest 在app中, 適用于單獨(dú)應(yīng)用管理
T3: 樹(shù)型結(jié)構(gòu),專(zhuān)門(mén)的manifest目錄, 適用于多應(yīng)用管理
T1
zephyr倉(cāng)庫(kù)作為中央存儲(chǔ)庫(kù),并在它的west.yml 中指定其模塊(外部項(xiàng)目), app可以放到任意目錄。這種形式在不修改west.yml的情況下會(huì)下載所有的外部module,適合于Zephyr本身的開(kāi)發(fā)。
類(lèi)似于以Zephyr為主項(xiàng)目,其它為git子模塊,這是Zephyr Getting Started示例使用的目錄結(jié)構(gòu),這里就不再舉例說(shuō)明
T2
應(yīng)用程序的倉(cāng)庫(kù)充當(dāng)中央存儲(chǔ)庫(kù),并在它的west.yml中指定要使用的模塊(zephyr和其它外部項(xiàng)目)。該方式適合于單個(gè)獨(dú)立的Zephyr應(yīng)用的開(kāi)發(fā)。
類(lèi)似于以Zephyr應(yīng)用為主項(xiàng)目,其它(包括zephyr)為git子模塊,后文會(huì)詳細(xì)說(shuō)明該方式的使用,這里不做舉例。
T3
不包含 Zephyr 源代碼的專(zhuān)用”提貨單”存儲(chǔ)庫(kù),指定所有處于同一“級(jí)別”的項(xiàng)目列表,適合于多個(gè)相互獨(dú)立的Zephyr應(yīng)用開(kāi)發(fā)。
類(lèi)似于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.
對(duì)應(yīng)的提貨單應(yīng)該放在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
單一應(yīng)用West提貨單
我的個(gè)人項(xiàng)目只有單應(yīng)用,因此采用T1或者T2結(jié)構(gòu)都可以。我希望應(yīng)用倉(cāng)庫(kù)里面只有單純和應(yīng)用相關(guān)的代碼,同時(shí)又能夠通過(guò)應(yīng)用倉(cāng)庫(kù)拿到Zephyr代碼和必要的外部項(xiàng)目代碼,這一點(diǎn)T2就非常合適了。
應(yīng)用倉(cāng)庫(kù)的代碼拓?fù)浣Y(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/就會(huì)按照west.yaml指定的內(nèi)容下載zephyr和zephyr外部項(xiàng)目的代碼,該west.yaml要下載的內(nèi)容:
Zephyr的源代碼:指定下載v2.6.0 tag的
cmsis: 使用cortex-m7,需要cmsis
hal_nxp: 應(yīng)用會(huì)跑到rt1052上因此需要nxp hal
hal_espressif: 應(yīng)用會(huì)跑到esp32上因此需要espressif hal
fatfs:應(yīng)用使用了文件系統(tǒng)
lvgl:應(yīng)用使用了gui
除以上內(nèi)容外,不會(huì)再下載其它內(nèi)容,這樣大大縮減了T1模式下載代碼的時(shí)間和占用的空間
├── 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
-
拓?fù)浣Y(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ā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論