zephyr project 环境配置教程

1.先来看看zephyr的介绍

The Zephyr OS is based on a small-footprint kernel designed for use on resource-constrained and embedded systems: from simple embedded environmental sensors and LED wearables to sophisticated embedded controllers, smart watches, and IoT wireless applications.

The Zephyr kernel supports multiple architectures, including ARM Cortex-M, Intel x86, ARC, NIOS II, Tensilica Xtensa and RISC-V 32. The full list of supported boards can be found here.

LicensingZephyr is permissively licensed using the Apache 2.0 license (as found in the LICENSE file in the project’s GitHub repo). There are some imported or reused components of the Zephyr project that use other licensing, as described in Licensing of Zephyr Project components.

目前已经支持的板子如下

x86 Boards
    Arduino/Genuino 101
    Galileo Gen1/Gen2
    MinnowBoard Max
    X86 Emulation (QEMU)
    Quark D2000 Development Board
    Quark SE C1000 Development Board
    tinyTILE
    UP Squared
    Jailhouse cell X86 Emulation (QEMU)
ARM Boards
    96Boards Argonkey
    96Boards Carbon
    96Boards Carbon nRF51
    96Boards Neonkey
    96Boards Nitrogen
    96Boards STM32 Sensor Mezzanine
    Adafruit Feather M0 Basic Proto
    Adafruit Trinket M0
    Arduino Due
    Arduino/Genuino Zero
    SAM D20 Xplained Pro Evaluation Kit
    SAM D21 Xplained Pro Evaluation Kit
    ST B-L072Z-LRWAN1 Discovery kit
    BBC MicroBit
    CC2650 SensorTag
    CC3220SF LaunchXL
    NXP i.MX 7 Computer on Module - Colibri iMX7
    Curie (BLE)
    PSoC6 WiFi-BT Pioneer Kit (CM0+ Core)
    PSoC6 WiFi-BT Pioneer Kit (CM4 Core)
    ST Disco L475 IOT01 (B-L475E-IOT01A)
    Dragino LSN50 LoRA Sensor Node
    EFM32HG-SLSTK3400A
    EFM32 Pearl Gecko Starter Kit
    EFM32WG-STK3800
    EFR32-SLWSTK6061A
    EFR32MG-SLTB004A
    NXP FRDM-K64F
    NXP FRDM-KL25Z
    NXP FRDM-KW41Z
    Hexiwear
    Hexiwear KW40Z
    NXP LPCXPRESSO54114
    NXP MIMXRT1050-EVK
    NXP MIMXRT1060-EVK
    ARM V2M MPS2
    MSP-EXP432P401R LaunchXL
    Waveshare BLE400
    Redbear Labs Nano
    nRF51-PCA10028
    nRF51-VBLUno51
    nRF52810-PCA10040
    nRF52832-mdk
    nRF52840-mdk
    nRF52840-PCA10056
    nRF52840-PCA10059
    nRF52 Adafruit Feather
    Redbear Labs Nano v2
    nRF52-PCA10040
    nRF52-PCA20020 (Thingy:52)
    nRF52-VBLUno52
    ST Nucleo F030R8
    ST Nucleo F070RB
    ST Nucleo F091RC
    ST Nucleo F103RB
    ST Nucleo F207ZG
    ST Nucleo F302R8
    ST Nucleo F334R8
    ST Nucleo F401RE
    ST Nucleo F411RE
    ST Nucleo F412ZG
    ST Nucleo F413ZH
    ST Nucleo F429ZI
    ST Nucleo F446RE
    ST Nucleo F746ZG
    ST Nucleo F756ZG
    ST Nucleo L053R8
    ST Nucleo L073RZ
    ST Nucleo L432KC
    ST Nucleo L476RG
    ST Nucleo L4R5ZI
    OLIMEX-STM32-E407
    OLIMEX-STM32-H407
    OLIMEX-STM32-P405
    OLIMEXINO-STM32
    ARM Cortex-M3 Emulation (QEMU)
    reel board
    SAM4S Xplained
    SAM E70 Xplained
    STM3210C-EVAL
    STM32373C-EVAL
    STM32 Minimum Development Board
    ST STM32F072-EVAL
    ST STM32F072B-DISCO
    ST STM32F0DISCOVERY
    ST STM32F3DISCOVERY
    STM32F411E-DISCO
    ST STM32F412G Discovery
    ST STM32F429I-DISC1 Discovery board
    ST STM32F469I Discovery
    ST STM32F4DISCOVERY
    ST STM32F723E Discovery
    ST STM32F746G Discovery
    ST STM32F769I Discovery
    ST STM32L476G Discovery
    ST STM32L496G Discovery
    UDOO Neo Full
    NXP USB-KW24D512
    ARM V2M Beetle
    WaRP7 - Next Generation IoT and Wearable Development Platform
