零基础搭建Zephyr开发环境:Docker到首次编译完整指南
零基础搭建Zephyr开发环境Docker到首次编译完整指南【免费下载链接】zephyr-cnzephyr-cn is a collection of original work of SIG-Zephyr项目地址: https://gitcode.com/openeuler/zephyr-cn读完这篇指南你的电脑上将多出一个完整的Zephyr一款面向嵌入式设备的开源实时操作系统工程它能在容器里被 westZephyr 自带的多仓库项目管理工具命令驱动编译编译产物会直接在 QEMU开源的硬件模拟器用来虚拟一块 CPU 而不需要真实开发板上跑起来终端里滚动着哲学家们思考、吃饭的日志。整个过程不需要真实硬件一台装好 Docker Desktop 的 Windows 机器就够了。下面是你最终会看到的运行画面先睹为快动手前用这张表核对你手头的前置条件准备项版本/规格说明操作系统Windows 10/11开启 WSL2Docker Desktop 依赖 WSL 后端Docker Desktop4.18.0提供容器运行环境Zephyr 项目包sig_zephyr_v2.7.4.tar.gz基于 LTS 2.7.4已按 Zephyr 工程布局打包好的源码Zephyr SDKzephyr-sdk-0.13.1-linux-x86_64-setup.run编译器、链接器等交叉编译工具磁盘空间至少 20GB 空闲构建镜像本身约 12.1GB建议别放 C 盘这些资源都可以通过 openEuler 社区的 zephyr-cn 仓库获取。 一条流水线搭建Zephyr开发容器搭建过程其实就是一条流水线拉镜像 → 起容器 → 铺项目 → 装 SDK四步首尾相接中间任何一步卡住不动都不要慌先对照每步末尾的验证提示确认状态再往下走。先给 Docker 换个国内镜像源。打开 Docker Desktop 的 Settings → Docker Engine在 JSON 配置里加上registry-mirrors字段并指向一个国内加速地址保存后 Docker 会自动重启。这一步不做后面的镜像拉取大概率慢得让人怀疑人生。拉取官方 Zephyr 构建镜像。下面这条命令从镜像仓库下载zephyr-build镜像它预装了编译 Zephyr 所需的全部工具链docker pull zephyrprojectrtos/zephyr-build:latest执行后你应看到逐层滚动Pull complete最后一行停在Status: Downloaded newer image耗时取决于带宽耐心等待即可创建容器并挂上本地目录。下面这条命令启动一个名为SIG_Zephyr的容器同时把 Windows 上的D:\Workspace\SIG_Zephyr文件夹挂进容器的/workdir——这样你在 Windows 资源管理器里放的文件容器内随手可见省去了来回传文件的麻烦docker run -it --name SIG_Zephyr -v /d/Workspace/SIG_Zephyr:/workdir zephyrprojectrtos/zephyr-build:latest执行后命令行提示符会变成user容器ID:/workdir$说明你已经坐在容器里面了把两个压缩包放进挂载目录然后在容器里解压并校验。先在 Windows 侧把项目包和 SDK 安装器复制到D:\Workspace\SIG_Zephyr回到容器内解压再用west update按清单同步各子仓库这一步同时能验证工程目录结构是否完整正常会看到一串仓库被检出tar -xvzf sig_zephyr_v2.7.4.tar.gz west update解压后/workdir下会多出.west、bootloader、modules、tools、zephyr等目录这就是一个标准 Zephyr 工作区的样子。安装 SDK。给安装器加上执行权限后运行按默认路径一路回车chmod x zephyr-sdk-0.13.1-linux-x86_64-setup.run ./zephyr-sdk-0.13.1-linux-x86_64-setup.run安装结束时若提示把 SDK 加入PATH选默认即可容器镜像里的 west 构建流程会自动找到它。至此环境就绪真正让 Zephyr 跑起来只需要两条命令。⚙️ 用west在QEMU上编译运行哲学家示例构建 Zephyr 应用的核心命令是west build其中-b指定板级目标。这里选qemu_cortex_m3——它是一块虚拟开发板对应一颗 Cortex-M3 内核编译和运行全程不需要任何实物。我们用它来构建 Zephyr 自带的 philosophers哲学家问题示例这是一个经典的多线程同步演示程序。先进入 zephyr 源码目录然后执行下面这条命令完成一次干净的配置加编译-p auto表示自动清理旧构建缓存cd zephyr west build -p auto -b qemu_cortex_m3 samples/philosophers编译成功的标志有两处[130/130] Linking C executable zephyr/zephyr.elf说明可执行文件已生成末尾的 Memory 表格显示 FLASH 占用约 7.39%、SRAM 约 14.60%说明一个几 KB 量级的嵌入式程序被装进了芯片编译产物已经就位现在让它在虚拟硬件上跑起来。下面这条命令复用刚才的构建目录把 elf 文件送进 QEMU 执行west build -t run看到Booting Zephyr OS build v2.7.4后五个哲学家会轮流在 THINNING思考、EATING进食、HOLDING ONE FORK握着叉子三种状态间切换——这些跳动的状态行就是五个线程在并发调度下的真实写照。按CtrlC或CtrlA, X即可退出仿真到这里其实已经可以跑了命令行闭环已经打通接下来把日常开发搬进图形界面体验会舒适很多。 让VSCode理解Zephyr代码插件与工作区配置Zephyr 社区主流玩法是纯命令行但 VSCode 加上几个插件后代码浏览、构建、调试都能图形化完成。推荐安装C/C智能提示与调试、CMake构建脚本支持、kconfig内核配置语法支持、nRF DeviceTree设备树文件支持、Arm Assembly汇编高亮。配置前后的差异如下表场景不配置配置后代码跳转满屏红线跳转定义失败与本次构建相关的文件均可补全、跳转编译手敲完整 west 命令在 Run Task 列表里点一下调试GDB 命令行敲命令图形化打断点、单步、查看变量其中跳转功能的关键是compile_commands.json——构建系统每次配置 CMake 后都会生成这个文件记录了参与编译的文件和编译器参数。因为 Zephyr 代码量很大插件默认索引扛不住必须靠它划定范围注意它只覆盖本次构建用到的文件没启用的子系统的代码不会纳入提示。工作区建议用 multi-root 布局把zephyr源码、build构建目录和按需的 modules 一起挂进来配置文件不超过 15 行可直接复制使用{ folders: [ { path: zephyr }, { path: build } ], settings: { C_Cpp.default.compileCommands: ${workspaceFolder}/../build/compile_commands.json, C_Cpp.default.cStandard: c99 } }构建任务和 GDB 调试器分别由build/.vscode/tasks.json与launch.json接管zephyr-cn 仓库的vscode/目录下有现成参考拷进你的 build 目录即可生效。理解代码跳转为什么能跨文件生效看看 Zephyr 的分层结构会更有感觉——从平台层到内核、再到网络等子系统配置完成后各层代码的声明与定义都能互相跳转体验升级到位了但再顺滑的流程也绕不开几个高频故障下面逐个给出解法。 一行命令修好高频问题与对应处理症状原因一行修复west: command not found容器 shell 没加载 Zephyr 环境变量source zephyr/zephyr-env.sh重启电脑后进不去容器容器已停止直接 attach 无效docker start SIG_Zephyr docker attach SIG_Zephyr报错Board qemu_cortex_m3 not found在错误目录执行工程根目录缺.west标记回到/workdir下确认ls -a能看到.west再重跑 build 命令拉取镜像长期卡在同一层默认镜像源在海外链路不稳定在 Docker Engine 配置里补上registry-mirrors后重启 Docker接下来可以去翻一翻samples/下其他示例比如hello_world把-b换成别的目标板体验不同平台想上真机时只需把板级目标换成你的开发板、接上调试器即可。延伸阅读West 工具入门doc/source/develop/west/basic.rstWindows Docker 环境完整说明doc/source/develop/windows_docker.rstVSCode 开发工作流详解doc/source/develop/vscode.rst【免费下载链接】zephyr-cnzephyr-cn is a collection of original work of SIG-Zephyr项目地址: https://gitcode.com/openeuler/zephyr-cn创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考