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

Zephyr 2.6.0

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

Major enhancements with this release include:

  • Logging subsystem overhauled

  • Added support for 64-bit ARCv3

  • Split ARM32 and ARM64, ARM64 is now a top-level architecture

  • Added initial support for Arm v8.1-m and Cortex-M55

  • Removed legacy TCP stack support which was deprecated in 2.4

  • Tracing subsystem overhaul including expansion for tracing points and added support for Percepio Tracealyzer

  • Device runtime power management (PM), former IDLE runtime, was completely overhauled.

  • Added an example standalone Zephyr application in its own Git repository: https://github.com/zephyrproject-rtos/example-application

The following sections provide detailed lists of changes by component.

Known issues

You can check all currently known issues by listing them using the GitHub interface and listing all issues with the bug label.

API Changes

  • Driver APIs now return -ENOSYS if optional functions are not implemented. If the feature is not supported by the hardware -ENOTSUP will be returned. Formerly -ENOTSUP was returned for both failure modes, meaning this change may require existing code that tests only for that value to be changed.

  • The wait_for_usb_dfu() function now accepts a k_timeout_t argument instead of using the CONFIG_USB_DFU_WAIT_DELAY_MS macro.

  • Added disconnect reason to the disconnected() callback of bt_iso_chan_ops.

  • Align error handling of :c:func:bt_l2cap_chan_send and bt_iso_chan_send() so when an error occur the buffer is not unref.

  • Added lwm2m_engine_delete_obj_inst() function to the LwM2M library API.

Deprecated in this release

  • DT_CLOCKS_LABEL_BY_IDX, DT_CLOCKS_LABEL_BY_NAME, DT_CLOCKS_LABEL, DT_INST_CLOCKS_LABEL_BY_IDX, DT_INST_CLOCKS_LABEL_BY_NAME, and DT_INST_CLOCKS_LABEL was deprecated in favor of utilizing DT_CLOCKS_CTLR and variants.

  • DT_PWMS_LABEL_BY_IDX, DT_PWMS_LABEL_BY_NAME, DT_PWMS_LABEL, DT_INST_PWMS_LABEL_BY_IDX, DT_INST_PWMS_LABEL_BY_NAME, and DT_INST_PWMS_LABEL was deprecated in favor of utilizing DT_PWMS_CTLR and variants.

  • DT_IO_CHANNELS_LABEL_BY_IDX, DT_IO_CHANNELS_LABEL_BY_NAME, DT_IO_CHANNELS_LABEL, DT_INST_IO_CHANNELS_LABEL_BY_IDX, DT_INST_IO_CHANNELS_LABEL_BY_NAME, and DT_INST_IO_CHANNELS_LABEL were deprecated in favor of utilizing DT_IO_CHANNELS_CTLR and variants.

  • DT_DMAS_LABEL_BY_IDX, DT_DMAS_LABEL_BY_NAME, DT_INST_DMAS_LABEL_BY_IDX, and DT_INST_DMAS_LABEL_BY_NAME were deprecated in favor of utilizing DT_DMAS_CTLR and variants.

  • USB HID specific macros in <include/usb/class/usb_hid.h> are deprecated in favor of new common HID macros defined in <include/usb/class/hid.h>.

  • USB HID Kconfig option USB_HID_PROTOCOL_CODE is deprecated. USB_HID_PROTOCOL_CODE does not allow to set boot protocol code for specific HID device. USB HID API function usb_hid_set_proto_code() can be used instead.

  • USB HID class API is changed by removing get_protocol/set_protocol and get_idle/set_idle callbacks. These callbacks are redundant or do not provide any additional value and have led to incorrect usage of HID class API.

  • The CONFIG_OPENOCD_SUPPORT Kconfig option has been deprecated in favor of CONFIG_DEBUG_THREAD_INFO.

  • Disk API header <include/disk/disk_access.h> is deprecated in favor of <include/storage/disk_access.h>.

  • flash_write_protection_set().

  • The CONFIG_NET_CONTEXT_TIMESTAMP is removed as it was only able to work with transmitted data. The same functionality can be achieved by setting CONFIG_NET_PKT_RXTIME_STATS and CONFIG_NET_PKT_TXTIME_STATS options. These options are also able to calculate the RX & TX times more accurately. This means that support for the SO_TIMESTAMPING socket option is also removed as it was used by the removed config option.

  • The device power management (PM) APIs and data structures have been renamed from device_pm_* to pm_device_* since they are not device APIs but PM subsystem APIs. The same applies to enumerations and definitions, they now follow the PM_DEVICE_* convention. Some other API calls such as device_set_power_state and device_get_power_state have been renamed to pm_device_state_set and pm_device_state_get in order to align with the naming of other device PM APIs.

  • The runtime device power management (PM) APIs is now synchronous by default and the asynchronous API has the _async sufix. This change aligns the API with the convention used in Zephyr. The affected APIs are pm_device_put and pm_device_get.

  • The following functions, macros, and structures related to the kernel work queue API:


Removed APIs in this release

  • Removed support for the old zephyr integer typedefs (u8_t, u16_t, etc…).

  • Removed support for k_mem_domain_destroy and k_mem_domain_remove_thread

  • Removed support for counter_read and counter_get_max_relative_alarm

  • Removed support for device_list_get


Stable API changes in this release

Kernel

  • Added k_mem_unmap() so anonymous memory mapped via k_mem_map() can be unmapped and virtual address reclaimed.

  • Added the ability to gather more statistics for demand paging, including execution time histograms for eviction algorithms and backing stores.

Architectures

  • ARC

    • Added new ARCv3 64bit ISA support and corresponding HS6x processor support

    • Hardened SMP support

    • Various minor fixes/improvements for ARC MWDT toolchain infrastructure

    • Refactor of ARC Kconfig

  • ARM

    • AARCH32

      • Added support for null pointer dereferencing detection in Cortex-M.

      • Added initial support for Arm v8.1-m and Cortex-M55.

      • Added support for preempting threads while they are performing secure calls in Cortex-M.

      • Added support for memory region generation by the linker based on device tree node information in Cortex-M.

      • Cleaned up definitions of SoC-specific memory regions in the common Cortex-M linker script.

      • Added support for clearing NXP MPU region configuration during Zephyr early boot stage.

      • Disallowed fpu hard ABI when building Non-Secure applications with TF-M on Cortex-M33.

      • Enhanced register information dump in fault exceptions in Cortex-R.

      • Fixed spurious interrupt handling in Cortex-R.

    • AARCH64

      • SMP support

      • MMU dynamic mappings with page table sharing.

      • Userspace (unprivileged) thread support.

      • Standalone SMCCC support.

      • XIP support.

      • ARM64 is now a top-level standalone architecture.

      • Support for Cortex-R82 and Armv8-R AArch64 MPU.

      • Cache management support.

      • Revamped boot code.

      • Full FPU context switching.

  • x86

    • Added SoC configuration for Lakemont SoC.

    • Removed kconfig CONFIG_CPU_MINUTEIA as there is no user of this option.

    • Renamed kconfig CONFIG_SSE* to CONFIG_X86_SSE*.

    • Extended the pagetable generation script to allow specifying additional memory mapping during build.

    • x86-32

      • Added support for kernel image to reside in virtual address space, allowing code execution and data manipulation via virtual addresses.