ARC Boards
    Arduino/Genuino 101 (Sensor Subsystem)
    DesignWare(R) ARC(R) EM Starter Kit
    DesignWare(R) ARC(R) Emulation (nsim)
NIOS II Boards
    Altera MAX10
    Altera Nios-II Emulation (QEMU)
XTENSA Boards
    ESP32
    Intel S1000 CRB
    Xtensa Emulation (QEMU)
    Xtensa simulator
POSIX/NATIVE Boards
    Native POSIX execution (native_posix)
    NRF52 simulated board (BabbleSim)
RISCV32 Boards
    SiFive HiFive1
    Microsemi M2GL025 Mi-V
    RISCV32 Emulation (QEMU)
    Zedboard Pulpino
Shields
    NXP FRDM-KW41Z
    X-NUCLEO-IKS01A1: MEMS Inertial and Environmental Multi sensor shield
    X-NUCLEO-IKS01A2: MEMS Inertial and Environmental Multi sensor shield

下面是它支持的一些特性

Extensive suite of Kernel services

Zephyr offers a number of familiar services for development:

Multi-threading Services for cooperative, priority-based, non-preemptive, and preemptive threads with optional round robin time-slicing. Includes POSIX pthreads compatible API support.
Interrupt Services for compile-time registration of interrupt handlers.
Memory Allocation Services for dynamic allocation and freeing of fixed-size or variable-size memory blocks.
Inter-thread Synchronization Services for binary semaphores, counting semaphores, and mutex semaphores.
Inter-thread Data Passing Services for basic message queues, enhanced message queues, and byte streams.
Power Management Services such as tickless idle and an advanced idling infrastructure.

Multiple Scheduling Algorithms
Zephyr provides a comprehensive set of thread scheduling choices:

Cooperative and Preemptive Scheduling
Earliest Deadline First (EDF)
Meta IRQ scheduling implementing “interrupt bottom half” or “tasklet” behavior
Timeslicing: Enables time slicing between preemptible threads of equal priority
Multiple queuing strategies:
Simple linked-list ready queue
Red/black tree ready queue
Traditional multi-queue ready queue

Highly configurable / Modular for flexibility
Allows an application to incorporate only the capabilities it needs as it needs them, and to specify their quantity and size.

Cross Architecture
Supports a wide variety of supported boards with different CPU architectures and developer tools. Contributions have added support for an increasing number of SoCs, platforms, and drivers.

Memory Protection
Implements configurable architecture-specific stack-overflow protection, kernel object and device driver permission tracking, and thread isolation with thread-level memory protection on x86, ARC, and ARM architectures, userspace, and memory domains.

For platforms without MMU/MPU and memory constrained devices, supports combining application-specific code with a custom kernel to create a monolithic image that gets loaded and executed on a system’s hardware. Both the application code and kernel code execute in a single shared address space.

Compile-time resource definition
Allows system resources to be defined at compile-time, which reduces code size and increases performance for resource-limited systems.
Optimized Device Driver Model
Provides a consistent device model for configuring the drivers that are part of the platform/system and a consistent model for initializing all the drivers configured into the system and Allows the reuse of drivers across platforms that have common devices/IP blocks

Device Tree Support
Use of Device Tree (DTS) to describe hardware and configuration information for boards. The DTS information will be used only during compile time. Information about the system is extracted from the compiled DTS and used to create the application image.

Native Networking Stack supporting multiple protocols
Networking support is fully featured and optimized, including LwM2M and BSD sockets compatible support. OpenThread support (on Nordic chipsets) is also provided - a mesh network designed to securely and reliably connect hundreds of products around the home.

Bluetooth Low Energy 5.0 support

Bluetooth 5.0 compliant (ESR10) and Bluetooth Low Energy Controller support (LE Link Layer). Includes BLE Mesh and a Bluetooth qualification-ready BLE controller.

