Zephyr项目按需配置完全指南

Zephyr项目按需配置完全指南

引言

Zephyr项目是一个功能丰富的RTOS生态系统,包含62个活跃子仓库和大量可选组件。对于普通开发者来说,完整克隆所有仓库不仅耗时(可能需要数GB存储和数小时下载),而且往往是不必要的。

本文将详细介绍如何按需配置Zephyr项目,通过多种技术手段实现只下载必要的软件包,从而节省磁盘空间、加快初始化速度、优化开发工作流。


一、问题背景与解决方案概览

1.1 默认仓库带来的挑战

#mermaid-svg-9TH7LeOd9Vycbxw6{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-9TH7LeOd9Vycbxw6 .error-icon{fill:#552222;}#mermaid-svg-9TH7LeOd9Vycbxw6 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-9TH7LeOd9Vycbxw6 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-9TH7LeOd9Vycbxw6 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-9TH7LeOd9Vycbxw6 .marker.cross{stroke:#333333;}#mermaid-svg-9TH7LeOd9Vycbxw6 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-9TH7LeOd9Vycbxw6 p{margin:0;}#mermaid-svg-9TH7LeOd9Vycbxw6 .pieCircle{stroke:#000000;stroke-width:2px;opacity:0.7;}#mermaid-svg-9TH7LeOd9Vycbxw6 .pieOuterCircle{stroke:#000000;stroke-width:1px;fill:none;}#mermaid-svg-9TH7LeOd9Vycbxw6 .pieTitleText{text-anchor:middle;font-size:25px;fill:#000000;font-family:"trebuchet ms",verdana,arial,sans-serif;}#mermaid-svg-9TH7LeOd9Vycbxw6 .slice{font-family:"trebuchet ms",verdana,arial,sans-serif;fill:#000000;font-size:17px;}#mermaid-svg-9TH7LeOd9Vycbxw6 .legend text{fill:#000000;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:17px;}#mermaid-svg-9TH7LeOd9Vycbxw6 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 40% 20% 15% 15% 10% Zephyr完整工作区大小分布(估计) zephyr核心 HAL仓库(28个) 协议栈库 安全库 工具库

痛点分析

问题 影响
磁盘空间占用大 完整克隆可能超过5GB
初始化时间长 网络不佳时可能需要数小时
更新速度慢 west update耗时过长
版本冲突风险 多版本共存可能产生兼容性问题

1.2 解决方案总览

#mermaid-svg-hM6wQPQaNJHzcLpd{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-hM6wQPQaNJHzcLpd .error-icon{fill:#552222;}#mermaid-svg-hM6wQPQaNJHzcLpd .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-hM6wQPQaNJHzcLpd .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-hM6wQPQaNJHzcLpd .marker{fill:#333333;stroke:#333333;}#mermaid-svg-hM6wQPQaNJHzcLpd .marker.cross{stroke:#333333;}#mermaid-svg-hM6wQPQaNJHzcLpd svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-hM6wQPQaNJHzcLpd p{margin:0;}#mermaid-svg-hM6wQPQaNJHzcLpd .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster-label text{fill:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster-label span{color:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster-label span p{background-color:transparent;}#mermaid-svg-hM6wQPQaNJHzcLpd .label text,#mermaid-svg-hM6wQPQaNJHzcLpd span{fill:#333;color:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd .node rect,#mermaid-svg-hM6wQPQaNJHzcLpd .node circle,#mermaid-svg-hM6wQPQaNJHzcLpd .node ellipse,#mermaid-svg-hM6wQPQaNJHzcLpd .node polygon,#mermaid-svg-hM6wQPQaNJHzcLpd .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-hM6wQPQaNJHzcLpd .rough-node .label text,#mermaid-svg-hM6wQPQaNJHzcLpd .node .label text,#mermaid-svg-hM6wQPQaNJHzcLpd .image-shape .label,#mermaid-svg-hM6wQPQaNJHzcLpd .icon-shape .label{text-anchor:middle;}#mermaid-svg-hM6wQPQaNJHzcLpd .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-hM6wQPQaNJHzcLpd .rough-node .label,#mermaid-svg-hM6wQPQaNJHzcLpd .node .label,#mermaid-svg-hM6wQPQaNJHzcLpd .image-shape .label,#mermaid-svg-hM6wQPQaNJHzcLpd .icon-shape .label{text-align:center;}#mermaid-svg-hM6wQPQaNJHzcLpd .node.clickable{cursor:pointer;}#mermaid-svg-hM6wQPQaNJHzcLpd .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-hM6wQPQaNJHzcLpd .arrowheadPath{fill:#333333;}#mermaid-svg-hM6wQPQaNJHzcLpd .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-hM6wQPQaNJHzcLpd .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-hM6wQPQaNJHzcLpd .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hM6wQPQaNJHzcLpd .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-hM6wQPQaNJHzcLpd .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hM6wQPQaNJHzcLpd .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster text{fill:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd .cluster span{color:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-hM6wQPQaNJHzcLpd .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-hM6wQPQaNJHzcLpd rect.text{fill:none;stroke-width:0;}#mermaid-svg-hM6wQPQaNJHzcLpd .icon-shape,#mermaid-svg-hM6wQPQaNJHzcLpd .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-hM6wQPQaNJHzcLpd .icon-shape p,#mermaid-svg-hM6wQPQaNJHzcLpd .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-hM6wQPQaNJHzcLpd .icon-shape .label rect,#mermaid-svg-hM6wQPQaNJHzcLpd .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-hM6wQPQaNJHzcLpd .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-hM6wQPQaNJHzcLpd .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-hM6wQPQaNJHzcLpd :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 按需配置Zephyr
禁用不需要的HAL
自定义Manifest
浅克隆策略
本地Manifest扩展
project-filter
path-exclude
精简YAML
分层Manifest
clone-depth
--fetch-opt
local目录
覆盖规则


