环境

  • 系统:Windows 10

  • 终端:MSYS2

  • 使用对应的 Windwos 安装包安装相关软件:

    不要使用 MSYS2 的 pacman 命令安装

    • Python
      1. 当前使用的版本是 3.12.5
      2. 环境变量 PATH 里面包含有:C:\Program Files (x86)\Python\Python312(以实际安装路径为准)
    • Git
      1. 当前使用的版本是 2.44.0
      2. 环境变量 PATH 里面包含有:D:\Program Files\Git\cmd(以实际安装路径为准)
    • 7-Zip
      1. 当前使用的版本是 23.01
      2. 环境变量 PATH 里面包含有:C:\Program Files\7-Zip(以实际安装路径为准)
    • CMake
      1. 当前使用的版本是 4.3.3
      2. 环境变量 PATH 里面包含有:C:\Program Files\CMake\bin(以实际安装路径为准)
    • Ninja
      1. 当前使用的版本是 1.13.1
      2. 将解压得到的 ninja.exe 放到 C:\Program Files\CMake\bin 里面。

west 工具

Zephyr 使用 west 这个元工具(meta-tool)来管理其多个子仓库。

类似于 Repo + Git 的组合

west 这个工具使用 python 编写的,所以我们可以通过 pip 来安装它。

  • 创建 Zephyr 目录

    1
    2
    3
    
    $ mkdir Zephyr
    
    $ cd Zephyr
    
  • 创建虚拟环境

    1
    
    $ python3 -m venv .venv
    
  • 激活虚拟环境

    1
    
    $ source .venv/Scripts/activate
    

    可以使用 deactivate 取消激活。

  • 更新 pip 命令

    1
    
    $ python3 -m pip install --upgrade pip
    
  • 安装 west

    1
    2
    
    # -U (--upgrade)
    $ pip3 install -U west
    

    可以使用 pip3 uninstall west 卸载 west。

  • 查看当前 west 版本

    1
    2
    
    $ west --version
    West version: v1.5.0
    

下载 Zephyr 源码

当前已经位于 Zephyr 的虚拟环境。

1
2
3
4
5
# 初始化
$ west init

# 更新 (克隆仓库)
$ west update

为 CMake 注册用户包

当前已经位于 Zephyr 的虚拟环境。

1
$ west zephyr-export

对于 MSYS2 来说,相关配置会导出到 ~/.cmake/packages 里面。

1
2
3
4
$ ls -l ~/.cmake/packages
total 0
drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 12 18:11 Zephyr
drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 12 18:11 ZephyrUnittest

CMakeLists.txt 可以调用 find_package(Zephyr) 来查找 Zephyr 这个用户包。

1
2
3
4
5
$ cat ~/.cmake/packages/Zephyr/b5bfdf742c8fcf3a0d29c9fa5cdbb73c
D:/Zeepunt/thirdparty/Zephyr/zephyr/share/zephyr-package/cmake

$ cat ~/.cmake/packages/ZephyrUnittest/18bd39923893ddc6f08854944a6214a1
D:/Zeepunt/thirdparty/Zephyr/zephyr/share/zephyrunittest-package/cmake

可以发现,这两个用户包里面的内容是指向 Zephyr 这个用户包的实际路径。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
$ ls -l /d/Zeepunt/thirdparty/Zephyr/zephyr/share/zephyr-package/cmake
total 28
-rw-r--r-- 1 Zeepunt Zeepunt 6673 Jun  8 23:55 ZephyrConfig.cmake
-rw-r--r-- 1 Zeepunt Zeepunt 6254 Jun  8 23:55 ZephyrConfigVersion.cmake
-rw-r--r-- 1 Zeepunt Zeepunt 1080 Jun  8 23:55 zephyr_export.cmake
-rw-r--r-- 1 Zeepunt Zeepunt 6066 Jun  8 23:55 zephyr_package_search.cmake

