Zephyr RTOS 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

  • 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.