二、理解West Manifest系统

2.1 Manifest文件结构

Manifest文件是West工具的配置文件,定义了工作区包含的所有仓库:

yaml 复制代码
# west.yml 基本结构
manifest:
  # 远程仓库定义
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
  
  # 项目/仓库列表
  projects:
    - name: zephyr              # 仓库名
      url: https://github.com/zephyrproject-rtos/zephyr  # 完整URL
      path: zephyr              # 本地路径
      revision: main            # 分支/标签/Commit
      clone-depth: 1            # 浅克隆深度

2.2 Manifest文件查找顺序

#mermaid-svg-XR9ABAhzdljwwjtW{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-XR9ABAhzdljwwjtW .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-XR9ABAhzdljwwjtW .error-icon{fill:#552222;}#mermaid-svg-XR9ABAhzdljwwjtW .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-XR9ABAhzdljwwjtW .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-XR9ABAhzdljwwjtW .marker{fill:#333333;stroke:#333333;}#mermaid-svg-XR9ABAhzdljwwjtW .marker.cross{stroke:#333333;}#mermaid-svg-XR9ABAhzdljwwjtW svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-XR9ABAhzdljwwjtW p{margin:0;}#mermaid-svg-XR9ABAhzdljwwjtW .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-XR9ABAhzdljwwjtW .cluster-label text{fill:#333;}#mermaid-svg-XR9ABAhzdljwwjtW .cluster-label span{color:#333;}#mermaid-svg-XR9ABAhzdljwwjtW .cluster-label span p{background-color:transparent;}#mermaid-svg-XR9ABAhzdljwwjtW .label text,#mermaid-svg-XR9ABAhzdljwwjtW span{fill:#333;color:#333;}#mermaid-svg-XR9ABAhzdljwwjtW .node rect,#mermaid-svg-XR9ABAhzdljwwjtW .node circle,#mermaid-svg-XR9ABAhzdljwwjtW .node ellipse,#mermaid-svg-XR9ABAhzdljwwjtW .node polygon,#mermaid-svg-XR9ABAhzdljwwjtW .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-XR9ABAhzdljwwjtW .rough-node .label text,#mermaid-svg-XR9ABAhzdljwwjtW .node .label text,#mermaid-svg-XR9ABAhzdljwwjtW .image-shape .label,#mermaid-svg-XR9ABAhzdljwwjtW .icon-shape .label{text-anchor:middle;}#mermaid-svg-XR9ABAhzdljwwjtW .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-XR9ABAhzdljwwjtW .rough-node .label,#mermaid-svg-XR9ABAhzdljwwjtW .node .label,#mermaid-svg-XR9ABAhzdljwwjtW .image-shape .label,#mermaid-svg-XR9ABAhzdljwwjtW .icon-shape .label{text-align:center;}#mermaid-svg-XR9ABAhzdljwwjtW .node.clickable{cursor:pointer;}#mermaid-svg-XR9ABAhzdljwwjtW .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-XR9ABAhzdljwwjtW .arrowheadPath{fill:#333333;}#mermaid-svg-XR9ABAhzdljwwjtW .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-XR9ABAhzdljwwjtW .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-XR9ABAhzdljwwjtW .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XR9ABAhzdljwwjtW .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-XR9ABAhzdljwwjtW .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XR9ABAhzdljwwjtW .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-XR9ABAhzdljwwjtW .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-XR9ABAhzdljwwjtW .cluster text{fill:#333;}#mermaid-svg-XR9ABAhzdljwwjtW .cluster span{color:#333;}#mermaid-svg-XR9ABAhzdljwwjtW div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-XR9ABAhzdljwwjtW .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-XR9ABAhzdljwwjtW rect.text{fill:none;stroke-width:0;}#mermaid-svg-XR9ABAhzdljwwjtW .icon-shape,#mermaid-svg-XR9ABAhzdljwwjtW .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-XR9ABAhzdljwwjtW .icon-shape p,#mermaid-svg-XR9ABAhzdljwwjtW .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-XR9ABAhzdljwwjtW .icon-shape .label rect,#mermaid-svg-XR9ABAhzdljwwjtW .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-XR9ABAhzdljwwjtW .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-XR9ABAhzdljwwjtW .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-XR9ABAhzdljwwjtW :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} west.yml查找顺序
命令行指定
.west/config
工作区根目录
最高优先级

