Zephyr 编译环境搭建(Linux + Window)

Zephyr 系统介绍

Zephyr™ 项目是一个采用 Apache 2.0 协议许可,Linux基金会托管的协作项目。为所有资源受限设备,构建了针对低功耗、小型内存微处理器设备而进行优化的物联网嵌入式小型、可扩展的实时操作系统(RTOS),支持多种硬件架构及多种开发板,可以在小至 8 kB 内存的系统上运行。

Zephyr 采用深入的安全开发生命周期:安全验证,模糊和渗透测试,频繁的代码审查,静态代码分析,威胁建模和审查,以防止代码中的后门 。

Zephyr 支持 Bluetooth、Bluetooth Low Energy、Wi-Fi、802.15.4、6Lowpan、CoAP、IPv4、IPv6 和 NFC 等标准,通过社区驱动的发展来改进和增强功能 。

基于 Linux 的编译环境搭建

Zephyr 可以在 Windows/MAC/Linux 上开发,首先介绍在 Linux(Ubuntu) 上的环境搭建 :

1. 更新软件源

sudo apt-get update
sudo apt-get upgrade

2. 安装依赖软件包

 ## 下面是整个一条命令
sudo apt-get install --no-install-recommends git cmake ninja-build gperf \
ccache doxygen dfu-util device-tree-compiler \
python3-ply python3-pip python3-setuptools xz-utils file make gcc-multilib   

3. 克隆 Zephyr 源码仓库

建议把 Zephyr 源码克隆到用户目录中,例如克隆至 repo/zephyr 文件夹中。

mkdir -p repo cd repo git clone https://github.com/zephyrproject-rtos/zephyr

4. 安装必要的依赖工具

## 进入 Zephyr 文件夹
cd zephyr

## 通过 pip3 工具安装其他依赖工具								
pip3 install --user -r scripts/requirements.txt	  

5. 安装 3.8.2 版本及以上 CMake 工具

Zephyr 的开发需要 cmake 3.8.2 或以上版本,通过 ubuntu 软件仓库安装的 cmake 版本较低并不符合要求,可通过以下步骤把合适的CMake安装到 ~/cmake 目录下。

mkdir $HOME/cmake && cd $HOME/cmake

wget https://cmake.org/files/v3.8/cmake-3.8.2-Linux-x86_64.sh

yes | sh cmake-3.8.2-Linux-x86_64.sh | cat

把 CMake 安装目录增加到用户环境变量中,修改用户目录中的 .bashrc 文件的最后增加一行 ,

echo "export PATH=$PWD/cmake-3.8.2-Linux-x86_64/bin:\$PATH" >> $HOME/.zephyrrc

## 执行 Zephyr 源码目录下的 zephyr-env.sh
source <zephyr git clone location>/zephyr-env.sh
      
cmake --version

查看当前 Cmake 版本号,如果是 3.8.2 ,则说明配置正常。

6. 安装 Zephyr SDK

Zephyr 的 SDK 包含所有必须的工具和交叉编译器,用于支持 build 内核在不同的系统架构上。除此之外,它包括主机工具,如自定义 QEMU 二进制文件和主机编译器,如果需要的话,可以构建宿主工具。

SDK支持以下架构:

  • X86
  • X86 IAMCU ABI
  • ARM
  • ARC
  • Nios II
  • Xtensa
  • RISC-V

本文使用的 SDK 版本是 0.9.5 ,安装过程中控制台将出现 Zephyr SDK 安装路径的提示,建议把 Zephyr SDK 安装到用户目录 ~/opt/zephyr-sdk 文件夹中。

## 下载 SDK,如果下载过程中速度过慢,可以在浏览器中下载后拷贝到对应文件夹中
mkdir -p ~/opt/zephyr-sdk && cd ~/opt/zephyr-sdk
wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.2/zephyr-sdk-0.9.2-setup.run

## 安装 SDK
sudo chmod +x zephyr-sdk-0.9.2-setup.runa
./zephyr-sdk-0.9.2-setup.run

7. 设置环境变量

