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.