bash 复制代码
# 查找顺序(优先级从高到低):
# 1. 命令行指定: west init -m <url>
# 2. .west/config: manifest.file 配置项
# 3. 根目录west.yml: west.yml

2.3 仓库路径结构

复制代码
~/zephyrproject/
├── .west/
│   ├── config              # West配置文件
│   ├── manifest.xml        # Manifest缓存
│   └── local/              # 本地Manifest目录
├── zephyr/                 # Zephyr核心仓库
│   ├── arch/              # 架构支持
│   ├── boards/            # 板级支持
│   ├── drivers/           # 驱动
│   ├── kernel/            # 内核
│   └── modules/           # 子模块
├── modules/                # 子仓库
│   ├── hal/               # 硬件抽象层
│   │   ├── hal_nordic/
│   │   ├── hal_stm32/
│   │   └── hal_espressif/
│   ├── lib/               # 协议栈库
│   │   ├── mbedtls/
│   │   └── littlefs/
│   └── tee/               # 安全组件
│       └── tf-m/
└── bootloader/            # 引导加载器
    └── mcuboot/

三、方法一:使用project-filter禁用模块

3.1 基础用法

这是Zephyr官方推荐的禁用特定模块的方法:

bash 复制代码
# 禁用单个HAL模块
west config manifest.project-filter -- -hal_stm32
west update

# 禁用多个模块(使用空格分隔)
west config manifest.project-filter -- -hal_stm32 -hal_nxp -hal_espressif
west update

3.2 语法说明

#mermaid-svg-ZZF9ojcnTehbvd4h{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-ZZF9ojcnTehbvd4h .error-icon{fill:#552222;}#mermaid-svg-ZZF9ojcnTehbvd4h .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-ZZF9ojcnTehbvd4h .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-ZZF9ojcnTehbvd4h .marker{fill:#333333;stroke:#333333;}#mermaid-svg-ZZF9ojcnTehbvd4h .marker.cross{stroke:#333333;}#mermaid-svg-ZZF9ojcnTehbvd4h svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-ZZF9ojcnTehbvd4h p{margin:0;}#mermaid-svg-ZZF9ojcnTehbvd4h .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster-label text{fill:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster-label span{color:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster-label span p{background-color:transparent;}#mermaid-svg-ZZF9ojcnTehbvd4h .label text,#mermaid-svg-ZZF9ojcnTehbvd4h span{fill:#333;color:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h .node rect,#mermaid-svg-ZZF9ojcnTehbvd4h .node circle,#mermaid-svg-ZZF9ojcnTehbvd4h .node ellipse,#mermaid-svg-ZZF9ojcnTehbvd4h .node polygon,#mermaid-svg-ZZF9ojcnTehbvd4h .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-ZZF9ojcnTehbvd4h .rough-node .label text,#mermaid-svg-ZZF9ojcnTehbvd4h .node .label text,#mermaid-svg-ZZF9ojcnTehbvd4h .image-shape .label,#mermaid-svg-ZZF9ojcnTehbvd4h .icon-shape .label{text-anchor:middle;}#mermaid-svg-ZZF9ojcnTehbvd4h .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-ZZF9ojcnTehbvd4h .rough-node .label,#mermaid-svg-ZZF9ojcnTehbvd4h .node .label,#mermaid-svg-ZZF9ojcnTehbvd4h .image-shape .label,#mermaid-svg-ZZF9ojcnTehbvd4h .icon-shape .label{text-align:center;}#mermaid-svg-ZZF9ojcnTehbvd4h .node.clickable{cursor:pointer;}#mermaid-svg-ZZF9ojcnTehbvd4h .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-ZZF9ojcnTehbvd4h .arrowheadPath{fill:#333333;}#mermaid-svg-ZZF9ojcnTehbvd4h .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-ZZF9ojcnTehbvd4h .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-ZZF9ojcnTehbvd4h .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZZF9ojcnTehbvd4h .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-ZZF9ojcnTehbvd4h .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZZF9ojcnTehbvd4h .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster text{fill:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h .cluster span{color:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-ZZF9ojcnTehbvd4h .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-ZZF9ojcnTehbvd4h rect.text{fill:none;stroke-width:0;}#mermaid-svg-ZZF9ojcnTehbvd4h .icon-shape,#mermaid-svg-ZZF9ojcnTehbvd4h .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-ZZF9ojcnTehbvd4h .icon-shape p,#mermaid-svg-ZZF9ojcnTehbvd4h .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-ZZF9ojcnTehbvd4h .icon-shape .label rect,#mermaid-svg-ZZF9ojcnTehbvd4h .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-ZZF9ojcnTehbvd4h .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-ZZF9ojcnTehbvd4h .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-ZZF9ojcnTehbvd4h :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} manifest.project-filter
操作符
模块名

  • 包含
  • 排除
    hal_xxx
    其他模块
