【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
英文地址,請注明出處:http://en.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 億參數模型破解大模型落地的算力…