在用户目录 .bashrc 文件末尾再增加 ZEPHYR_GCC_VARIANTZEPHYR_SDK_INSTALL_DIRZEPHYR_BASE等参数,修改完成之后在控制台执行 source ~/.bashrc,该指令可使新增加的环境变量立即生效 。

这里建议使用 vim 编辑器,如果 ubuntu 中默认没有安装可以先安装:

## 安装 vim 精简版 vim.tiny
sudo apt-get install vim-gtk       

## 配置 vim
sudo vim /etc/vim/vimrc

## 请在您的 vimrc 文件末尾添加如下配置,之后保存退出文件
set nu                     ## 在左侧行号
set tabstop                ## tab 长度设置为 4
set nobackup               ## 覆盖文件时不备份
set cursorline             ## 突出显示当前行
set ruler                  ## 在右下角显示光标位置的状态行
set autoindent             ## 自动缩进

安装 vim 编辑器之后,可以配置添加环境变量。

vim ~/.bashrc

## 文件末尾添加如下配置,之后保存退出文件
export PATH=<camke install directory>/bin:$PATH        ## cmake 安装路径
export ZEPHYR_GCC_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=<zephyr-sdk directory>   ## Zephyr SDK 安装路径
export ZEPHYR_BASE=<zephyr local repository directory> ## Zephyr 源码路径

## 执行命令时环境变量立即生效
source ~/.bashrc

8. 在 QEMU 中运行 hello world 示例程序

完成上述安装过程后,可以通过 hello world 示例验证 Zephyr 开发环境是否一切正常。此处使用 qemu_x86 仿真平台进行验证。此处编译生成的 hello world 可执行文件将运行于 QEMU 仿真平台。

$ZEPHYR_BASE/samples/hello_world文件夹下文件介绍:

  • CMakeLists.txt:构建文件,用于生成makefile;

  • prj.conf:配置文件 ;

  • src/main.c:主函数文件。

通过 CMake 生成 Makefile 文件时,需要通过 BOARD 参数指定目标平台,此处指定为 qemu_x86 平台。如果想在QEMU 上运行示例代码,需要先安装 Ninaja 工具用于编译源码文件:

cd ~/repo
git clone git://github.com/ninja-build/ninja.git && cd ninja

## 生成可执行文件
./configure.py --bootstrap

## 将生成的可执行文件 ninja 拷贝到系统目录(/user/bin)下
sudo cp ninja /user/bin/

安装完成 Ninaja 工具之后可以直接使用 Ninaja 工具生成工程了,以 Zephyr 系统中 hello world 例程为例:

cd $ZEPHYR_BASE/samples/hello_world

##新建一个 build 目录,用于存放临时目录
mkdir -p build && cd build

## 通过 cmake 指令生成 qemu_x86 平台 makefile 文件
cmake -GNinja -DBOARD=qemu_x86 ..

## 编译执行程序
ninja
ninja run

## 可以看到界面打印 hello world 日志
## 退出 qemu 模拟器方式:ctrl-a,然后按 x

9. 在 nRF52832 上运行蓝牙示例程序

接下来,我们在实际板子 nRF52832 上运行 Zephyr 系统的蓝牙心率计例程,例程目录为$ZEPHYR_BASE/samples/bluetooth/peripheral_hr。通过 Cmake 生成 Makefile 文件时,需要通过 BOARD 参数指定目标平台,此处指定为 nrf52_pca10040 平台。可以使用 Cmake 生成执行文件,也可以使用 Ninja 文件生成可执行文件。

下面是使用 Cmake 工具生成执行文件过程:

cd $ZEPHYR_BASE/samples/bluetooth/peripheral_hr

##新建一个 build 目录,用于存放临时目录
mkdir -p build && cd build

## 通过 cmake 指令生成 nrf52_pca10040 平台 makefile 文件
cmake -DBOARD=nrf52_pca10040 ..

## 配置工程和编译
make menuconfig           ## 用于打开 menuconfig 工具配置功能,如开启 shell 功能、修改优化等级等
make                      ## 编译程序