操作符 含义 示例
- 排除模块 -hal_stm32
+ 包含模块 +tflite-micro
zephyr 核心仓库 zephyr

3.3 禁用HAL模块示例

bash 复制代码
# 场景:只使用Nordic芯片,禁用其他HAL

# 1. 先禁用所有不需要的HAL
west config manifest.project-filter -- \
  -hal_stm32 \
  -hal_nxp \
  -hal_espressif \
  -hal_silabs \
  -hal_intel \
  -hal_atmel \
  -hal_microchip \
  -hal_ambiq \
  -hal_gigadevice \
  -hal_infineon \
  -hal_renesas \
  -hal_ti \
  -hal_bouffalolab \
  -hal_wch

# 2. 执行更新
west update

# 3. 验证结果
west list | grep hal_

3.4 只保留特定HAL

bash 复制代码
# 方法:排除所有,再包含需要的
west config manifest.project-filter -- -hal_FOO +hal_nordic
west update

# 或者直接使用白名单方式
west config manifest.project-filter -- \
  -hal_FOO \
  zephyr \
  cmsis \
  hal_nordic

四、方法二:自定义Manifest文件

4.1 创建精简Manifest

适用场景:新项目初始化时,完全控制仓库列表

yaml 复制代码
# my-minimal.yml - 最小化配置
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
  
  projects:
    # 核心仓库(必须)
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1

4.2 添加特定HAL

yaml 复制代码
# my-nordic.yml - Nordic专用配置
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
    - name: nordic
      url-base: https://github.com/nrfconnect
  
  projects:
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1
    
    # Nordic HAL
    - name: hal_nordic
      url: https://github.com/nrfconnect/sdk-hal_nordic
      path: modules/hal/nordic
      revision: main
      clone-depth: 1
    
    # CMSIS支持
    - name: cmsis
      url: https://github.com/zephyrproject-rtos/cmsis
      path: modules/hal/cmsis
      revision: main
      clone-depth: 1

4.3 完整示例:STM32开发环境

yaml 复制代码
# stm32-dev.yml
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
  
  projects:
    # Zephyr核心
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1
    
    # STM32 HAL(必须)
    - name: hal_stm32
      url: https://github.com/zephyrproject-rtos/hal_stm32
      path: modules/hal/stm32
      revision: main
      clone-depth: 1
    
    # CMSIS支持
    - name: cmsis
      url: https://github.com/zephyrproject-rtos/cmsis
      path: modules/hal/cmsis
      revision: main
      clone-depth: 1
    
    # 文件系统支持
    - name: littlefs
      url: https://github.com/zephyrproject-rtos/littlefs
      path: modules/fs/littlefs
      revision: main
      clone-depth: 1
    
    # 安全库(如需要)
    - name: mbedtls
      url: https://github.com/zephyrproject-rtos/mbedtls
      path: modules/lib/mbedtls
      revision: main
      clone-depth: 1

4.4 使用自定义Manifest初始化

bash 复制代码
# 方法1:在线Manifest
west init -m https://your.repo/stm32-dev.yml ~/stm32-project

# 方法2:本地Manifest文件
west init -m ./my-manifest.yml ~/my-project

# 方法3:克隆后再切换Manifest
west init ~/my-project
cd ~/my-project
# 编辑 .west/config 中的 manifest.file 指向新的Manifest

五、方法三:本地Manifest扩展

5.1 本地Manifest目录

West支持在.west/local/目录中添加自定义YAML文件,West会自动合并:

bash 复制代码
# 创建本地Manifest目录
mkdir -p ~/zephyrproject/.west/local

5.2 添加额外模块

yaml 复制代码
# .west/local/extra-modules.yml
manifest:
  projects:
    # 添加Nordic支持
    - name: hal_nordic
      url: https://github.com/nrfconnect/sdk-hal_nordic
      path: modules/hal/nordic
      revision: main
      clone-depth: 1
    
    # 添加LVGL图形库
    - name: lvgl
      url: https://github.com/zephyrproject-rtos/lvgl
      path: modules/lib/lvgl
      revision: main
      clone-depth: 1

5.3 West自动合并机制

