Zephyr 之快速体验

Zephyr 之快速体验

Intro

Zephyr 最初是由 Wind River 公司开发的一个微内核,在 2016 年的时候成为 Linux 基金会维护的一个项目,发展至今,已经成为了一个功能齐全的嵌入式 OS。平台现在支持 ARM、RISC-V、X86、Xtensa 等等处理器平台,拥有原生的 BLE 协议栈、完整的Net 协议栈,包括 TCP/IP 与应用层协议,为嵌入式应用的开发提供了有力的支持。

Zephyr 支持在 Linux,Windows 和 MacOS 上进行开发,在看 Zephyr 的 Getting Started Guide 时了解到,在 Windows 上开发实际上使用到了 WSL 服务,本质上还是属于在 Linux 上开发,为了体验到更全面的开发环境,因此本文选择直接在 Linux 上开发,下载 VirtualBox 虚拟机软件,安装 Ubuntu22.04 操作系统,在虚拟机上进行开发。为什么不选择在 MacOS 上开发,原因是我手上的电脑是 Windows 平台,为方便使用,不选择 MacOS。

Getting Started Guide Ubuntu OS (Ubuntu 22.04 LTS)

原文:https://docs.zephyrproject.org/latest/develop/getting_started/index.html

安装依赖项

更新软件包列表,检查可用的软件包更新:

sudo apt update

安装可用的软件包更新:

sudo apt upgrade

如果 Ubuntu Version < 22.04,则需要执行以下内容:

wget https://apt.kitware.com/kitware-archive.sh
sudo bash kitware-archive.sh

安装 CMake,Python 和 Devicetree compiler:

sudo apt 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 g++-multilib libsdl2-dev libmagic1

检查 CMake,Python 和 Devicetree compiler 的版本:

cmake --version
python3 --version
dtc --version

其版本要求如下:

ToolMin.VersionNow.Version
CMake3.20.53.27.2
Python3.83.10.12
Devicetree compiler1.4.61.6.1

获取 Zephyr 和安装 Python 依赖项

安装 Python 虚拟环境管理工具 venv:

sudo apt install python3-venv

创建 Zephyr 的虚拟环境,执行完以下操作后,可以在主目录下看到一个名为 “zephyrproject” 的文件夹:

python3 -m venv ~/zephyrproject/.venv

激活 Zephyr 的虚拟环境:

source ~/zephyrproject/.venv/bin/activate

需要注意,从这里开始,后面的操作都将处于在 Zephyr 的虚拟环境中进行操作

安装 Zephyr 的瑞士军刀 west:

pip install west

当然,也可以选择不使用虚拟环境,省略安装 venv,直接装 west:

pip3 install --user -U west
echo 'export PATH=~/.local/bin:"$PATH"' >> ~/.bashrc
source ~/.bashrc

使用 west 工具获取 zephyr 的工程,执行完以下操作后,终端位置将处于 “~/zephyrproject” 下:

west init ~/zephyrproject
cd ~/zephyrproject
west update

west init 指令会使用 Git 的方式从 https://github.com/zephyrproject-rtos/zephyr 上 clone 代码,如果想 clone 其他仓库的 Zephyr 代码,则可以在指令后面加上 -m <URL> 来指定 Git 仓库,再加上 --mr 指令可以来指定所需要的版本。

west update 指令是读取 zephyr/west.yml 文件,通过 Git 来 clone 所需要的非 zephyr 代码。

导出 Zephyr CMake 软件包,这回让 CMake 允许自动加载构建 Zephyr 应用程序所需的样板代码:

west zephyr-export

Zephyr 的 scripts/requirements.txt 中声明了额外的 Python 依赖项,使用 pip 来安装它们,这一步将会下载较多的文件,建议用户想办法在一个 “稳定” 环境下执行下面的操作:

pip install -r ~/zephyrproject/zephyr/scripts/requirements.txt