编译完成在 build 目录下会生成 zephyr 目录,zephyr 目录下有可执行文件(.bin、.elf、.hex 等,这里使用 hex 文件)。本设备使用的可执行文件名为 zephyr.hex,在 window 系统下获取该文件,使用 nRFgo Studio 工具烧写到 nRF52832 设备上(nRF5x Programming -> program Application -> Browse 选择生成的 zephyr.hex 文件 -> Program 烧写)。

nRFgo Studio 工具使用时如果出现下载不正常或 jlink 使用错误,可以查看 jlink 错误解析 来解决问题。

烧写完成,重启设备,打开手机蓝牙可以搜索到名称为 Zephyr Heartrate Sensor 的蓝牙设备,说明示例程序运行正确。

基于 Window 的编译环境搭建

下面介绍在 window 环境下搭建 Zephyr 系统编译环境,这里使用 cmd.exe 程序构建编译环境,如果使用 PowerShell 可能有所不同,建议查看 Zephyr 官方介绍

1. 设置环境变量用于下载网络资源

建议先用管理员权限运行 cmd.exe 程序,执行如下操作:

set HTTP_PROXY=http://user:password@proxy.mycompany.com:1234
set HTTPS_PROXY=http://user:password@proxy.mycompany.com:1234

2. 安装 Chocolatey 软件

使用 cmd 安装:

@"%SystemRoot%\System32\WindowsPowerShell\v1.0\powershell.exe" -NoProfile -InputFormat None -ExecutionPolicy Bypass -Command "iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))" && SET "PATH=%PATH%;%ALLUSERSPROFILE%\chocolatey\bin"

使用 PowerSehll 安装:

Set-ExecutionPolicy Bypass -Scope Process -Force; iex ((New-Object System.Net.WebClient).DownloadString('https://chocolatey.org/install.ps1'))

安装完成之后执行 choco 命令可以查看 Chocolatey 软件版本号信息,说明安装成功。

## 输入 choco
choco

## 显示 Chocolatey 版本号
Chocolatey v0.10.11
Please run 'choco -?' or 'choco <command> -?' for help menu.

3. 安装 Cmake 和其他工具

## 全局关闭确认,避免安装软件是确认
choco feature enable -n allowGlobalConfirmation

## 安装 Cmake 工具
choco install cmake --installargs 'ADD_CMAKE_TO_PATH=System'
    
## 安装其他工具 git、python、ninja、dtc-msys2、gperf 等
choco install git python ninja dtc-msys2 gperf

4. 下载 Zephyr 源码程序

这里我下载到 Zephyr 源码到 E:\RT-Thread\目录下。

cd E:\RT-Thread
git clone https://github.com/zephyrproject-rtos/zephyr

5. 安装 Python 依赖包

pip3 install -r zephyr/scripts/requirements.txt

如果出现如下错误提示:

Using cached https://files.pythonhosted.org/packages/cc/02/a1b500a5a467df64b5d4502072d4850b788065306dbbc8d3e0afc29ce5be/pyocd-0.13.2.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\ChenYong\AppData\Local\Temp\pip-install-bu__14uj\pyocd\setup.py", line 31, in <module>
      long_description=open('README.md', 'r').read(),
      UnicodeDecodeError: 'gbk' codec can't decode byte 0xa6 in position 5960: illegal multibyte sequence

原因是命令行工具的标准输出流编码不对,我们可以将 Zephyr 系统中安装 scripts/requirements.txt 文件中的 pyocd 工具的安装屏蔽掉,后面的编译没有使用该软件。

## requirements.txt 文件中屏蔽 pyocd 软件安装
.....
# pyocd
....

之后再自行上面安装 python 依赖包命令,可正常执行。

6. 安装第三方编译工具

这里安装的是 GNU ARM 编译工具(Zephyr官网还有其他第三方编译工具,根据实际需求下载安装)。

工具下载地址:https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads ,根据自己系统配置下载安装 GNU ARM 编译工具, 安装路径建议为 C:\gnu_arm_embedded

安装完成设置环境变量,如下所示:

set ZEPHYR_TOOLCHAIN_VARIANT=gnuarmemb
set GNUARMEMB_TOOLCHAIN_PATH=C:\gnu_arm_embedded

7. 编译运行例程

cd zephyr