Bluetooth

  • Audio

    • Split up ISO handling from audio handling, and moved the latter to its own directory.

    • Added the Volume Offset Control Service and client.

    • Added the Audio Input Control Service and client.

    • Added the Volume Control Service and client.

  • Host

    • Added basic support for Direction Finding.

    • Added support for CTE connectionless transimission and reception over periodic advertising.

    • Refactored the HCI and ECC handling implementations.

    • Stopped auto updating the device name in the adv data.

    • Added support for logging security keys to be used by an air sniffer.

    • Fixed a bonding issue where the local bond data was not being updated after the remote device had removed it when the peer was not using the IRK stored in the bonding information.

    • Implemented the directory listing object to OTS.

    • Added a function to access the bt_conn_iso object.

    • Added a new configuration option for writeable device name.

    • Added a new configuration option for minimum encryption key size.

    • Added support for keypress notifications as an SMP responder.

    • Added a new option, BT_LE_ADV_OPT_FORCE_NAME_IN_AD, which forces the device name to appear in the adv packet instead of the scan response.

    • Added a security level check when sending a notification or indication.

    • Added the ability to send HCI monitor traces over RTT.

    • Refactored the Bluetooth buffer configuration for simplicity. See the commit message of 6483e12a8ac4f495b28279a6b84014f633b0d374 for more info. Note however that the aforementioned commit message has two typos;

      • BT_CTLR_TX_BUFFER should be BT_CTLR_TX_BUFFERS

      • BT_CTLR_TX_BUFFERS_SIZE should be BT_CTLR_TX_BUFFER_SIZE

    • Added support for concurrent advertising with multiple identities.

    • Changed the logic to disable scanning before setting the random address.

    • Fixed a crash where an ATT timeout occurred on a disconnected ATT channel.

    • Changed the pairing procedure to fail pairing when both sides have the same public key.

    • Fixed an issue where GATT requests could deadlock the RX thread.

    • Fixed an issue where a fixed passkey that was previously set could not be cleared.

    • Fixed an issue where callbacks for “security changed” and “pairing failed” were not always called.

    • Changed the pairing procedure to fail early if the remote device could not reach the required security level.

    • Fixed an issue where GATT notifications and Writes Without Response could be sent out of order.

    • Changed buffer ownership of bt_l2cap_chan_send. The application must now release the buffer for all returned errors.

  • Mesh

    • Added CDB handle key refresh phase.

    • Added the ability to perform replay checks on SeqAuth.

    • Added the sending of a Link Close message when closing a link.

    • Added a Proxy callback structure for Node ID enabling and disabling.

    • Added a check for the response address in the Configuration Client.

    • Introduced a new acknowledged messages API.

    • Reworked the periodic publication timer and poll timeout scheduling logic.

    • Added reporting configured LPNTimeout in cfg_srv.

    • Ensured that provisioning output count number is at least 1.

    • Ensured to encrypt initial friend poll with friend credentials.

    • Stopped resetting the PB ADV reliable timer on retransmission.

  • Bluetooth LE split software Controller

    • Removed support for the nRF5340 PDK. Use the nRF5340 DK instead.

    • Added basic support for Direction Finding.

    • Added support for CTE connectionless transimission and reception over periodic advertising.

    • Added support for antenna switching in the context of Direction Finding.

    • Added an invalid ACL data length check.

    • Added basic support for the ISO Adaptation Layer.

    • Added experimental support for Broadcast Isochronous Groups and Streams.

    • Added partial experimental support for Connected Isochronous Groups and Streams.

    • Implemented extended connection creation and cancellation.

    • Changed the policy to ignore connection requests from an already-connected peer.

    • Added a control procedure locking system.

    • Added GPIO PA/LNA support for the Nordic nRF53x SoC series.

    • Added FEM support for the nRF21540 IC.

    • Added a new radio API to configure the CTE RX path.

  • HCI Driver

    • Added support for the Espressif ESP32 platform.

