The latest development version of this page may be more current than this released 4.0.0 version.

Zephyr 2.0.0

We are pleased to announce the release of Zephyr RTOS version 2.0.0.

Major enhancements with this release include:

  • The kernel now supports both 32- and 64-bit architectures.

  • We added support for SOCKS5 proxy. SOCKS5 is an Internet protocol that exchanges network packets between a client and server through a proxy server.

  • Introduced support for 6LoCAN, a 6Lo adaption layer for Controller Area Networks.

  • We added support for Point-to-Point Protocol (PPP). PPP is a data link layer (layer 2) communications protocol used to establish a direct connection between two nodes.

  • We added support for UpdateHub, an end-to-end solution for large scale over-the-air device updates.

  • We added support for ARM Cortex-R Architecture (Experimental).

The following sections provide detailed lists of changes by component.

Kernel

  • New kernel API for per-thread disabling of Floating Point Services for ARC, ARM Cortex-M, and x86 architectures.

  • New system call to set the clock frequency at runtime.

  • Additional support for compatibility with 64-bit architectures.

  • Userspace mutexes are now supported through the new k_futex primitive.

  • Improvements to the slab allocator.

  • Fixed the implementation of k_thread_name_set() with userspace enabled.

  • Boosted the default tick rate for tickless kernels to improve the precision of timeouts.

Architectures

  • ARM:

    • Added initial support for ARM Cortex-R architecture (Experimental)

    • We enhanced the support for Floating Point Services in Cortex-M architecture, implementing and enabling lazy-stacking for FPU capable threads and fixing stack overflow detection for FPU capable supervisor threads

    • Added QEMU support for ARMv8-M Mainline architecture

    • Optimized the IRQ locking time in thread context switch

    • Fixed several critical bugs in User Mode implementation

    • Added test coverage for ARM-specific kernel features

    • Improved support for linking TrustZone Secure Entry functions into Non-Secure firmware

  • ARC:

    • Added support for ARC HS architecture

    • Added SMP support for ARC HS architecture

    • Added support for ARC SecureShield based TEE (Experimental)

    • Fixed several critical bugs in interrupt and exception handling

    • Enhance the support for Floating Point Services

  • POSIX:

    • Fixed race condition with terminated threads which had never been scheduled by kernel. On very loaded systems it could cause swap errors.

  • x86:

    • Dropped support for the Intel Quark microcontroller family.

    • A new lightweight PCI implementation has been introduced which supports MSI and other features required for PCIe devices. The previous PCI implementation has been deprecated and will be removed in 2.1.

  • RISC-V:

    • Added support for the SiFive HiFive1 Rev B development board.

    • Added support for LiteX VexRiscv soft core.

    • Added support for 64-bit RISC-V, renaming the architecture from “riscv32” to “riscv”.

    • Added 64-bit QEMU support.

    • Added DeviceTree bindings for RISC-V memory devices, CPU interrupt controllers, and platform-local interrupt controllers.

Boards & SoC Support

  • Added native_posix_64: A 64 bit variant of native_posix

  • Added support for these ARC boards:

    • emsdp

    • hsdk

    • nsim for hs

  • Added support for these ARM boards:

    • atsamr21_xpro

    • cc1352r1_launchxl

    • cc26x2r1_launchxl

    • holyiot_yj16019

    • lpcxpresso55s69

    • mec15xxevb_assy6853

    • mikroe_mini_m4_for_stm32

    • mimxrt1015_evk

    • mps2_an521

    • nrf51_pca10031

    • nrf52811_pca10056

    • nucleo_g071rb

    • nucleo_wb55rg

    • qemu_cortex_r5

    • stm32h747i_disco

    • stm32mp157c_dk2

    • twr_ke18f

    • v2m_musca_b1

    • 96b_avenger96

    • 96b_meerkat96

    • 96b_wistrio

  • Added support for these RISC-V boards:

    • hifive1_revb

    • litex_vexriscv

    • qemu_riscv64

  • Added support for the gpmrb x86 board

  • Added support for these following shields:

    • frdm_cr20a

    • link_board_can

    • sparkfun_sara_r4

    • wnc_m14a2a

    • x_nucleo_iks01a3

  • Removed support for these boards:

    • arduino_101

    • arduino_101_sss

    • curie_ble

    • galileo

    • quark_d2000_crb

    • quark_se_c1000_devboard

    • quark_se_c1000_ss_devboard

    • quark_se_c1000_ble

    • tinytile

    • x86_jailhouse