## 设置编译环境参数
zephyr-env.cmd

## 进入示例文件,这里使用蓝牙心率计示例
cd samples\bluetooth\peripheral_hr
mkdir build & cd build

## 使用 Cmake 配置基于 Ninja 搭建编译环境,window 下必须基于 Ninja 搭建
cmake -GNinja -DBOARD=nrf52_pca10040 ..

## 可以选着使用 menuconfig 配置工程,可以配置优化等级
ninja menuconfig
ninja

代码烧写方式:

  • 编译之后生成可执行文件(这里使用 hex 文件),可按照上述 Linux 介绍方式烧写程序。

  • 使用 jlink 工具将直接将生成的文件(这里使用的 elf 文件)烧写到 nRF52832 设备中,操作步骤如下:

    • 新建一个 jlink 下载脚本文件名称为 download.jlink,文件内容如下:
    erase
    loadfile zephyr.hex
    r
    q
    
    • download.jlink 文件放入生成可执行文件(elf 文件)的目录,本次例程为需要放入 zephyr/sample/bluetooth/peripheral_hr/build/zephyr/ 目录下;
    • 确认自己电脑中的 jlink 驱动安装路径,安装路径中不能带有空格,如果带有空格建议卸载更换路径安装,本次例程中 jlink 驱动路径为:C:\Soft\SEGGER\JLink_V510\JLink.exe
    • cmd 中执行如下命令烧写程序:
      ## jlink.exe 工具按照实际安装路径修改
    C:\Soft\SEGGER\JLink_V510h\JLink.exe -autoconnect 1 -device NRF52832_XXAA -if swd -speed 10000 -commandfile download.jlink
    
    
    • jlink 烧写成功。
  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你好!要搭建 Zephyr 环境,你可以按照以下步骤进行操作: 1. 首先,确保你的开发环境满足以下要求: - 支持的操作系统:Linux(Ubuntu、Fedora、Debian等)、macOS或Windows。 - 至少8GB的RAM空间。 - 15GB以上的磁盘空间。 2. 安装依赖项: - 在 Linux 上,执行以下命令安装所需的依赖项: ``` sudo apt-get install --no-install-recommends git cmake ninja-build gperf \ ccache dfu-util device-tree-compiler wget \ python3-dev python3-pip python3-setuptools python3-tk python3-wheel xz-utils file \ make gcc gcc-multilib ``` - 在 macOS 上,你可以使用 Homebrew 进行安装: ``` brew tap zephyrproject-rtos/zephyr brew install --HEAD west ``` - 在 Windows 上,安装 WSL(Windows Subsystem for Linux),并在 WSL 中执行上述 Linux 安装命令。 3. 获取 Zephyr 代码: - 执行以下命令克隆 Zephyr 的 Git 仓库: ``` git clone https://github.com/zephyrproject-rtos/zephyr.git ``` 4. 安装 Zephyr 开发工具链: - 执行以下命令安装 west 工具: ``` pip3 install --user -U west ``` - 在 Zephyr 代码目录中执行以下命令初始化 west 工具: ``` west init west update ``` 5. 配置环境变量: - 在 Linux/macOS 上,打开 `~/.bashrc` 或 `~/.zshrc` 文件,添加以下行: ``` export ZEPHYR_TOOLCHAIN_VARIANT=zephyr export ZEPHYR_SDK_INSTALL_DIR=<path_to_zephyr_sdk> export PATH=$PATH:$ZEPHYR_SDK_INSTALL_DIR/zephyr-sdk-<version>/sysroots/x86_64-pokysdk-linux/usr/bin ``` - 在 Windows 上,打开 WSL 的 `~/.bashrc` 文件,添加上述行。 6. 构建和运行示例应用程序: - 进入 Zephyr 代码目录中的 `samples/hello_world` 目录。 - 执行以下命令构建应用程序: ``` west build -b <board_name> ``` - 构建成功后,使用以下命令烧录和运行应用程序: ``` west flash ``` 这样,你就成功搭建了 Zephyr 环境,并运行了一个示例应用程序。你可以根据自己的需求进行进一步的开发和调试。祝你好运!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值