Boards & SoC Support

  • Added support for these SoC series:

    • STM32F205xx

    • STM32G03yxx, STM32G05yxx, STM32G070xx and STM32G0byxx

    • STM32G4x1, STM32G4x3 and STM32G484xE

    • STM32WL55xx

    • Nuvoton npcx7m6fc, and npcx7m6fc

    • Renesas R-Car Gen3

    • Silicon Labs EFR32FG13P

    • ARM MPS3-AN547

    • ARM FVP-AEMv8A

    • ARM FVP-AEMv8R

    • NXP LS1046A

    • X86 Lakemont

  • Removed support for these SoC series:

    • ARM Musca-A

  • Made these changes in other SoC series:

    • Added Cypress PSoC-6 pinctrl support.

    • STM32 L4/L5/WB series were updated for better power management support (CONFIG_PM=y).

    • Backup SRAM added on a selection of STM32 series (F2/F4/F7/H7)

    • Set TRACE_MODE to asynchronous and enable trace output pin on STM32 SoCs

  • Changes for ARC boards:

    • Added nSIM and QEMU simulation boards (nsim_hs6x and qemu_arc_hs6x) with ARCv3 64bit HS6x processors

    • Enabled MPU on qemu_arc_hs and qemu_arc_em boards

    • Added cy8c95xx GPIO expander support to HSDK board

  • Added support for these ARM boards:

    • Actinius Icarus

    • Actinius Icarus SoM

    • Laird Connectivity BL654 Sensor Board

    • Laird Connectivity Sentrius BT6x0 Sensor

    • EFR32 Radio BRD4255A Board

    • MPS3-AN547

    • RAK4631

    • Renesas R-Car H3ULCB

    • Ronoth LoDev (based on AcSIP S76S / STM32L073)

    • nRF9160 Thing Plus

    • ST Nucleo F030R8

    • ST Nucleo G0B1RE

    • ST Nucleo H753ZI

    • ST Nucleo L412RP-P

    • ST Nucleo WL55JC

    • ST STM32G071B Discovery

    • Thingy:53

    • u-blox EVK-BMD-30/35: BMD-300-EVAL, BMD-301-EVAL, and BMD-350-EVAL

    • u-blox EVK-BMD-330: BMD-330-EVAL

    • u-blox EVK-BMD-34/38: BMD-340-EVAL and BMD-341-EVAL

    • u-blox EVK-BMD-34/38: BMD-345-EVAL

    • u-blox EVK-BMD-360: BMD-360-EVAL

    • u-blox EVK-BMD-34/48: BMD-380-EVAL

    • u-blox EVK-ANNA-B11x

    • u-blox EVK NINA-B11x

    • u-blox EVK-NINA-B3

    • u-blox EVK NINA-B40x

  • Added support for these ARM64 boards:

    • fvp_base_revc_2xaemv8a

    • fvp_baser_aemv8r

    • nxp_ls1046ardb

  • Removed support for these ARM boards:

    • ARM V2M Musca-A

    • Nordic nRF5340 PDK

  • Removed support for these X86 boards:

    • up_squared_32

    • qemu_x86_coverage

    • minnowboard

  • Made these changes in other boards:

    • cy8ckit_062_ble: Refactored to configure by pinctrl.

    • cy8ckit_062_ble: Added support to SCB[uart] with interrupt.

    • cy8ckit_062_ble: Added support to SCB[spi].

    • cy8ckit_062_ble: Added board revision schema.

    • cy8ckit_062_wifi_bt: Refactored to configure by pinctrl.

    • cy8ckit_062_wifi_bt: Added support to SCB[uart] with interrupt.

    • lpcxpresso55s16: Board renamed from lpcxpresso55s16_ns to lpcxpresso55s16 since the board does not have Trusted Firmware M (TF-M) support.

    • lpcxpresso55s28: Removed lpcxpresso55s28_ns config since the board does not have Trusted Firmware M (TF-M) support.

    • mimxrt685_evk: Added support for octal SPI flash storage, LittleFS, I2S, OS timer, and power management.

    • mimxrt1060_evk: Added support for QSPI flash storage, LittleFS, and mcuboot.

    • mimxrt1064_evk: Added support for mcuboot.

  • Added support for these following shields:

    • FTDI VM800C Embedded Video Engine Board

    • Generic ST7735R Display Shield

    • NXP FRDM-STBC-AGM01

    • Semtech SX1272MB2DAS LoRa Shield