安装 Zephyr SDK

Zephyr SDK 包含了 Zephyr 支持的每个架构的工具链,包括编译器,汇编程序,连接器和构建 Zephyr APP 所需的其它程序。

它还包含其它主机工具,如用于枚举了,擦写 Flash 和调试 Zephyr 应用程序的 custom QEMU (纯软件实现的虚拟化模拟器) 和 OpenOCD (开源片上调试器) 工具。

下载和验证 Zephyr SDK bundle,这将会下载一个超过 1GB 大小的压缩包,建议在一个 “稳定” 的网络环境中执行下面的指令,在普通网络环境下,实测下载所需时间为一个多小时:

cd ~
wget https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/zephyr-sdk-0.16.1_linux-x86_64.tar.xz
wget -O - https://github.com/zephyrproject-rtos/sdk-ng/releases/download/v0.16.1/sha256.sum | shasum --check --ignore-missing

下载完成后,能够在主目录下看到一个名为 “zephyr-sdk-0.16.1_linux-x86_64.tar.xz” 的文件,,在主目录下解压这个文件:

tar xvf zephyr-sdk-0.16.1_linux-x86_64.tar.xz

在 Zephyr 的 Getting Started Guide 中这样写道:

It is recommended to extract the Zephyr SDK bundle at one of the following locations:

  • $HOME
  • $HOME/.local
  • $HOME/.local/opt
  • $HOME/bin
  • /opt
  • /usr/local

The Zephyr SDK bundle archive contains the zephyr-sdk-0.16.1 directory and, when extracted under $HOME, the resulting installation path will be $HOME/zephyr-sdk-0.16.1.

所以一定要在主目录中解压这个文件。

运行 Zephyr SDK bundle Setup 脚本,执行完以下操作后,终端位置将处于 “~/zephyr-sdk-0.16.1” 下:

cd zephyr-sdk-0.16.1
./setup.sh

安装 udev rules,这样能够以常规用户的方式擦写芯片的 Flash:

sudo cp ~/zephyr-sdk-0.16.1/sysroots/x86_64-pokysdk-linux/usr/share/openocd/contrib/60-openocd.rules /etc/udev/rules.d
sudo udevadm control --reload

到这里,Zephyr 的初始化操作就完成了。

编译 Zephyr 的 Samples

在移植新的微控制器和开发板之前,我想先看看 Zephyr 的效果,手上没有适配好的开发板,别急,使用 QEMU 环境可以在电脑上直接运行,跑一个 hello_world 试试:

cd ~/zephyrproject/zephyr
west build -p always -b qemu_x86 samples/hello_world

执行下列语句也能看到内容:

west build -t run

可以看到内容:

[0/1] To exit from QEMU enter: 'CTRL+a, x'[QEMU] CPU: qemu32,+nx,+pae
SeaBIOS (version zephyr-v1.0.0-0-g31d4e0e-dirty-20200714_234759-fv-az50-zephyr)
Booting from ROM..
*** Booting Zephyr OS build zephyr-v3.4.0-2497-g431a778b8c76 ***
Hello World! qemu_x86

如果有开发板的话,可以执行下列语句编译程序:

cd ~/zephyrproject/zephyr
west build -p always -b <BOARD_NAME> samples/hello_world

下载程序:

west flash

然后打开minicom,连接开发板看下效果,串口的波特率115200,数据位8bit,无校验位,停止位1bit,无流量控制:

*** Booting Zephyr OS build zephyr-v3.4.0-2454-g6a20f4b013b2 ***
Hello World! <BOARD_NAME>

Summary

Zephyr 除了提供 OS 该有的东西外,还提供了编译和调试环境,本文按照 Zephyr 提供的 Getting Started Guide,在 Ubuntu 22.04 LTS 上走了一遍初始化流,并且成功的编译了一个 hello_world 并且顺利跑在 QEMU 和实际的一块开发板上。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值