Drivers and Sensors

  • ADC

    • Added API to support calibration

    • Enabled ADC on STM32WB

    • Removed Quark D2000 ADC driver

    • Added NXP ADC12 and SAM0 ADC drivers

    • Added ADC shell

  • Audio

    • Added support for two microphones (stereo) in the mpxxdtyy driver

  • CAN

    • Added support for canbus Ethernet translator

    • Added 6LoCAN implementation

    • Added MCP2515, NXP FlexCAN, and loopback drivers

    • Added CAN shell

  • Clock Control

    • Added NXP Kinetis MCG, SCG, and PCC drivers

    • Added STM32H7, STM32L1X, and STM32WB support

    • Removed Quark SE driver

  • Counter

    • Added optional flags to alarm configuration structure and extended set channel alarm flags

    • Added top_value setting configuration structure to API

    • Enabled counter for STM32WB

    • Added NXP GPT, “CMOS” RTC, SiLabs RTCC, and SAM0 drivers

    • Removed Quark D2000 support from QMSI driver

  • Display

    • Added ST7789V based LCD driver

    • Renamed ssd1673 driver to ssd16xx

    • Added framebuffer driver with multiboot support

    • Added support for Seeed 2.8” TFT touch shield v2.0

  • DMA

    • Added API to retrieve runtime status

    • Added SAM0 DMAC driver

    • Removed Quark SE C1000 support from QMSI driver

  • Entropy

    • Added TI CC13xx / CC26xx driver

  • ESPI

    • Added Microchip XEC driver

  • Ethernet

    • Added LiteEth driver

  • Flash

    • Removed Quark SE C1000 driver

    • Removed support for Quark D2000 from QMSI driver

    • Added STM32G0XX and STM32WB support to STM32 driver

    • Added RV32M1 and native POSIX drivers

  • GPIO

    • Added stm32f1x SWJ configuration

    • Removed Quark SE C1000 and D2000 support from DesignWare driver

    • Added support for STM32H7, STM32L1X, and STM32WB to STM32 driver

    • Added Microchip XEC and TI CC13x2 / CC26x2 drivers

    • Added HT16K33 LED driver

    • Added interrupt support to SAM0 driver

  • Hardware Info

    • Added ESP32 and SAM0 drivers

  • I2C

    • Added support for STM32MP1, STM32WB, and STM32L1X to STM32 driver

    • Added STM32F10X slave support

    • Added power management to nrf TWI and TWIM drivers

    • Added TI CC13xx / CC26xx, Microchip MEC, SAM0, and RV32M1 drivers

    • Rewrote DesignWare driver for PCI(e) support

  • IEEE 802.15.4

    • Fixed KW41z fault and dBm mapping

  • Interrupt Controller

    • Added initial support for ARC TCC

    • Added GIC400, LiteX, and SAM0 EIC drivers

    • Added support for STM32G0X, STM32H7, STM32WB, and STM32MP1 to STM32 driver

    • Removed MVIC driver

  • IPM

    • Removed Quark SE driver

    • Added MHU and STM32 drivers

  • LED

    • Added Holtek HT16K33 LED driver

  • Modem

    • Introduced socket helper layer

    • Introduced command handler and UART interface driver layers

    • Introduced modem context helper driver

    • Added u-blox SARA-R4 modem driver

  • Pinmux

    • Added SPI support to STM32MP1

    • Enabled ADC, PWM, I2C, and SPI pins on STM32WB

    • Added Microchip XEC and TI CC13x2 / CC26x2 drivers

  • PWM

    • Added NXP PWM driver

    • Added support for STM32G0XX to STM32 driver

  • Sensor

    • Added STTS751 temperature sensor driver

    • Added LSM6DSO and LPS22HH drivers

    • Renamed HDC1008 driver to ti_hdc and added support for 1050 version

    • Added LED current, proximity pulse length, ALS, and proximity gain configurations to APDS9960 driver

    • Reworked temperature and acceleration conversions, and added interrupt handling in ADXL362 driver

    • Added BME680 driver and AMS ENS210 drivers

  • Serial

    • Added Xilinx ZynqMP PS, LiteUART, and TI CC12x2 / CC26x2 drivers

    • Added support for virtual UARTS over RTT channels

    • Added support for STM32H7 to STM32 driver

    • Removed support for Quark D2000 from QMSI driver

    • Enabled interrupts in LPC driver

    • Implemented ASYNC API in SAM0 driver

    • Added PCI(e) support to NS16550 driver

  • SPI

    • Added support for STM32MP1X and STM32WB to STM32 driver

    • Removed support for Quark SE C1000 from DesignWare driver

    • Added TI CC13xx / CC26xx driver

    • Implemented ASYNC API in SAM0 driver

  • Timer

    • Added Xilinx ZynqMP PS ttc driver

    • Added support for SMP to ARC V2 driver

    • Added MEC1501 32 KHZ, local APIC timer, and LiteX drivers

    • Replaced native POSIX system timer driver with tickless support

    • Removed default selection of SYSTICK timer for ARM platforms

  • USB

    • Added NXP EHCI driver

    • Implemented missing API functions in SAM0 driver

  • WiFi

    • Implemented TCP listen/accept and UDP support in eswifi driver