Drivers and Sensors

  • ADC

    • Added support on TI CC32xx.

    • Added support on ITE IT8xxx2.

    • Added support for DMA and HW triggers in the MCUX ADC16 driver.

    • Added ADC emulator.

    • Moved definitions of ADC acquisition time macros so that those macros can be used in dts files.

  • Bluetooth

  • CAN

    • A driver for CAN-FD based on the Bosch M_CAN IP was added. The driver currently supports STM32G4 series MCUs. Additional support for Microchip SAM and NXP chips is in progress.

    • The CAN ISO-TP subsystem was enhanced to allow padding and fixed addressing.

  • Clock Control

    • On STM32 series, system clock configuration has been moved from Kconfig to DTS. Usage of existing Kconfig dedicated symbols (CONFIG_CLOCK_STM32_FOO) is now deprecated.

    • Added clock control driver for Renesas R-Car platform

  • Console

    • Added UART_CONSOLE_INPUT_EXPIRED and UART_CONSOLE_INPUT_EXPIRED_TIMEOUT Kconfig options to notify the power management module that UART console is in use now and forbid it to enter low-power states.

  • Counter

    • Added support for ESP32 Counter

  • DAC

    • Added support for Microchip MCP4725

  • Disk

    • Added SDMMC support on STM32L4+

  • Display

    • Added support for ST7735R

  • Disk

    • Moved disk drivers (disk_access_*.c) to drivers/disk and renamed according to their function.

    • Fixed CMD6 support in USDHC driver.

    • Fixed clock frequency switching after initialization in sdmmc_spi.c driver.

  • DMA

    • Added support on STM32G0 and STM32H7

  • EEPROM

    • Added support for EEPROM emulated in flash.

  • ESPI

    • Added support for Microchip eSPI SAF

  • Ethernet

    • Added simulated PTP clock to e1000 Ethernet controller. This allows simple PTP clock testing with Qemu.

    • Separated PTP clock from gPTP support in mcux and gmac drivers. This allows application to use PTP clock without enabling gPTP support.

    • Converted clock control to use DEVICE_DT_GET in mcux driver.

    • Changed to allow changing MAC address in gmac driver.

    • Driver for STM32H7 is now using specific memory layout to fit DMA constraints for RAM accesses.

  • Flash

    • flash_write_protection_set() has been deprecated and will be removed in Zephyr 2.8. Responsibility for write/erase protection management has been moved to the driver-specific implementation of the flash_write() and flash_erase() API calls. All in-tree flash drivers have been updated, and the protect implementation removed from their API tables. During the deprecation period user code invoking flash_write_protection_set() will have no effect, but the flash_write() and flash_erase() driver shims will wrap their calls with calls to the protect implementation if it is present in the API table. Out-of-tree drivers must be updated before the wrapping in the shims is removed when the deprecation period ends.

    • Added QSPI support on STM32F7.

  • GPIO

  • Hardware Info

    • Added support on Silicon Labs Gecko SoCs

  • I2C

    • Added support on STM32F2

  • I2S

    • Added support for NXP LPC devices

  • IEEE 802.15.4

    • Fixed various issues in IEEE 802.15.4 L2 driver.

    • nrf5:

      • Made HW Radio Capabilities runtime.

      • Enabled CSMA-CA on serialized host.

      • Changed driver to load EUI64 from UICR.

    • rf2xx:

      • Added support for tx mode direct.

      • Added support for tx mode CCA.

      • Added support to enable promiscuous mode.

      • Added support to enable pan coordinator mode.

  • Interrupt Controller

    • Moved shared interrupt controller configuration to be based on devicetree.

  • LED

    • Add support for LED GPIO

    • Added power management support for LED PWM

  • LoRa

    • Added support for SX1272

  • Modem

    • Converted wncm14a2a, quectel-bg9x, hl7800 and ublox-sara-r4 drivers to use new DT device macros.

    • Changed GSM modem to optionally do a factory reset when booting.

    • Added autostarting support to GSM modem.

    • Added wait for RDY instead of polling AT in BG9X.

    • Fixed PDP context management for BG9X.

    • Added TLS offload support to ublox-sara-r4.

    • Made reset pin optional in ublox-sara-r4.

    • Fixed potential buffer overrun in hl7800.

    • Fixed build errors on 64-bit platforms.

    • Added support for dialup modem in PPP driver.

  • PWM

    • Added support on STM32F2 and STM32L1.

    • Added support on Silicon Labs Gecko SoCs.

  • Sensor

    • Added support for STM32 internal (CPU) temperature sensor.

    • Refactored multiple ST sensor drivers to use gpio_dt_spec macros and common stmemc routines, support multiple instances, and configure ODR/range properties in device tree.

    • Added SBS 1.1 compliant fuel gauge driver.

    • Added MAX17262 fuel gauge driver.

    • Added BMP388 pressure sensor driver.

    • Added Atmel SAM QDEC driver.

    • Added TI FDC2X1X driver.

    • Added support for MPU9250 to existing MPU6050 6-axis motion tracking driver.

    • Refactored BME280 temperature/pressure sensor driver.

    • Added BMI270 IMU driver.

    • Added Nuvoton tachometer sensor driver.

    • Added MAX6675 cold-junction-compensated K-thermocouple to digital converter.

  • Serial

    • Extended Cypress PSoC-6 SCB[uart] driver to support interrupts.

    • Added UART driver for Renesas R-Car platform

  • SPI

    • Added Cypress PSoC-6 SCB[spi] driver.

    • Default SPI_SCK configuration is now pull-down for all STM32 to minimize power consumption in stop mode.

  • Timer

    • Added x86 APIC TSC_DEADLINE driver.

    • Added support for NXP MCUX OS Timer.

    • Added support for Nuvoton NPCX system timer.

    • Added CMT driver for Renesas R-Car platform.

  • USB

    • Added support on STM32H7

    • Added attached event delay to usb_dc_nrfx driver

  • Watchdog

    • Added support for TI CC32xx watchdog.

  • WiFi

    • Converted eswifi and esp drivers to new DT device macros

    • esp:

      • Fixed hostname configuration.

      • Removed POSIX API dependency.

      • Renamed offloading driver from esp to esp_at.

      • Added esp32 wifi driver support.