#mermaid-svg-2Axv2jkCx0lUShH7{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-2Axv2jkCx0lUShH7 .error-icon{fill:#552222;}#mermaid-svg-2Axv2jkCx0lUShH7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-2Axv2jkCx0lUShH7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-2Axv2jkCx0lUShH7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-2Axv2jkCx0lUShH7 .marker.cross{stroke:#333333;}#mermaid-svg-2Axv2jkCx0lUShH7 svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-2Axv2jkCx0lUShH7 p{margin:0;}#mermaid-svg-2Axv2jkCx0lUShH7 .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster-label text{fill:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster-label span{color:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster-label span p{background-color:transparent;}#mermaid-svg-2Axv2jkCx0lUShH7 .label text,#mermaid-svg-2Axv2jkCx0lUShH7 span{fill:#333;color:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 .node rect,#mermaid-svg-2Axv2jkCx0lUShH7 .node circle,#mermaid-svg-2Axv2jkCx0lUShH7 .node ellipse,#mermaid-svg-2Axv2jkCx0lUShH7 .node polygon,#mermaid-svg-2Axv2jkCx0lUShH7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-2Axv2jkCx0lUShH7 .rough-node .label text,#mermaid-svg-2Axv2jkCx0lUShH7 .node .label text,#mermaid-svg-2Axv2jkCx0lUShH7 .image-shape .label,#mermaid-svg-2Axv2jkCx0lUShH7 .icon-shape .label{text-anchor:middle;}#mermaid-svg-2Axv2jkCx0lUShH7 .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-2Axv2jkCx0lUShH7 .rough-node .label,#mermaid-svg-2Axv2jkCx0lUShH7 .node .label,#mermaid-svg-2Axv2jkCx0lUShH7 .image-shape .label,#mermaid-svg-2Axv2jkCx0lUShH7 .icon-shape .label{text-align:center;}#mermaid-svg-2Axv2jkCx0lUShH7 .node.clickable{cursor:pointer;}#mermaid-svg-2Axv2jkCx0lUShH7 .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-2Axv2jkCx0lUShH7 .arrowheadPath{fill:#333333;}#mermaid-svg-2Axv2jkCx0lUShH7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-2Axv2jkCx0lUShH7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-2Axv2jkCx0lUShH7 .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2Axv2jkCx0lUShH7 .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-2Axv2jkCx0lUShH7 .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2Axv2jkCx0lUShH7 .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster text{fill:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 .cluster span{color:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-2Axv2jkCx0lUShH7 .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-2Axv2jkCx0lUShH7 rect.text{fill:none;stroke-width:0;}#mermaid-svg-2Axv2jkCx0lUShH7 .icon-shape,#mermaid-svg-2Axv2jkCx0lUShH7 .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-2Axv2jkCx0lUShH7 .icon-shape p,#mermaid-svg-2Axv2jkCx0lUShH7 .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-2Axv2jkCx0lUShH7 .icon-shape .label rect,#mermaid-svg-2Axv2jkCx0lUShH7 .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-2Axv2jkCx0lUShH7 .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-2Axv2jkCx0lUShH7 .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-2Axv2jkCx0lUShH7 :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} Manifest合并过程
读取主Manifest
扫描.local/目录
按文件名排序
依次合并
生成最终列表
west.yml
*.yml文件
项目去重
路径合并

bash 复制代码
# West会自动合并以下文件:
# 1. west.yml(主Manifest)
# 2. .west/local/*.yml(本地扩展,按字母顺序)

5.4 扩展示例:添加多个模块

yaml 复制代码
# .west/local/addons.yml
manifest:
  projects:
    # 仿真测试相关
    - name: babblesim_base
      url: https://github.com/BabbleSim/base
      path: tools/bsim/babblesim_base
      revision: main
    
    - name: bsim
      url: https://github.com/zephyrproject-rtos/babblesim-manifest
      path: tools/bsim
      revision: main
    
    # AI相关
    - name: tflite-micro
      url: https://github.com/zephyrproject-rtos/tflite-micro
      path: modules/lib/tflite-micro
      revision: main

六、方法四:浅克隆策略

6.1 clone-depth参数

yaml 复制代码
# 每个项目单独设置浅克隆
manifest:
  projects:
    - name: zephyr
      clone-depth: 1
    
    - name: hal_nordic
      clone-depth: 1
    
    - name: mbedtls
      clone-depth: 50  # 保留更多历史

6.2 全局设置

bash 复制代码
# 全局设置浅克隆
west config --global update.clone-depth 1

6.3 Git fetch选项

bash 复制代码
# 使用深度限制更新
west update --fetch-opt="--depth=1"

# 只获取最新提交
west update --fetch-opt="--filter=blob:none"

# 组合使用
west update --fetch-opt="--depth=1" --fetch-opt="--no-tags"

6.4 浅克隆效果对比

项目 完整克隆 浅克隆(depth=1) 节省空间
zephyr ~500MB ~100MB 80%
hal_nordic ~200MB ~30MB 85%
mbedtls ~50MB ~10MB 80%
总计 ~750MB ~140MB 81%

七、方法五:path-exclude排除目录

7.1 在Manifest中使用path-exclude

yaml 复制代码
manifest:
  projects:
    - name: zephyr
      path: zephyr
      # 排除不需要的模块
      path-exclude:
        - modules/hal/st/
        - modules/hal/infineon/
        - modules/hal/microchip/
        - modules/hal/silabs/
        - modules/hal/renesas/
        - modules/hal/atmel/