Generic Access Profile (GAP) with all possible LE roles.
GATT (Generic Attribute Profile)
Pairing support, including the Secure Connections feature from Bluetooth 4.2
Clean HCI driver abstraction
Raw HCI interface to run Zephyr as a Controller instead of a full Host stack
Verified with multiple popular controllers
Highly configurable

Mesh Support:

Relay, Friend Node, Low-Power Node (LPN) and GATT Proxy features
Both Provisioning bearers supported (PB-ADV & PB-GATT)
Highly configurable, fitting in devices with at least 16k RAM

Native Linux, macOS, and Windows Development
A command-line CMake build environment runs on popular developer OS systems. A native POSIX port, lets you build and run Zephyr as a native application on Linux and other OSes, aiding development and testing.

Virtual File System Interface with NFFS and FATFS Support
Newtron Flash Filesystem (NFFS) and FATFS Support, FCB (Flash Circular Buffer) for memory constrained applications, and file system enhancements for logging and configuration.

Powerful multi-backend logging Framework
Support for log filtering, object dumping, panic mode, multiple backends (memory, networking, filesystem, console, …) and integration with the shell subsystem.

User friendly and full-featured Shell interface
A multi-instance shell subsystem with user-friendly features such as autocompletion, wildcards, coloring, metakeys (arrows, backspace, ctrl+u, etc.) and history. Support for static commands and dynamic sub-commands.

Settings on non-volatile storage
The settings subsystem gives modules a way to store persistent per-device configuration and runtime state. Settings items are stored as key-value pair strings.
Non-volatile storage (NVS)
NVS allows storage of binary blobs, strings, integers, longs, and any combination of these.
Native POSIX port
Supports running Zephyr as a Linux application with support for various subsystems and networking.

这个项目是linux基金会发起的,看起来他们是认真的。说了这么多,我们一起看看怎么配置开发编译环境,以及编译一个简单的helloworld来验证一下。

2. 建立开发环境

zephyr支持多种操作系统:linux, macos, windows。zephyr同样也支持多种linux桌面系统,包括Ubuntu 16.04 LTS or 18.04 LTS 64-bit,Fedora 28 64-bit,Clear Linux,Arch Linux。我这里介绍一下怎么在Ubuntu 16.04 LTS下安装开发环境。

2.1更新操作系统

sudo apt-get update
sudo apt-get upgrade

2.2安装依赖环境及工具

sudo apt-get install --no-install-recommends git cmake ninja-build gperf   ccache dfu-util device-tree-compiler wget   python3-pip python3-setuptools python3-wheel xz-utils file make gcc   gcc-multilib

2.2安装SDK

下载sdk文件

 wget https://github.com/zephyrproject-rtos/meta-zephyr-sdk/releases/download/0.9.5/zephyr-sdk-0.9.5-setup.run

安装sdk,默认安装目录是 /opt/zephyr-sdk/

sh zephyr-sdk-0.9.5-setup.run

把sdk配置到环境变量中去,这里的是指运行sh zephyr-sdk-0.9.5-setup.run指令时,sdk的安装目录,默认是/opt/zephyr-sdk/。这里建议把下面两行指令添加到/etc/profile中去,避免每一开机都需要重新输入这两行指令。假如你把这两行指令添加到/etc/profile,记得source /etc/profile,让其立刻生效。

export ZEPHYR_TOOLCHAIN_VARIANT=zephyr
export ZEPHYR_SDK_INSTALL_DIR=/opt/zephyr-sdk/

3.克隆zephyr源码,并运行helloworld

3.1 从github下载源码

git clone https://github.com/zephyrproject-rtos/zephyr

3.2 安装python环境

pip3 install --user -r zephyr/scripts/requirements.txt

进入源码目录zephyr下,运行

source zephyr-env.sh

3.2 编译运行helloworld

进入helloworld的源码目录下

cd samples/hello_world
mkdir build && cd build

编译在x86平台上运行的helloworld

   cmake -GNinja -DBOARD=qemu_x86 ..

运行

ninja 
ninja run

按 Ctrl-a, 然后 x.退出

欢迎关注本人公众号:低功耗蓝牙技术研究及推广
低功耗蓝牙技术研究及推广

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值