We are pleased to announce the release of Zephyr RTOS version 3.0.0.
The following sections provide detailed lists of changes by component.
You can check all currently known issues by listing them using the GitHub interface and listing all issues with the bug label.
Changes in this release
Replaced custom LwM2M
float32_valuetype with a native double type.
Added function for getting status of USB device remote wakeup feature.
dma-rangesas invalid property to be used with DT_PROP_LEN() along
crc16_ansi()functions have been modified. The former has a new signature. The latter now properly calculates the CRC-16-ANSI checksum. A new function,
crc16_reflect(), has been introduced to calculated reflected CRCs.
bt_gatt_..._func_twould previously be called with argument
conn = NULLin the event of a disconnect. This was not documented as part of the API. This behavior is changed so the
connargument is provided as normal when a disconnect occurs.
Removed APIs in this release
The following Kconfig options related to radio front-end modules (FEMs) were removed:
This FEM configuration is hardware description, and was therefore moved to devicetree. See the
femproperty for information on what to do instead on the Nordic open source controller.
Removed Kconfig option
CONFIG_USB_UART_CONSOLEwas only relevant for console driver when CDC ACM UART is used as backend. Since the behavior of the CDC ACM UART is changed so that it more closely mimics the real UART controller, option is no longer necessary.
Removed Kconfig option
CONFIG_OPENOCD_SUPPORTin favor of
flash_write_protection_set()along with the flash write protection implementation handler.
CAN_BUS_UNKNOWNand changed the signature of
can_get_state()to return an error code instead.
DT_CHOSEN_ZEPHYR_CANBUS_LABELin favor of utilizing
Deprecated in this release
<pm/pm.h>should be used instead.
USBD_CFG_DATA_DEFINEis deprecated in favor of utilizing
SYS_DEVICE_DEFINEis deprecated in favor of utilizing
device_usable_check()is deprecated in favor of utilizing
Custom CAN return codes (
CAN_TIMEOUT) are deprecated in favor of utilizing standard errno error codes.
can_attach_isr()is is deprecated and replaced by
CAN_DEFINE_MSGQis deprecated and replaced by
can_attach_msgq()is deprecated and replaced by
can_detach()is deprecated and replaced by
can_register_state_change_isr()is deprecated and replaced by
can_write()is deprecated in favor of utilizing
Stable API changes in this release
New APIs in this release
Added new APIs to support datum wider than 8-bit.
CONFIG_UART_WIDE_DATAis added to enable this new APIs.
Following functions, mirroring similar functions for 8-bit datum, are added:
uart_tx_u16()to send a given number of datum from buffer.
uart_rx_enable_u16()to start receiving data.
uart_rx_buf_rsp_u16()to set buffer for receiving data in response to
uart_poll_in_u16()to poll for input.
uart_poll_out_u16()to output datum in polling mode.
uart_fifo_fill_u16()to fill FIFO with data.
uart_fifo_read_u16()to read data from FIFO.
Added new Devicetree helpers:
New ranges property APIs
DEVICE_DT_GET(DT_CHOSEN(zephyr_canbus))to get the device instead, and read the name from the device structure if needed.
Removed deprecated macros:
can_get_max_filters()for retrieving the maximum number of RX filters support by a CAN controller device.
Added support for event objects. Threads may wait on an event object such that any events posted to that event object may wake a waiting thread if the posting satisfies the waiting threads’ event conditions.
Extended CPU runtime stats to track current, total, peak and average usage (as bounded by the scheduling of the idle thread). This permits a developer to obtain more system information if desired to tune the system.
Added “thread_usage” API for thread runtime cycle monitoring.
Fixed timeout issues when SYSTEM_CLOCK_SLOPPY_IDLE is configured.
Converted inline assembler calls to using CMSIS provided functions for
Replaced Kconfig CONFIG_CPU_CORTEX_R with CONFIG_ARMV7_R to enable differentiation between v7 and v8 Cortex-R.
Updated the Cortex-R syscall behavior to match that of the Cortex-M.
Fixed out-of-bounds error when large number of IRQs are enabled and ignore special INTDs between 1020 and 1023
Added MPU code for ARMv8R
Various MMU fixes
Added nocache memory segment support
Added Xen hypercall interface for ARM64
Fixed race condition on SMP scheduling code.
Introduced a mechanism to automatically figure out which scratch registers are used for internal code, instead of hard-coding. This is to accommodate the configurability of the architecture where some registers may exist in one SoC but not on another one.
Added coredump support for Xtensa.
Added GDB stub support for Xtensa.
Updated all experimental features in Bluetooth to use the new
EXPERIMENTALselectable Kconfig option
Bluetooth now uses logging v2 as with the rest of the tree
Implemented the Content Control ID module (CCID)
Added support for the Coordinated Set Identification Service (CSIS)
Added a Temporary Object Transfer client implementation
Added a Media Control client implementation
Added a Media Control Server implementation
Implemented the Media Proxy API
Implemented CIG reconfiguration and state handling
Updated the CSIS API for both server and client
Added Basic Audio Profile (BAP) unicast and broadcast server support
Added support for filtering of Periodic Advertising Sync by CTE type
Added additional handling logic for Periodic Advertising Sync Establishemnt
Added CTE RX, sampling and IQ report handling in DF connected mode
Added support for CTE configuration in connected mode
Direction Finding connection mode now uses the newly refactored LLCP implementation
CONFIG_BT_SETTINGS_CCC_STORE_ON_WRITEis now enabled by default. Storing CCC right after it’s written reduces risk of inconsistency of CCC values between bonded peers
Added support for L2CAP channel reconfiguration.
Added support for SMP error code 0xF, where the peer rejects a distributed key
bt_gatt_service_is_registered()to verify sevice registration
Added create an delete procedures to the Object Transfer Service implementation
Added support for reassembling extended advertising reports
Added support for reassembling periodic advertising reports
Added support for setting long periodic advertising data
Implemented GATT Long Writes reassembly before forwarding them up to the application
The GATT Server DB hash calculation logic has been corrected
Added storing of the CCC data upon paring complete
Split out the Proxy services, which can now be compiled out
Added an option to call back on every retransmission
Added support for multiple Advertising Sets
Refactored he Config Client and Health Client API to allow async use
Added support for a brand new implementation of LL Control Procedures (LLCP), currently disabled by default, can be enabled using the
Added initial support for Broadcast Isochronous Groups (BIG)
Integrated ISO Sync RX datapath
Transitioned FEM configurations (PA/LNA) from Kconfig to Devicetree
Updated the supported Bluetooth HCI version to 5.3
Added support for Periodic Advertiser List
Added support for Periodic Advertising Synchronization Receive Enable
Added support for filter access list filtering for exended scanning
Added support for Advertising Extensions dynamic TX power control
Added handling of direct address type in extended adv reports
Implemented auxiliary PDU device address matching
Implemented fragmentation of extended advertising reports over HCI
Implemented Extended Advertising and Scan report back-to-back chaining
Implemented Periodic Advertising ADI support,including duplicate filtering
Introduced a new preferred central connection spacing feature
Added support for a new optional
setup()function for vendor-specific setup code required to bring up the controller
Fixed DTM mode not being reset correctly with the HCI Reset command
Limited the maximum ACL TX buffer size to 251 bytes
Boards & SoC Support
Added support for these SoC series:
GigaDevice GD32VF103, GD32F3X0, GD32F403 and GD32F450.
Raspberry Pi RP2040
NXP i.MXRT595, i.MX8MQ, i.MX8MP
Removed support for these SoC series:
Made these changes in other SoC series:
stm32h7: Added SMPS support
stm32u5: Enabled TF-M
Changes for ARC boards:
Added support for these ARM boards:
Raspberry Pi Pico
ST Nucleo G031K8
ST Nucleo H7A3ZI Q
ST STM32G081B Evaluation
Added support for these ARM64 boards:
Intel SoC FPGA Agilex development kit
Removed support for these ARM boards:
Removed support for these X86 boards:
Added support for these RISC-V boards:
Sipeed Longan Nano and Nano Lite
Made these changes in other boards:
sam_e70_xplained: Added support for CAN-FD driver
mimxrt11xx: Added SOC level power management
mimxrt11xx: Added support for GPT timer as OS timer
Added support for these following shields:
Drivers and Sensors
Added support for stm32u5 series
stm32: Added shared IRQ support
zephyr,can-primarychosen property to
CAN_ERROR_WARNINGCAN controller state.
Added Atmel SAM Bosch M_CAN CAN-FD driver.
Added NXP LPCXpresso Bosch M_CAN CAN-FD driver.
Added ST STM32H7 Bosch M_CAN CAN-FD driver.
Rework transmission error handling the NXP FlexCAN driver to automatically retry transmission in case or arbitration lost or missing acknowledge and to fail early in
Added support for disabling automatic retransmissions (“one-shot” mode”) to the ST STM32 bxCAN driver.
Converted the emulated CAN loopback driver to be configured through devicetree instead of Kconfig.
stm32: Added timer based counter driver (stm32f4 only for now).
Added support for GigaDevice GD32 SoCs
Added support for stm32u5 series
stm32 sdmmc: Converted from polling to IT driven mode and added Hardware Flow Control option
Added support for suspending and resuming transfers
Added support for SoCs with DMA between application and embedded processors, allows for transfer directions to be identified as such.
mimxrt11xx: Added support for DMA
Added support for the EEPROM present in the TMP116 digital temperature sensor.
Added support for stm32u5 series
Added support for Synopsys DesignWare MAC driver with implementation on stm32h7 series.
stm32 (hal based): Added promiscuous mode support
stm32 (hal based): Added PTP L2 timestamping support
mimxrt11xx: Added support for 10/100M ENET
stm32g0: Added Dual Bank support
stm32_qspi: General enhancement (Generation of the reset pulse for SPI-NOR memory, Usage of 4IO for read / write (4READ/4PP), Support for different QSPI banks, Support for 4B addressing on spi-nor)
ite_i8xxx2: The driver has been reworked so the write/erase protection management has been moved to implementations of the flash_write() and the flash_erase() calls. The driver was keeping the write protection API which was designed to be removed since 2.6 release.
Added driver for GigaDevice GD32 SoCs
Added driver for GigaDevice GD32 SoCs
Added stats functionality to all drivers
Added I2C driver for Renesas R-Car platform
Added support for TCA9548A I2C switch
mimxrt10xx: Added support for I2S
mimxrt11xx: Added support for I2S
Added ECLIC driver for GigaDevice RISC-V GD32 SoCs
Added EXTI driver for GigaDevice GD32 SoCs
Added MBOX NRFX IPC driver
Added support for stm32f7 series
Introduced a new state-based pin control (
pinctrl) API inspired by the Linux design principles. The
pinctrlAPI will replace the existing pinmux API, so all platforms using pinmux are encouraged to migrate. A detailed guide with design principles and implementation guidelines can be found in Pin Control.
Platforms already supporting the
Nordic (preliminary support)
stm32: DT bindings: st,prescaler property was moved from pwm to parent timer node.
stm32: Implemented PWM capture API
Added driver for GigaDevice GD32 SoCs. Only PWM output is supported.
mimxrt1021: Added support for PWM
Added Invensense MPU9250 9-axis IMU driver.
Added ITE IT8XX2 tachometer driver.
Added STM L5 die temperature driver.
Added STM I3G4250D gyroscope driver.
Added TI TMP108 driver.
Added Winsen MH-Z19B CO2 driver.
Constified device config access in sbs_gauge and LM75 drivers.
Dropped DEV_DATA/DEV_CFG usage from various drivers.
Moved ODR and range properties from Kconfig to devicetree in various STM drivers.
Refactored INA230 driver to add support for INA237 variant.
Refactored various drivers to use I2C/SPI/GPIO DT APIs.
Enabled level triggered interrupts in LIS2DH driver.
Fixed TMP112 driver to avoid I2C burst write portability issues.
Fixed SENSOR_DEG2RAD_DOUBLE macro in LSM6DS0 driver.
Fixed gain factor in LSM303DLHC magnetometer driver.
stm32: Implemented half-duplex option.
Added driver for GigaDevice GD32 SoCs. Polling and interrupt driven modes are supported.
stm32: Implemented Frame format option (TI vs Motorola).
mimxrt11xx: Added support for Flexspi
stm32 lptim: Added support for stm32h7
Added support for stm32u5 series (OTG full speed)
Added support for stm32u5 series (Independent and Window)
mimxrt1170: Added support for watchdog on CM7
coap_serversamples to make better use of observe APIs.
Added PATCH, iPATCH and FETCH methods.
A few fixes for the block transfer handling.
Make mdns and llmnr responders join their multicast groups.
Added support for mdns/dns_sd service type enumeration.
Added support for Route Information option processing.
Add IPv4 support to multicast monitor.
Added a parameter to forcefully close the LwM2M session to
float32_value_ttype with double.
LWM2M_FIRMWARE_PORT_SECUREoptions, which allow to specify a custom port or firmware update.
Added observe callback for observe and notification events.
Added support for multiple LwM2M Firmware Update object instances.
Improved error handling in LwM2M content writers.
Added unit tests for LwM2M content writers.
Implmented LwM2M Security, Server, Connection Monitor objects in version 1.1.
Multiple minor bugfixes in the LwM2M stack.
Added support for the following objects:
LWM2M Software Management (ID 9)
LwM2M Gateway (ID 25)
IPSO Current (ID 3317)
uCIFI Battery (ID 3411)
IPSO Filling level (ID 3435)
gptp: clock sync ratio as double, not float
Added support for route lifetime and preference.
Refactored various packed structures across the networking stack, to avoid unaliged access warnings from gcc.
Added automatic loopback addresses registration to loopback interface.
Fixed source address selection for ARP.
Allow to implment a custom IEEE802154 L2 on top of existing drivers.
Introduced a network packet filtering framework.
Updated OpenThread revision up to commit
Fixed an overflow bug in the alarm implementation for Zephyr.
Added crypto backend based on PSA API.
Allow to store OpenThread settings in RAM.
Fixed handling of multiple commands in a single packet.
Enabled command handling by default.
Added support for sending our MSS to peer.
Fixed packet sending to local addresses.
Fixed possible deadlock between TCP and socket layer, when connection close is initiated from both sides.
Multiple other minor bugfixes and improvements in the TCP implementation.
Added support for
TLS_CERT_NOCOPYsocket option, which allows to optimise mbed TLS heap usage.
POLLHUPdetection when underlying TCP connection is closed.
Fixed mbedtls session reset on handshake errors.
Build and Infrastructure
New CMake extension functions:
The following CMake extension functions now handle devicetree aliases:
Added support for gd32isp runner
Libraries / Subsystems
Fixed the mcumgr SMP protocol over serial not adding the length of the CRC16 to packet length.
Kconfig option OS_MGMT_TASKSTAT is now disabled by default.
Power management resources are now manually allocated by devices using
PM_DEVICE_DT_INST_DEFINE. Device instantiation macros take now a reference to the allocated resources. The reference can be obtained using
PM_DEVICE_DT_INST_GET. Thanks to this change, devices not implementing support for device power management will not use unnecessary memory.
Device runtime power management API error handling has been simplified.
pm_device_runtime_enable()suspends the target device if not already suspended. This change makes sure device state is always kept in a consistent state.
Improved PM states Devicetree macros naming
Added a new API call
pm_state_cpu_get_all()to obtain information about CPU power states.
pm/device.his no longer included by
device.h, since the device API no longer depends on the PM API.
Added support for power domains. Power domains are implemented as simple devices and use the existent PM API for resume and suspend, devices under a power domain are notified when it becomes active or suspended.
Added a new action
PM_DEVICE_ACTION_TURN_ON. This action is used by power domains to notify devices when it becomes active.
Added new API (
pm_device_state_is_locked()) to lock a device pm state. When the device has its state locked, the kernel will no longer suspend and resume devices when the system goes to sleep and device runtime power management operations will fail.
pm_device_state_set()is deprecated in favor of utilizing
Proper multicore support. Devices are suspended only when the last active CPU. A cpu parameter was added to Policy and SoC interfaces.
Support all syscalls being traced using the python syscall generator to introduce a tracing hook call.
Added IPC service support and RPMsg with static VRINGs backend
stm32cube/stm32wb and its lib: Upgraded to version V1.12.1
stm32cube/stm32mp1: Upgraded to version V1.5.0
stm32cube/stm32u5: Upgraded to version V1.0.2
Added GigaDevice HAL module
Fixed serial recovery skipping on nrf5340.
Fixed issue which caused that progressive’s erase feature was off although was selected by Kconfig (introduced by #42c985cead).
Added check of reset address in incoming image validation phase, see
Allow image header bigger than 1 KB for encrypted images.
Support Mbed TLS 3.0.
stm32: watchdog support.
many documentation improvements.
Fixed deadlock on cryptolib selectors in Kconfig.
Fixed support for single application slot with serial recovery.
Added various hooks to be able to change how image data is accessed, see
Added custom commands support in serial recovery (PERUSER_MGMT_GROUP): storage erase
CONFIG_BOOT_MGMT_CUSTOM_STORAGE_ERASE, custom image status
Added support for direct image upload, see
CONFIG_MCUBOOT_SERIAL_DIRECT_IMAGE_UPLOADin serial recovery.
Updated TF-M to 1.5.0 release, with a handful of additional cherry-picked commits.
A new theme is used by the Doxygen HTML pages. It is based on doxygen-awesome-css theme.
Tests and Samples
Drivers: clock_control: Added test suite for stm32 (u5, h7).