Networking

  • CoAP:

    • Fixed coap_find_options() to return 0 when options are empty.

  • DHCPv4:

    • Fixed DHCPv4 dependency to network event management options.

  • DNS:

    • Added locking to DNS library prevent concurrent access.

    • Added 10ms delay when rescheduling query timeout handler in DNS. This allows applications to run and handle the timeout gracefully.

    • Added support for reconfiguring DNS resolver when DNS servers are changed. This is supported by DHCPv4 and PPP.

  • HTTP:

    • Added support for storing numeric HTTP error code in client API.

  • IPv4:

    • Added IGMPv2 support to IPv4.

    • Removed IPv4 multicast address check when selecting source address during TX.

  • LwM2M:

    • Fixed query buffer size so that it is large enough to encode all query strings.

    • Added data validation callback.

    • Fixed Register/Update to use link_format writer.

    • Added application/link-format content writer.

    • Removed .well-known/core handling.

    • Introduced attribute handling helper functions.

    • Removed obsolete LWM2M_IPSO_TIMESTAMP_EXTENSIONS option.

    • Added IPSO Buzzer, Push Button, On/Off Switch, Accelerometer, Pressure Sensor, Humidity, Generic Sensor and Temperature object implementation to support object model in version 1.1

    • Unified reusable resources creation.

    • Added support for object versioning.

    • Changed to allow cancel-observe to match path.

    • Made pmin and pmax attributes optional.

    • Added API function to delete object instance.

    • Fixed Registration Update send on object creation.

    • Changed to only parse TLV from the first block.

    • Changed to trigger registration update only when registered.

  • Misc:

    • Added UDP packet sending support to net-shell.

    • Fixed source network interface setting when sending and when there are multiple network interfaces.

    • Changed connection managed to ignore not used network interfaces.

    • Added locking to network interface API function calls.

    • Changed to allow application to disable IPv4 or IPv6 support for a network interface.

    • Added support for virtual network interfaces.

    • Added support for IPv4/v6 tunneling network interface.

    • Added net events notification for PPP dead and running states.

    • Added PPP LCP MRU option support.

    • Added PPP IPCP IP and DNS address peer options support.

    • Added support for network packet capturing and sending data to external system for analysis.

    • Enabled running without TX or RX threads. By default, one RX thread and no TX thread is created. If userspace support is enabled, then one RX and one TX thread are created. This improves the network transmit latency when a packet is sent from application.

    • Changed to push highest priority net_pkt directly to driver when sending and if there is at least one TX thread.

    • Changed to use k_fifo instead of k_work in RX and TX processing. This prevents k_work from accessing already freed net_pkt struct. This also improves the latency of network packets when the data is passed between different network threads.

    • Changed to check network interface status when sending and return ENETDOWN to the application if data cannot be sent.

    • Fixed echo-server sample application and set netmask properly when VLAN is enabled.

  • OpenThread:

    • Added microseconds timer API support.

    • Changed to switch radio off when stopping diagnostics.

    • Enabled CSL delayed transmissions.

    • Added CSL transmitter and receiver API support.

    • Changed to init NCP after USB communication is established.

    • Aligned with the new NCP API.

    • Aligned with the new CLI API.

    • Introduced new OpenThread options.

    • Added Link Metrics API support.

    • Selected ECDSA when SRP is enabled.

    • Made child related options only visible on FTD.

    • Changed OT shell not to execute OT commands when shell is not ready.

  • Socket:

    • Added SO_PROTOCOL and SO_TYPE get socket option.

    • Added MSG_WAITALL receive socket option flag.

    • Added MSG_TRUNC socket option flag.

    • Added support for close method for packet sockets.

    • Added locking to socket API function calls.

    • Added support for SO_BINDTODEVICE socket option.

    • Added support for SO_SNDTIMEO socket option.

    • Made NET_SOCKETS_POSIX_NAMES be on by default. This allows application to use normal BSD socket API calls without adding the zsock prefix.

    • Added sample application to use SO_TXTIME socket option.

  • TCP:

    • Implemented ISN calculation according to RFC6528 in TCP. This is optional and enabled by default, and can be disabled if needed.

    • Removed legacy TCP stack support.

    • Changed TCP to use private work queue in order not to block system work queue.

  • TLS:

    • Fixed userspace access to TLS socket.

    • Added socket option support for setting and getting DTLS handshake timeout.

