west,并让它列出这个项目的全部子仓库 —— 到这一步,你才算"真的有一个能用的 Zephyr 环境"。
使命里判断这条线的第一个理由是"纯 Python / Markdown,Windows 上就能跑"。
但"能跑"的前提是环境认得这个仓库。实测你的克隆是部分克隆 + 稀疏检出
(blob:none + sparseCheckout=true),只检出了文档相关的少数文件 ——
所以 west 连 manifest 都读不了(会报 submanifests: file not found)。
这一节先把这条路打通。
west 不是编译器,是"元工具"。它读 west.yml 这份 manifest,
决定"这个项目由哪些 git 仓库组成、各自该在哪个版本",然后替你批量 clone/更新/构建。Zephyr 有几十个配套仓库,靠手工 clone 是管不过来的。west.yml 末尾有一行 import: submanifests ——
它把 HAL、模块等清单拆到 submanifests/ 目录里。少了这个目录,manifest 就是坏的。git ls-files 数出来的文件远多于磁盘上真实存在的文件。在 Git Bash 里执行(输出是实测值):
cd /f/0-code/20-active/oss-zephyr
# ① 体检:仓库里有多少文件 vs 磁盘上真实有多少
git ls-files | wc -l # 67454 ← 仓库里的
find . -type f -not -path "./.git/*" | wc -l # 260 ← 磁盘上的
git config --get core.sparseCheckout # true
git config --get remote.origin.partialclonefilter # blob:none
# ② 找出 west 为什么读不了 manifest
ls submanifests 2>/dev/null || echo "submanifests 缺失" # 缺失 ✗
# ③ 最小修复:只把 manifest 需要的那一个目录加回工作区(不会拉整仓)
git sparse-checkout add submanifests
ls submanifests | head -3 # README.txt / optional.yaml …
# ④ 装 west 并确认版本
pip install west
west --version # West version: v1.5.0
然后回到工作区根初始化(注意:west init -l 要在工作区目录里执行,把已有克隆指定为 manifest 仓库):
cd /f/0-code/20-active
west init -l oss-zephyr
# === Initializing from existing manifest repository oss-zephyr
# --- Creating …/20-active/.west and local configuration file
west topdir # 应指向 F:/0-code/20-active
west list | head # 列出 manifest 里的项目:名字 / 路径 / 版本 / 仓库地址
你应该看到 manifest zephyr HEAD N/A 打头,后面跟着 acpica、cmsis、hal_adi 等一长串项目 ——
这就是 Zephyr 的"全家福"。注意:现在只是"列出来",这些仓库还没下载(那一步是 west update,几百 MB,放到下一节)。
顺手记一笔:把"克隆是稀疏检出、submanifests 缺失、用 sparse-checkout add 修复"写进
开源贡献/00-环境与流程.md —— 这是你环境里的真实坑,下次换机器还会遇到。
1. west 在 Zephyr 里扮演什么角色?
对。它读 manifest(west.yml)决定"项目由哪些仓库组成、各在什么版本",然后批量 clone / 更新 / 构建。编译器是交叉工具链(如 arm-zephyr-eabi-gcc),不是 west。
2. git ls-files 数出 67454,磁盘上只有 260 个文件,说明?
对。稀疏检出(sparse-checkout)只把部分文件放到工作区 —— 它省时间,但会让依赖"全量文件"的工具(如 west 读 manifest)失败。修复方式是按需把目录加回来,而不是重新克隆。
3. west list 成功之后,那些仓库在哪?
对。west list 只是"读清单并打印";真正把仓库拉下来的是 west update(体积很大,几百 MB,下一节专门处理)。