7.2 多层级排除

yaml 复制代码
manifest:
  projects:
    - name: zephyr
      path: zephyr
      path-exclude:
        # 排除所有不需要的HAL
        - modules/hal/*
        
        # 但保留少数需要的
        - path: modules/hal/keep_this
          file-exclude:
            - unnecessary_file.c

八、实用配置模板

8.1 最小化QEMU测试环境

yaml 复制代码
# minimal-qemu.yml - 仅用于QEMU测试
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
  
  projects:
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1

安装命令

bash 复制代码
west init -m minimal-qemu.yml ~/zephyr-qemu
cd ~/zephyr-qemu
west update

8.2 Nordic nRF52 BLE开发环境

yaml 复制代码
# nordic-ble.yml
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
    - name: nordic
      url-base: https://github.com/nrfconnect
  
  projects:
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1
    
    - name: hal_nordic
      url: https://github.com/nrfconnect/sdk-hal_nordic
      path: modules/hal/nordic
      revision: main
      clone-depth: 1
    
    - name: cmsis
      url: https://github.com/zephyrproject-rtos/cmsis
      path: modules/hal/cmsis
      revision: main
      clone-depth: 1
    
    - name: mcuboot
      url: https://github.com/mcu-tools/mcuboot
      path: bootloader/mcuboot
      revision: main
      clone-depth: 1
    
    - name: mbedtls
      url: https://github.com/zephyrproject-rtos/mbedtls
      path: modules/lib/mbedtls
      revision: main
      clone-depth: 1

8.3 ESP32 WiFi开发环境

yaml 复制代码
# esp32-wifi.yml
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
    - name: espressif
      url-base: https://github.com/espressif
  
  projects:
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1
    
    - name: hal_espressif
      url: https://github.com/zephyrproject-rtos/hal_espressif
      path: modules/hal/espressif
      revision: main
      clone-depth: 1
    
    - name: mbedtls
      url: https://github.com/zephyrproject-rtos/mbedtls
      path: modules/lib/mbedtls
      revision: main
      clone-depth: 1
    
    - name: hostap
      url: https://github.com/zephyrproject-rtos/hostap
      path: modules/lib/hostap
      revision: main
      clone-depth: 1

8.4 安全应用开发环境

yaml 复制代码
# secure-app.yml
manifest:
  remotes:
    - name: zephyr
      url-base: https://github.com/zephyrproject-rtos
  
  projects:
    - name: zephyr
      url: https://github.com/zephyrproject-rtos/zephyr
      path: zephyr
      revision: main
      clone-depth: 1
    
    - name: mbedtls
      url: https://github.com/zephyrproject-rtos/mbedtls
      path: modules/lib/mbedtls
      revision: main
      clone-depth: 1
    
    - name: trusted-firmware-m
      url: https://github.com/zephyrproject-rtos/trusted-firmware-m
      path: modules/tee/tf-m/trusted-firmware-m
      revision: main
      clone-depth: 1
    
    - name: tf-psa-crypto
      url: https://github.com/zephyrproject-rtos/tf-psa-crypto
      path: modules/tee/tf-m/tf-psa-crypto
      revision: main
      clone-depth: 1
    
    - name: mcuboot
      url: https://github.com/mcu-tools/mcuboot
      path: bootloader/mcuboot
      revision: main
      clone-depth: 1

九、管理与维护技巧

9.1 查看当前配置

bash 复制代码
# 查看West配置
west config --list

# 查看Manifest内容
west manifest --freeze

# 列出所有仓库
west list

# 详细列表
west list -v

9.2 更新策略

#mermaid-svg-rGFTHYOl7TeVvCaq{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-rGFTHYOl7TeVvCaq .error-icon{fill:#552222;}#mermaid-svg-rGFTHYOl7TeVvCaq .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-rGFTHYOl7TeVvCaq .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-rGFTHYOl7TeVvCaq .marker{fill:#333333;stroke:#333333;}#mermaid-svg-rGFTHYOl7TeVvCaq .marker.cross{stroke:#333333;}#mermaid-svg-rGFTHYOl7TeVvCaq svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-rGFTHYOl7TeVvCaq p{margin:0;}#mermaid-svg-rGFTHYOl7TeVvCaq .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster-label text{fill:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster-label span{color:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster-label span p{background-color:transparent;}#mermaid-svg-rGFTHYOl7TeVvCaq .label text,#mermaid-svg-rGFTHYOl7TeVvCaq span{fill:#333;color:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq .node rect,#mermaid-svg-rGFTHYOl7TeVvCaq .node circle,#mermaid-svg-rGFTHYOl7TeVvCaq .node ellipse,#mermaid-svg-rGFTHYOl7TeVvCaq .node polygon,#mermaid-svg-rGFTHYOl7TeVvCaq .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-rGFTHYOl7TeVvCaq .rough-node .label text,#mermaid-svg-rGFTHYOl7TeVvCaq .node .label text,#mermaid-svg-rGFTHYOl7TeVvCaq .image-shape .label,#mermaid-svg-rGFTHYOl7TeVvCaq .icon-shape .label{text-anchor:middle;}#mermaid-svg-rGFTHYOl7TeVvCaq .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-rGFTHYOl7TeVvCaq .rough-node .label,#mermaid-svg-rGFTHYOl7TeVvCaq .node .label,#mermaid-svg-rGFTHYOl7TeVvCaq .image-shape .label,#mermaid-svg-rGFTHYOl7TeVvCaq .icon-shape .label{text-align:center;}#mermaid-svg-rGFTHYOl7TeVvCaq .node.clickable{cursor:pointer;}#mermaid-svg-rGFTHYOl7TeVvCaq .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-rGFTHYOl7TeVvCaq .arrowheadPath{fill:#333333;}#mermaid-svg-rGFTHYOl7TeVvCaq .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-rGFTHYOl7TeVvCaq .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-rGFTHYOl7TeVvCaq .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rGFTHYOl7TeVvCaq .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-rGFTHYOl7TeVvCaq .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rGFTHYOl7TeVvCaq .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster text{fill:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq .cluster span{color:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-rGFTHYOl7TeVvCaq .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-rGFTHYOl7TeVvCaq rect.text{fill:none;stroke-width:0;}#mermaid-svg-rGFTHYOl7TeVvCaq .icon-shape,#mermaid-svg-rGFTHYOl7TeVvCaq .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-rGFTHYOl7TeVvCaq .icon-shape p,#mermaid-svg-rGFTHYOl7TeVvCaq .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-rGFTHYOl7TeVvCaq .icon-shape .label rect,#mermaid-svg-rGFTHYOl7TeVvCaq .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-rGFTHYOl7TeVvCaq .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-rGFTHYOl7TeVvCaq .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-rGFTHYOl7TeVvCaq :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} west update
需要更新什么?
所有仓库
特定仓库
强制更新
west update
west update
west update --force

命令 用途
west update 更新所有仓库
west update hal_nordic 只更新指定仓库
west update --force 强制重新克隆
west update --fetch-opt="--depth=1" 浅更新

9.3 清理和优化

bash 复制代码
# 查看工作区大小
du -sh ~/zephyrproject/*

# Git垃圾回收
cd ~/zephyrproject/zephyr
git gc --aggressive --prune=now

# 删除不需要的仓库后更新
rm -rf modules/hal/renesas
west update

9.4 版本锁定

bash 复制代码
# 锁定到特定版本
west init -m https://github.com/zephyrproject-rtos/zephyr \
          --mr v3.5.0 ~/my-project

# 或在Manifest中指定
manifest:
  projects:
    - name: zephyr
      revision: v3.5.0

十、常见问题与解决

10.1 禁用模块后编译失败

问题ERROR: Module 'hal_stm32' not found

解决:确认需要的HAL模块未被禁用

bash 复制代码
# 检查禁用的模块
west config manifest.project-filter

# 如需启用
west config manifest.project-filter -- +hal_stm32
west update

10.2 Manifest合并冲突

问题:多个本地Manifest定义了相同的项目

解决:West按文件名顺序合并,后面的会覆盖前面的

bash 复制代码
# 使用明确的前缀控制顺序
mv .west/local/extra.yml .west/local/00-extra.yml

10.3 子模块未初始化

问题west update后某些目录为空

解决:重新初始化子模块

bash 复制代码
cd ~/zephyrproject/zephyr
git submodule sync
git submodule update --init --recursive

10.4 磁盘空间不足

解决:组合使用多种优化方法

bash 复制代码
# 1. 使用浅克隆
west config --global update.clone-depth 1

# 2. 禁用不需要的HAL
west config manifest.project-filter -- \
  -hal_stm32 -hal_nxp -hal_espressif

# 3. 执行更新
west update

# 4. 清理Git对象
cd ~/zephyrproject/zephyr
git gc --aggressive --prune=now

十一、最佳实践总结

11.1 配置策略推荐

场景 推荐策略
学习/测试 最小化配置 + QEMU
单芯片开发 自定义Manifest + 指定HAL
多芯片开发 禁用不需要的HAL
CI/CD环境 自定义Manifest + 版本锁定
资源受限环境 浅克隆 + 最小化配置

11.2 决策流程图

#mermaid-svg-CxLZ03KV8MTZcuOC{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-CxLZ03KV8MTZcuOC .error-icon{fill:#552222;}#mermaid-svg-CxLZ03KV8MTZcuOC .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CxLZ03KV8MTZcuOC .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CxLZ03KV8MTZcuOC .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CxLZ03KV8MTZcuOC .marker.cross{stroke:#333333;}#mermaid-svg-CxLZ03KV8MTZcuOC svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CxLZ03KV8MTZcuOC p{margin:0;}#mermaid-svg-CxLZ03KV8MTZcuOC .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster-label text{fill:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster-label span{color:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster-label span p{background-color:transparent;}#mermaid-svg-CxLZ03KV8MTZcuOC .label text,#mermaid-svg-CxLZ03KV8MTZcuOC span{fill:#333;color:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC .node rect,#mermaid-svg-CxLZ03KV8MTZcuOC .node circle,#mermaid-svg-CxLZ03KV8MTZcuOC .node ellipse,#mermaid-svg-CxLZ03KV8MTZcuOC .node polygon,#mermaid-svg-CxLZ03KV8MTZcuOC .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CxLZ03KV8MTZcuOC .rough-node .label text,#mermaid-svg-CxLZ03KV8MTZcuOC .node .label text,#mermaid-svg-CxLZ03KV8MTZcuOC .image-shape .label,#mermaid-svg-CxLZ03KV8MTZcuOC .icon-shape .label{text-anchor:middle;}#mermaid-svg-CxLZ03KV8MTZcuOC .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-CxLZ03KV8MTZcuOC .rough-node .label,#mermaid-svg-CxLZ03KV8MTZcuOC .node .label,#mermaid-svg-CxLZ03KV8MTZcuOC .image-shape .label,#mermaid-svg-CxLZ03KV8MTZcuOC .icon-shape .label{text-align:center;}#mermaid-svg-CxLZ03KV8MTZcuOC .node.clickable{cursor:pointer;}#mermaid-svg-CxLZ03KV8MTZcuOC .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-CxLZ03KV8MTZcuOC .arrowheadPath{fill:#333333;}#mermaid-svg-CxLZ03KV8MTZcuOC .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CxLZ03KV8MTZcuOC .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CxLZ03KV8MTZcuOC .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CxLZ03KV8MTZcuOC .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-CxLZ03KV8MTZcuOC .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CxLZ03KV8MTZcuOC .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster text{fill:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC .cluster span{color:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CxLZ03KV8MTZcuOC .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-CxLZ03KV8MTZcuOC rect.text{fill:none;stroke-width:0;}#mermaid-svg-CxLZ03KV8MTZcuOC .icon-shape,#mermaid-svg-CxLZ03KV8MTZcuOC .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-CxLZ03KV8MTZcuOC .icon-shape p,#mermaid-svg-CxLZ03KV8MTZcuOC .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-CxLZ03KV8MTZcuOC .icon-shape .label rect,#mermaid-svg-CxLZ03KV8MTZcuOC .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-CxLZ03KV8MTZcuOC .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-CxLZ03KV8MTZcuOC .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-CxLZ03KV8MTZcuOC :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 开始
使用场景
学习测试
单芯片开发
多芯片开发
资源受限
minimal配置
自定义Manifest
project-filter
浅克隆+最小化
完成配置

11.3 一键配置脚本

bash 复制代码
#!/bin/bash
# setup-zephyr.sh

set -e

PROJECT_DIR=${1:-~/zephyr}
MANIFEST_URL=${2:-https://github.com/zephyrproject-rtos/zephyr}
REVISION=${3:-main}

echo "Setting up Zephyr project..."
echo "  Project dir: $PROJECT_DIR"
echo "  Manifest: $MANIFEST_URL"
echo "  Revision: $REVISION"

# 初始化
west init -m $MANIFEST_URL --mr $REVISION $PROJECT_DIR
cd $PROJECT_DIR

# 使用浅克隆
west config --global update.clone-depth 1

# 更新
west update

echo "Done! Total size:"
du -sh $PROJECT_DIR

结束语

通过本文的介绍,相信您已经掌握了Zephyr项目按需配置的多种方法:

方法 适用场景 难度
project-filter 禁用特定模块 简单
自定义Manifest 新项目初始化 中等
本地Manifest扩展 添加额外模块 简单
浅克隆 节省空间 简单
path-exclude 排除子目录 中等

合理的按需配置可以带来以下收益:

收益 效果
磁盘空间 节省60-80%
下载时间 节省70-90%
更新速度 提升3-5倍
版本可控性 完全版本锁定

建议根据实际开发需求,选择最合适的配置策略,并在实践中不断优化。


参考资料

相关推荐
ScilogyHunter3 小时前
Zephyr最简工程配置指南
zephyr
ScilogyHunter4 小时前
Zephyr主仓库目录结构完全指南
zephyr
ScilogyHunter5 小时前
Zephyr工程配置完全指南
zephyr
ScilogyHunter5 小时前
Zephyr SDK按需配置完全指南
zephyr
ScilogyHunter6 小时前
Zephyr编译生成的build目录完全解析
zephyr
ScilogyHunter6 小时前
Zephyr开发中的Manifest文件完全解析
manifest·zephyr·west
ScilogyHunter1 天前
Zephyr概述
zephyr
ScilogyHunter1 天前
Zephyr SDK 目录结构详解
zephyr
ScilogyHunter1 天前
Zephyr Shell完全指南
shell·zephyr