USB

  • Reworked USB classes configuration. Various minor fixes in USB DFU class.

  • USB HID class

    • Removed get_protocol/set_protocol from USB HID class API.

    • Allowed boot interface Protocol Code to be set per device.

    • Rework idle report implementation.

  • Samples

    • Allowed to build USB Audio sampe for different platforms.

    • Added SD card support to USB MSC sample.

    • Reworked USB HID sample.

Build and Infrastructure

  • Improved support for additional toolchains: * Support for the Intel oneApi toolchain.

  • Devicetree

  • West (extensions)

    • This section only covers west Extensions maintained in the zephyr repository. For release notes on west’s built-in features, see West Release Notes.

    • Changes to the runners backends used for flashing and debugging commands:

      • bossac runner: added legacy mode option into extended SAM-BA bootloader selection. This extends compatibility between Zephyr and some Arduino IDE bootloaders.

      • jlink runner: Zephyr thread awareness is now available in GDB by default for application builds with CONFIG_DEBUG_THREAD_INFO set to y in Configuration System (Kconfig). This applies to west debug, west debugserver, and west attach. JLink version 7.11b or later must be installed on the host system, with JLink 7.20 or later strongly recommended.

      • jlink runner: default west flash output is less verbose. The old behavior is still available when run as west --verbose flash.

      • jlink runner: when flashing, this runner now prefers a .hex file generated by the build system to a .bin. Unlike .bin, the HEX format includes information on the image’s address range in flash, so this works better when flashing Zephyr images linked for locations other than the target’s boot address, e.g. images meant to be run by bootloaders. The .bin file is still used as a fallback if a HEX File is not present.

      • openocd runner: support for west debug and west attach has been fixed. Previously with this runner, west debug behaved like west attach should, and west attach behaved like west debugserver should.

      • pyocd runner: board-specific pyOCD configuration files in YAML can now be placed in support/pyocd.yaml inside the board directory. See boards/arm/reel_board/support/pyocd.yaml for an example, and the pyOCD documentation for details on its configuration format.

    • west spdx: new command which can be used to generate SPDX software bills of materials for a Zephyr application build. See Software bill of materials: west spdx.

Libraries / Subsystems

  • Disk

    • Disk drivers (disk_access_*.c) are moved to drivers/disk and renamed according to their function. Driver’s Kconfig options are revised and renamed. SDMMC host controller drivers are selected when the corresponding node in devicetree is enabled. Following application relevant Kconfig options are renamed: CONFIG_DISK_ACCESS_RAM -> CONFIG_DISK_DRIVER_RAM, CONFIG_DISK_ACCESS_FLASH -> CONFIG_DISK_DRIVER_FLASH, CONFIG_DISK_ACCESS_SDHC -> CONFIG_DISK_DRIVER_SDMMC.

  • Management

    • MCUmgr

      • Fixed an issue with the file system management failing to open files due to missing initializations of fs_file_t structures.

      • Fixed an issue where multiple SMP commands sent one after the other would corrupt CBOR payload.

      • Fixed problem where mcumgr over shell would stall and wait for retransmissions of frames.

  • CMSIS subsystem

    • Moved CMSIS portability layer headers to include/portability/cmsis_os.h and include/portability/cmsis_os2.h

  • Power management

    • device_pm_control_nop has been removed in favor of NULL when device PM is not supported by a device. In order to make transition easier for out-of-tree users a macro with the same name is provided as an alias to NULL. The macro is flagged as deprecated to make users aware of the change.

    • Devices set as busy are no longer suspended by the system power management.

    • The time necessary to exit a sleep state and return to the active state was added in zephyr,power-state binding and accounted when the system changes to a power state.

    • Device runtime power management (PM), former IDLE runtime, was completely overhauled.

      • Multiple threads can wait an operation (pm_device_get_async and pm_device_put_async) to finish.

      • A new API pm_device_wait was added so that drivers can easily wait for an async request to finish.

      • The API can be used in pre-kernel stages.

      • Several concurrence issues related with atomics access and the usage of the polling API have been fixed. Condition variables are now used to handle notification.

  • Logging

    • Introduced logging v2 which allows logging any variable types (including floating point variables). New version does not require transient string duplication (log_strdup()). Legacy mode remains and is still the default but user API is not changed and modes are interchangeable. CONFIG_LOG2_MODE_DEFERRED or CONFIG_LOG2_MODE_IMMEDIATE enable logging v2. Logging backend API is extended to support v2 and the most popular backends (UART, shell) are updated.

  • Shell

    • Added CONFIG_SHELL_BACKEND_DUMMY_BUF_SIZE option that allows to set size of the dummy backend buffer; changing this parameter allows to work around issue, where output from command, shell that is gathered by the dummy backend, gets cut to the size of buffer.

  • Storage

    • Added persistent write progress to stream_flash.

  • Task Watchdog

    • This new subsystem was added with this release and allows supervision of individual threads. It is based on a regularly updated kernel timer, whose ISR is never actually called in regular system operation.

      An existing hardware watchdog can be used as an optional fallback if the task watchdog itself gets stuck.

  • Tracing

    • CONFIG_TRACING_CPU_STATS was removed in favor of CONFIG_THREAD_RUNTIME_STATS which provides per thread statistics. The same functionality is also available when Thread analyzer is enabled with the runtime statistics enabled.

    • Expanded and overhauled tracing hooks with more coverage and support for tracing all kernel objects and basic power management operations.

    • Added support for Percepio Tracealyzer, a commercial tracing tool which now has built-in support for Zephyr. We now have the Percepio tracerecorder integrated as a module.

    • Expanded support for the new hooks in SEGGER Systemview and enhanced the description file with support for all APIs.

  • Debug * SEGGER Systemview and RTT SDK updated to version v3.30

  • OS

    • Reboot functionality has been moved to subsys/os from subsys/power. A consequence of this movement is that the <power/reboot.h> header has been moved to <sys/reboot.h>. <power/reboot.h> is still provided for compatibility, but it will produce a warning to inform users of the relocation.