Networking

  • Added support for SOCKS5 proxy. See also RFC1928 for details.

  • Added support for 6LoCAN, a 6Lo adaption layer for Controller Area Networks.

  • Added support for Point-to-Point Protocol (PPP).

  • Added support for UpdateHub, an end-to-end solution for large scale over-the-air update of devices. See UpdateHub.io for details.

  • Added support to automatically register network socket family.

  • Added support for getsockname() function.

  • Added SO_PRIORITY support to setsockopt()

  • Added support for VLAN tag stripping.

  • Added IEEE 802.15.4 API for ACK configuration.

  • Added dispatching support to SocketCAN sockets.

  • Added user mode support to PTP clock API.

  • Added user mode support to network interface address functions.

  • Added AF_NET_MGMT socket address family support. This is for receiving network event information in user mode application.

  • Added user mode support to net_addr_ntop() and net_addr_pton()

  • Added support for sending network management events when DNS server is added or deleted.

  • Added LiteEth Ethernet driver.

  • Added support for sendmsg() API.

  • Added civetweb HTTP API support.

  • Added LWM2M IPSO Accelerometer, Push Button, On/Off Switch and Buzzer object support.

  • Added LWM2M Location and Connection Monitoring object support.

  • Added network management L4 layer. The L4 management events are used when monitoring network connectivity.

  • Allow net-mgmt API to pass information length to application.

  • Removed network management L1 layer as it was never used.

  • By default a network interface is set to UP when the device starts. If this is not desired, then it is possible to disable automatic start.

  • Allow collecting network packet TX throughput times in the network stack. This information can be seen in net-shell.

  • net-shell Ping command overhaul.

  • Accept UDP packet with missing checksum.

  • 6lo compression rework.

  • Incoming connection handling refactoring.

  • Network interface refactoring.

  • IPv6 fragmentation fixes.

  • TCP data length fixes if TCP options are present.

  • SNTP client updates.

  • Trickle timer re-init fixes.

  • getaddrinfo() fixes.

  • Fixes in DHCPv4, LWM2M, gPTP, and MQTT

  • DNS fixes for non-compressed answers.

  • mDNS and LLMNR resolver fixes.

  • Ethernet ARP fixes.

  • OpenThread updates and fixes.

  • Network device driver fixes for:

    • Ethernet e1000

    • Ethernet enc28j60

    • Ethernet mcux

    • Ethernet stellaris

    • Ethernet gmac

    • Ethernet stm32

    • WiFi eswifi

    • IEEE 802.15.4 kw41z

    • IEEE 802.15.4 nrf5

Bluetooth

  • Host:

    • GATT: Added support for database hashes, Read Using Characteristic UUID, static services, disabling the dynamic database, and notifying and indicating by UUID

    • GATT: Simplified the bt_gatt_notify_cb() API

    • GATT: Added additional attributes to the Device Information Service

    • GATT: Several protocol and database fixes

    • Settings: Transitioned to new optimized settings model and support for custom backends

    • Completed support for directed advertising and Out-Of-Band (OOB) pairing

    • Added support for fine-grained control of security establishment, including forcing a pairing procedure in case of key loss

    • Switched to separate, dedicated pools for discardable events and number of completed packets events

    • Extended and improved the Bluetooth shell with several commands

    • BLE qualification up to the 5.1 specification

    • BLE Mesh: Several fixes and improvements

  • BLE split software Controller:

    • The split software Controller is now the default

    • Added support for the Data Length Update procedure

    • Improved and documented the ticker packet scheduler for improved conflict resolution

    • Added support for out-of-tree user-defined commands and events, Zephyr Vendor Specific Commands, and user-defined protocols

    • Converted several control procedures to be queueable

    • Nordic: Decorrelated address generation from resolution

    • Nordic: Added support for Controller-based privacy, fast encryption setup, RSSI, low-latency ULL processing of messages, nRF52811 IC BLE radio, PA/LNA on Port 1 GPIO pins, and radio event abort

    • BLE qualification up to the 5.1 specification

  • BLE legacy software Controller:

    • BLE qualification up to the 5.1 specification

    • Multiple control procedures fixes and improvements

Build and Infrastructure

  • The devicetree Python scripts have been rewritten to be more robust and easier to understand and change. The new scripts are these three files:

    The new scripts verify category: optional/required and type: settings given in bindings for nodes, and add some new types, like phandle-array. Error messages and other output is now more helpful.

    See the updated documentation in dts/binding-template.yaml.

    The old scripts are kept around to generate a few deprecated #defines. They will be removed in the Zephyr 2.2 release.

  • Changed ARM Embedded toolchain to default to nano variant of newlib

Libraries / Subsystems

  • File Systems: Added support for littlefs

HALs

  • HALs are now moved out of the main tree as external modules and reside in their own standalone repositories.

Documentation

  • We’ve made many updates to component, subsystem, and process documentation bringing our documentation up-to-date with code changes, additions, and improvements, as well as new supported boards and samples.

Tests and Samples

  • We have implemented additional tests and significantly expanded the amount of test cases in existing tests to increase code coverage.