$ ls -l /d/Zeepunt/thirdparty/Zephyr/zephyr/share/zephyrunittest-package/cmake
total 6
-rw-r--r-- 1 Zeepunt Zeepunt  150 Jun  8 23:55 ZephyrUnittestConfig.cmake
-rw-r--r-- 1 Zeepunt Zeepunt  130 Jun  8 23:55 ZephyrUnittestConfigVersion.cmake
-rw-r--r-- 1 Zeepunt Zeepunt 1152 Jun  8 23:55 zephyr_export.cmake

安装 Zephyr SDK

当前已经位于 Zephyr 的虚拟环境。

1
2
# 安装 python 依赖
$ west packages pip --install

这里手动安装:

使用 west sdk install --install-dir $PWD 命令安装会报错。

  1. sdk-ng 下载最新的压缩包。

    这里下载的是基础包:zephyr-sdk-1.0.1_windows-x86_64_minimal.7z

  2. 将压缩包都解压到 zephyr-sdk 目录。

    1
    2
    3
    4
    5
    6
    7
    
    $ ls -l
    total 8
    drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 13 01:09 bootloader
    drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 13 01:13 modules
    drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 13 01:10 tools
    drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 13 00:47 zephyr
    drwxr-xr-x 1 Zeepunt Zeepunt 0 Jun 13 01:49 zephyr-sdk-1.0.1  # 解压后的目录
    
  3. 运行 zephyr-sdk 目录里面的 setup.cmd 脚本。

    这一步是在 MSYS 里面操作。

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    
    $ cd zephyr-sdk-1.0.1
    $ ./setup.cmd
    
    # 执行脚本后, 会提供一些选项供你选择
    # 根据当前需求, 下面这些选项我选择了 Y:
    #   1. GNU
    #      1) arm-zephyr-eabi
    #      2) riscv64-zephyr-elf
    #      3) x86_64-zephyr-elf
    #   2. host tools
    #   3. Register Zephyr SDK CMake package
    # 其他都选 N
    
  4. 配置环境变量 ZEPHYR_BASE

    1
    2
    3
    4
    
    # 删除之前的配置
    $ sed -i '/^export ZEPHYR_BASE=/d' ~/.bashrc
    
    $ echo 'export ZEPHYR_BASE=/d/Zeepunt/thirdparty/Zephyr/zephyr' >> ~/.bashrc
    
  5. 配置环境变量 ZEPHYR_SDK_INSTALL_DIR

    1
    2
    3
    4
    
    # 删除之前的配置
    $ sed -i '/^export ZEPHYR_SDK_INSTALL_DIR=/d' ~/.bashrc
    
    $ echo 'export ZEPHYR_SDK_INSTALL_DIR=/d/Zeepunt/thirdparty/Zephyr/zephyr-sdk-1.0.1' >> ~/.bashrc
    

测试

随便创建一个目录。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$ mkdir test
$ cd test

# 拷贝示例工程
$ cp -r /d/Zeepunt/thirdparty/Zephyr/zephyr/samples/hello_world .
$ cd hello_world

# 激活虚拟环境 (前面创建的虚拟环境, 这里用绝对路径)
$ source /d/Zeepunt/thirdparty/Zephyr/.venv/Scripts/activate

# 可以使用 west boards | grep stm32 查看支持哪些板子

# 编译
$ west build -p auto -b stm32f103_mini .
-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
...
Memory region         Used Size  Region Size  %age Used
           FLASH:       13820 B       256 KB      5.27%
             RAM:        4128 B        48 KB      8.40%
           SRAM0:           0 B        48 KB      0.00%
        IDT_LIST:           0 B        32 KB      0.00%
Generating files from D:/temp/hello_world/build/zephyr/zephyr.elf for board: stm32f103_mini/stm32f103xe

版权声明

本文为「Zeepunt 日常随笔」的原创文章,遵循 CC BY-NC-ND 4.0 许可协议。允许在署名作者、注明原文链接且不作任何更改的前提下非商业性地分享本文。

原文链接:https://zeepunt.github.io/article/zephyr/zephyrwindows-%E4%B8%8B%E9%83%A8%E7%BD%B2/