HALs

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

Trusted Firmware-m

  • Synchronized Trusted-Firmware-M module to the upstream v1.3.0 release.

  • Configured QEMU to run Zephyr samples and tests in CI on mps2_an521_nonsecure (Cortex-M33 Non-Secure) with TF-M as the secure firmware component.

  • Added Kconfig options for selecting the desired TF-M profile and build type

  • Added Kconfig options for enabling the desired TF-M secure partitions

  • Added a new sample to run the PSA tests with Zephyr

  • Added a new sample to run the TF-M regression tests using the Zephyr build system

  • Added support for new platforms

    • BL5340 DVK

    • STM32L562E DK

  • NOTE: Trusted-Firmware-M can not currently be used with mbedtls 2.26.0 when PSA APIs are enabled in mbedtls (MBEDTLS_USE_PSA_CRYPTO and MBEDTLS_PSA_CRYPTO_C). If both TF-M and mbedtls are required, mbedtls must be used without the PSA APIs. This will be resolved in a future update to mbedtls.

Documentation

  • Documentation look and feel has been improved by using a new stylesheet.

  • Doxygen is now run by Sphinx using the doxyrunner custom extension. The new extension centralizes multiple scattered workarounds that existed before in a single place.

  • Doxygen now runs with WARN_AS_ERROR enabled.

  • Documentation known warnings are now filtered using a custom Sphinx extension: warnings_filter. This extension removes the need of post-processing the Sphinx output and allows to use the -W option (treat warnings as errors) which has been enabled by default.

  • External content, e.g. samples and boards documentation is now handled by the external_content extension.

  • Sphinx is now run in parallel mode by default (-j auto).

  • The documentation helper Makefile has been moved from the repository root to the doc folder.

Tests and Samples

  • Twister’s dt_compat_enabled_with_alias() test case filter was deprecated in favor of a new dt_enabled_alias_with_parent_compat() filter. The old filter is still supported, but it may be removed in a future release.

    To update, replace uses like this:

    filter: dt_compat_enabled_with_alias("gpio-leds", "led0")
    

    with:

    filter: dt_enabled_alias_with_parent_compat("led0", "gpio-leds")
    
  • Add a feature which handles pytest script in twister and provide an example.

  • Provide test execution time per ztest testcase.

  • Added and refined some testcases, most of them are negative testcases, to improve the test code coverage:

    • Testcases of x86’s regular/direct interrupts and offload job from ISR.

    • Testcases of SMP, and enabled SMP for existed testing of semaphore, condvar, etc.

    • Testcases of memory protection, userspace and memory heap.

    • Testcases of data structure include stack, queue, ringbuffer and rbtree.

    • Testcases of IPC include pipe, poll, mailbox, message queue.

    • Testcases of synchronization include mutex, semaphore, atomic operations.

    • Testcases of scheduling and thread.

    • Testcases of testing for arch_nop() and errno.

    • Testcases of libc and posix API.

    • Testcases of log and sensor subsystem.