【Zephyr】Window下的Zephyr编译和使用

工具下载

参考文档(Getting Started Guide — Zephyr Project Documentation)中介绍,可以直接通过winget下载:

winget download Kitware.CMake Ninja-build.Ninja oss-winget.gperf python Git.Git oss-winget.dtc wget 7zip.7zip

但是因为网络问题安装可能出现问题,这里直接独立下载(可以通过winget的下载过程查看到具体的下载地址)。

  • CMake,下载地址Download CMake,下载版本cmake-4.1.0-rc3-windows-x86_64.msi,下载后直接默认安装即可。安装后执行cmake命令,结果如下,表示安装成功。
C:\Users\HOME>cmake --help
Usagecmake [options] <path-to-source>cmake [options] <path-to-existing-build>cmake [options] -S <path-to-source> -B <path-to-build># 后面略
  • ninja:下载地址https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-win.zip,下载到的是一个独立的可执行文件。

  • gperf:下载地址https://github.com/oss-winget/oss-winget-storage/raw/96ea1b934342f45628a488d3b50d0c37cf06012c/packages/gperf/3.1/gperf-3.1-win64_x64.zip,得到的也是一个独立的文件。

  • dtc:下载地址https://github.com/oss-winget/oss-winget-storage/raw/96ea1b934342f45628a488d3b50d0c37cf06012c/packages/dtc/1.6.1/dtc-msys2-1.6.1-x86_64.zip,下载到的是一些可执行文件。

  • wget:下载地址https://eternallybored.org/misc/wget/1.21.4/64/wget.exe,下载到的是一个独立的文件。

其他的诸如Python、Git、7zip因为已经在使用,所以这里不额外下载。

需要注意这些工具在后续的操作中会使用,所以要保证它们能被访问到,这里将独立的可执行文件放到一个目录,比如E:\zephyrtools,然后将该目录添加到环境变量中。另外,再将Python、Git、7zip的安装目录也添加到环境变量中,保证在Windows的Shell下能够直接使用,比如:

在这里插入图片描述

最后还需要下载一个Qemu,用于测试编译得到的内核。

源码以及SDK下载

  1. 创建一个目录zephyrproject。
  2. zephyrproject同级目录下执行如下的命令:
python -m venv zephyrproject\.venv

此时zephyrproject下会创建一个.venv目录,它是一个Python的虚拟环境,后续的操作都在该虚拟环境下进行,以免影响主机的Python环境。

  1. 执行如下的命令进入Python虚拟环境:
zephyrproject\.venv\Scripts\activate.bat

注意这里有批处理和PowerShelll两个版本,后者似乎会出错,所以这里使用批处理,结果如下(注意开头有(.venv),如果要退出当前状态,执行deactivate):

(.venv) E:\>
  1. 安装west工具:
(.venv) E:\>pip install west
Collecting westDownloading west-1.4.0-py3-none-any.whl (104 kB)---------------------------------------- 104.8/104.8 kB 867.3 kB/s eta 0:00:00# 中间略Installing collected packages: docopt, six, ruamel.yaml.clib, PyYAML, packaging, colorama, ruamel.yaml, python-dateutil, pykwalify, westDEPRECATION: docopt is being installed using the legacy 'setup.py install' method, because it does not have a 'pyproject.toml' and the 'wheel' package is not installed. pip 23.1 will enforce this behaviour change. A possible replacement is to enable the '--use-pep517' option. Discussion can be found at https://github.com/pypa/pip/issues/8559Running setup.py install for docopt ... done
Successfully installed PyYAML-6.0.2 colorama-0.4.6 docopt-0.6.2 packaging-25.0 pykwalify-1.8.0 python-dateutil-2.9.0.post0 ruamel.yaml-0.18.14 ruamel.yaml.clib-0.2.12 six-1.17.0 west-1.4.0[notice] A new release of pip is available: 23.0.1 -> 25.1.1
[notice] To update, run: python.exe -m pip install --upgrade pip

安装成功之后就可以在zephyrproject.venv\Scripts目录下找到west.exe这个程序。

  1. 下载zephyr源码:
(.venv) E:\>west init zephyrproject
=== Initializing in E:\zephyrproject
--- Cloning manifest repository from https://github.com/zephyrproject-rtos/zephyr
Cloning into 'E:\zephyrproject\.west\manifest-tmp'...
remote: Enumerating objects: 1301937, done.
remote: Counting objects: 100% (904/904), done.
remote: Compressing objects: 100% (334/334), done.
remote: Total 1301937 (delta 615), reused 570 (delta 570), pack-reused 1301033 (from 2)
Receiving objects: 100% (1301937/1301937), 742.54 MiB | 6.20 MiB/s, done.
Resolving deltas: 100% (961206/961206), done.
Updating files: 100% (48763/48763), done.
--- setting manifest.path to zephyr
=== Initialized. Now run "west update" inside E:\zephyrproject.

此时会用到Git,它从Github中下载源码,并放到zephyrproject目录下,源代码在默认名为zephyr的目录中。

  1. 进入zephyrproject并下载额外的代码:
(.venv) E:\>cd zephyrproject
(.venv) E:\zephyrproject>west update
=== updating acpica (modules/lib/acpica):
--- acpica: initializing
Initialized empty Git repository in E:/zephyrproject/modules/lib/acpica/.git/
--- acpica: fetching, need revision 8d24867bc9c9d81c81eeac59391cda59333affd4# 后面略

注意前一步中的init只会下载zephyr的主代码,还需要执行update来下载其他的模块,这类似于Git中的submodule。

具体要下载哪些模块可以在zephyr目录下的west.yml文件中找到,它们是一些板极支持,特定功能模块,工具,等等,下载后被放在bootloader、modules、tools等目录。

注意本次update有一个报错:

=== updating hal_nuvoton (modules/hal/nuvoton):
--- hal_nuvoton: fetching, need revision be1042dc8a96ebe9ea4c5d714f07c617539106d6
fatal: unable to access 'https://github.com/zephyrproject-rtos/hal_nuvoton/': Recv failure: Connection was reset

由于是HAL层的模块,这里测试应该也不会用到nuvoton,暂时先不管。

  1. 导出zephyr的一些信息到环境变量中,这样CMake才能找到zephyr:
(.venv) E:\zephyrproject>west zephyr-export
Zephyr (E:/zephyrproject/zephyr/share/zephyr-package/cmake)
has been added to the user package registry in:
HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\ZephyrZephyrUnittest (E:/zephyrproject/zephyr/share/zephyrunittest-package/cmake)
has been added to the user package registry in:
HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\ZephyrUnittest

注意它只在本终端中有效,后续如果重新打开终端,需要重新执行该操作。

  1. 安装Python依赖包:
(.venv) E:\zephyrproject>west packages pip --install
Ignoring python-magic: markers 'sys_platform != "win32"' don't match your environment
Collecting pyelftools>=0.29Downloading pyelftools-0.32-py3-none-any.whl (188 kB)━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 188.5/188.5 kB 1.1 MB/s eta 0:00:00
Requirement already satisfied: PyYAML>=6.0 in e:\zephyrproject\.venv\lib\site-packages (from -r E:\zephyrproject\zephyr\scripts\requirements-base.txt (line 11)) (6.0.2)# 后面略

这些下载的依赖来自zephyrproject\zephyr\scripts\requirements.txt。

  1. 安装编译工具:
(.venv) E:\zephyrproject>west sdk install
Found 'E:\zephyrproject\zephyr\SDK_VERSION', installing version 0.17.2.
Fetching Zephyr SDK list...
Fetching sha256...
Downloading https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.17.2/zephyr-sdk-0.17.2_windows-x86_64_minimal.7z...
zephyr-sdk-0.17.2_windows-x86_64_minimal.7z: 100%|###################################|   4.71k 4.69M/s   [00:00]Downloaded: C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2_windows-x86_64_minimal.7z
Extract: C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2_windows-x86_64_minimal.7z
INFO patool: Extracting C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2_windows-x86_64_minimal.7z ...
INFO patool: could not find a 'file' executable, falling back to guess mime type by file extension
INFO patool: running "D:\Program Files\7-Zip\7z.EXE" x -aou -oC:\Users\HOME\tmprwm3irxg -- C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2_windows-x86_64_minimal.7z
INFO patool: ... C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2_windows-x86_64_minimal.7z extracted to `C:\Users\HOME\tmprwm3irxg'.
Move: C:\Users\HOME\tmprwm3irxg\zephyr-sdk-0.17.2 to C:\Users\HOME\zephyr-sdk-0.17.2.
Zephyr SDK 0.17.2 SetupRegistering Zephyr SDK CMake package ...
Zephyr-sdk (C:/Users/HOME/zephyr-sdk-0.17.2/cmake)
has been added to the user package registry in:
HKEY_CURRENT_USER\Software\Kitware\CMake\Packages\Zephyr-sdkAll done.
Zephyr SDK 0.17.2 Setup# 中间略Extracting archive: toolchain_windows-x86_64_xtensa-sample_controller32_zephyr-elf.7z
--
Path = toolchain_windows-x86_64_xtensa-sample_controller32_zephyr-elf.7z
Type = 7z
Physical Size = 41590492
Headers Size = 18827
Method = LZMA2:24 BCJ
Solid = +
Blocks = 2Everything is OkFolders: 228
Files: 1675
Size:       206505310
Compressed: 41590492
Installing host tools ...
SKIPPED: Windows host tools are not available yet.All done.(.venv) E:\zephyrproject>

默认下载到了C:\Users\HOME\zephyr-sdk-0.17.2目录。

这一步下载可能会失败,可以尝试手动完成,具体的操作见Zephyr SDK — Zephyr Project Documentation。

编译和执行

SDK下载之后就可以开始编译zephyr,下面是命令格式:

west build -p always -b <your-board-name> app
  • -p always表示强制清理并重新创建构建目录。
  • -b之后跟的是单板名,可以通过如下命令查看:
(.venv) E:\zephyrproject\zephyr>west boards
esp32c3_042_oled
96b_aerocore2
96b_argonkey
96b_avenger96
96b_carbon
96b_meerkat96
96b_neonkey
96b_nitrogen
# 后面略
  • 最后是一个应用程序路径,用于指定要编译的Zephyr应用代码位置。

下面是一个例子:

(.venv) E:\zephyrproject\zephyr>west build -p always -b qemu_x86 samples/hello_world
-- west build: generating a build system
Loading Zephyr default modules (Zephyr base).
-- Application: E:/zephyrproject/zephyr/samples/hello_world
-- CMake version: 4.1.0-rc3
-- Found Python3: E:/zephyrproject/.venv/Scripts/python.exe (found suitable version "3.10.11", minimum required is "3.10") found components: Interpreter
-- Cache files will be written to: E:/zephyrproject/zephyr/.cache
-- Zephyr version: 4.2.99 (E:/zephyrproject/zephyr)
-- Found west (found suitable version "1.4.0", minimum required is "0.14.0")
-- Board: qemu_x86, qualifiers: atom
-- ZEPHYR_TOOLCHAIN_VARIANT not set, trying to locate Zephyr SDK
-- Found host-tools: zephyr 0.17.2 (C:/Users/HOME/zephyr-sdk-0.17.2)
-- Found toolchain: zephyr 0.17.2 (C:/Users/HOME/zephyr-sdk-0.17.2)
-- Found Dtc: E:/zephyrtools/dtc.exe (found suitable version "1.6.1", minimum required is "1.4.6")
-- Found BOARD.dts: E:/zephyrproject/zephyr/boards/qemu/x86/qemu_x86.dts
-- Generated zephyr.dts: E:/zephyrproject/zephyr/build/zephyr/zephyr.dts
-- Generated pickled edt: E:/zephyrproject/zephyr/build/zephyr/edt.pickle
-- Generated devicetree_generated.h: E:/zephyrproject/zephyr/build/zephyr/include/generated/zephyr/devicetree_generated.h
Parsing E:/zephyrproject/zephyr/Kconfig
Loaded configuration 'E:/zephyrproject/zephyr/boards/qemu/x86/qemu_x86_defconfig'
Merged configuration 'E:/zephyrproject/zephyr/samples/hello_world/prj.conf'
Configuration saved to 'E:/zephyrproject/zephyr/build/zephyr/.config'
Kconfig header saved to 'E:/zephyrproject/zephyr/build/zephyr/include/generated/zephyr/autoconf.h'
-- Found GnuLd: c:/users/home/zephyr-sdk-0.17.2/x86_64-zephyr-elf/x86_64-zephyr-elf/bin/ld.bfd.exe (found version "2.38")
-- The C compiler identification is GNU 12.2.0
-- The CXX compiler identification is GNU 12.2.0
-- The ASM compiler identification is GNU
-- Found assembler: C:/Users/HOME/zephyr-sdk-0.17.2/x86_64-zephyr-elf/bin/x86_64-zephyr-elf-gcc.exe
CMake Warning at E:/zephyrproject/zephyr/subsys/random/CMakeLists.txt:12 (message):Warning: CONFIG_TIMER_RANDOM_GENERATOR and CONFIG_TEST_CSPRNG_GENERATOR arenot truly random generators. This capability is not secure and it isprovided for testing purposes only. Use it carefully.-- Found gen_kobject_list: E:/zephyrproject/zephyr/scripts/build/gen_kobject_list.py
-- Configuring done (17.2s)
-- Generating done (0.3s)
-- Build files have been written to: E:/zephyrproject/zephyr/build
-- west build: building application
[1/119] Generating include/generated/zephyr/version.h
-- Zephyr version: 4.2.99 (E:/zephyrproject/zephyr), build: v4.2.0-676-g20efb9edbb35
[119/119] Linking C executable zephyr\zephyr.elf
Memory region         Used Size  Region Size  %age UsedRAM:      106656 B        31 MB      0.33%IDT_LIST:          0 GB         2 KB      0.00%
Generating files from E:/zephyrproject/zephyr/build/zephyr/zephyr.elf for board: qemu_x86

编译得到zephyrproject\zephyr\build\zephyr\zephyr.elf,可以通过qemu执行的结果:

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/90880.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/90880.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图论(BFS)构造邻接表(运用队列实现搜索)

码蹄集OJ-夏日漫步 #include<bits/stdc.h> using namespace std; int n; int a[200010],dis[200010],qaq[1000010]; vector<int>son[200010]; int que[200010]; int main( ) {memset(qaq,-1,sizeof(qaq));memset(dis,-1,sizeof(dis));cin>>n;for(int i1;i…

vue怎么实现导入excel表功能

<el-uploadref"upload":action"aaa":on-change"importProject"name"excelFile"multiple:auto-upload"false":show-file-list"false"><el-button type"warning">导入</el-button><…

Linux DNS解析3 -- DNS解析代理配置使用

当网关设备配置了 /etc/hosts 文件时&#xff0c;确实可以为终端设备提供自定义DNS解析功能&#xff0c;但具体效果取决于网关的DNS代理服务配置。下面详细解释其工作原理和限制&#xff1a; 一、/etc/hosts 文件的作用 /etc/hosts 是本地静态域名解析文件&#xff0c;格式为&a…

历史版本的vscode下载地址

我有点厌恶vscode越来越臃肿的体积&#xff0c;也不需要层出不穷的新功能&#xff0c;于是网上找寻历史版本。 首先是这个页面&#xff1a;https://code.visualstudio.com/updates &#xff0c;但最多只显示两年&#xff0c;更早的就要手工修改地址栏&#xff0c;我试了最早的…

如何规范化项目执行

要实现项目执行的规范化&#xff0c;应做到以下几点&#xff1a;制定详细的项目执行计划、明确项目团队角色职责、建立高效沟通与协调机制、实施全面的质量与风险管理、采用合适的项目管理工具。其中&#xff0c;尤其重要的是明确项目团队角色职责&#xff0c;通过构建清晰的责…

【Rust异步】async和await异步编程实战:高并发任务处理全解析

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

在Linux上使用DuckCP实现从csv文件汇总数据到SQLite数据库的表

从pypi网站Duckcp页面下载duckcp-0.1.1-py3-none-any.whl 一开始用的Python 3.11.2环境。 继续沿用上文打补丁的方法&#xff0c;得到一个支持python3.11.1的安装包。 因为缺少zip压缩工具&#xff0c;使用python程序来完成对修改后文件的重新压缩。 import os import zipfile…

基于深度学习的图像分类:使用EfficientNet实现高效分类

前言 图像分类是计算机视觉领域中的一个基础任务&#xff0c;其目标是将输入的图像分配到预定义的类别中。近年来&#xff0c;深度学习技术&#xff0c;尤其是卷积神经网络&#xff08;CNN&#xff09;&#xff0c;在图像分类任务中取得了显著的进展。EfficientNet是一种新型的…

Java基础-综合案例

1、设计一个可以执行基本数学运算&#xff08;加减乘除&#xff09;的计算器程序功能描述&#xff1a;用户输入两个数字、一个运算符&#xff08;、-、*、/&#xff09;。根据所选运算符执行相应的数学运算&#xff0c;显示运算结果。import java.util.Scanner;public class Te…

四、计算机组成原理——第3章:存储系统

目录 3.1存储器概述 3.1.1存储器的分类 1.按在计算机中的作用(层次)分类 2.按存储介质分类 3.按存取方式分类 4.按信息的可保存性分类 3.1.2存储器的性能指标 3.2主存储器 3.2.1SRAM芯片和DRAM芯片 1.SRAM的工作原理 2.DRAM的工作原理 3.SRAM和DRAM的比较 4.存储器芯片的内部结…

3D Semantic Occupancy Prediction

3D 语义占用预测&#xff08;3D Semantic Occupancy Prediction&#xff09;旨在将真实世界环境划分为规则的三维体素&#xff08;voxel&#xff09;网格&#xff0c;并对每个体素同时预测&#xff1a; 占用状态&#xff08;Occupancy&#xff09;&#xff1a;该体素是否被物体…

在Word和WPS文字中添加的拼音放到文字右边

在Word和WPS文字中&#xff0c;可以方便地为中文汉字添加拼音。默认的是拼音在汉字的上方&#xff0c;而且不方便直接编辑。可以简单操作后把拼音放在汉字的右边&#xff0c;并且可以方便地编辑。一、Word&#xff1a;先为汉字添加拼音&#xff0c;然后选择性粘贴为纯文本即可1…

Torchv Unstrustured 文档解析库

一个强大且开发者友好的文档解析库&#xff0c;专为RAG&#xff08;检索增强生成&#xff09;应用优化。基于Apache Tika、Apache POI和PDFBox等业界标准Java库构建&#xff0c;TorchV Unstructured提供了增强的解析能力&#xff0c;具备智能表格结构识别和内容提取功能。 &am…

30天入门Python(基础篇)——第22天:面向对象之继承与多继承

目录 专栏导读 学习目标 1. 继承的基本概念 1.1 继承的优势 2. 单继承 2.1 基本语法 2.2 实际示例 3. super()函数详解 3.1 基本用法 3.2 super()的高级用法 4. 多继承 4.1 多继承语法 4.2 多继承示例 5. 方法解析顺序(MRO) 5.1 查看MRO 5.2 复杂的MRO示例 6. 实际应用案例 6…

学习人工智能所需知识体系及路径详解

一、核心基础知识体系1. 数学基础线性代数关键概念&#xff1a;向量空间、矩阵运算&#xff08;转置/逆矩阵&#xff09;、特征值分解、奇异值分解&#xff08;SVD&#xff09;应用场景&#xff1a;数据降维&#xff08;PCA&#xff09;、图像处理&#xff08;矩阵变换&#xf…

前端实现银河粒子流动特效的技术原理与实践

文章目录 1,引言 2,特效效果简介 3,技术原理解析 1. 粒子系统基础 2. 银河结构的数学建模 3. 动态流动与旋转 4,实现流程图 5,关键代码实现与详细讲解 1. 初始化Three.js场景 2. 生成银河粒子数据 3. 创建粒子几何体与材质 4. 实现粒子的动态旋转与动画 5. 可选:粒子颜色…

Qt_Gif_Creator 基于Qt的屏幕gif录制工具

本文介绍了一个基于Qt框架的屏幕GIF录制工具的实现。该工具包含XYGifCreator类负责GIF创建逻辑&#xff0c;使用Gif.h库进行GIF编码&#xff1b;XYGifFrame类提供GUI界面&#xff0c;支持设置录制区域大小、帧率以及保存位置。工具采用多线程处理GIF编码&#xff0c;支持Window…

Linux实战:HAProxy全方位指南

一、负载均衡核心概念 1.1 负载均衡定义 负载均衡&#xff08;Load Balance&#xff0c;简称LB&#xff09;是一种基于硬件设备或软件服务的高可用反向代理技术。它将特定业务&#xff08;如Web服务、网络流量&#xff09;分发到后端的一个或多个服务器/设备&#xff0c;从而提…

22 BTLO 蓝队靶场 Countdown 解题记录

Tools: - ELK - CyberChef - OSINT (whole World Wide Web) Hunt #1: Brute Force DetectedSource: winevent-security (1/3) — 可疑暴力破解流量来自哪个IP地址 What is the IP address from which the suspicious brute force traffic is seen?? 我们需要寻找暴力破解…

文心一言4.5开源模型实战:ERNIE-4.5-0.3B轻量化部署与效能突破

文心一言4.5开源模型实战&#xff1a;ERNIE-4.5-0.3B轻量化部署与效能突破 文心一言4.5开源模型实战&#xff1a;ERNIE-4.5-0.3B轻量化部署与效能突破&#xff0c;本文介绍百度文心一言 4.5 开源模型中 ERNIE-4.5-0.3B 的轻量化部署与效能。该 3 亿参数模型破解大模型落地的算力…