Zephyr 3.6.0
We are pleased to announce the release of Zephyr version 3.6.0.
Major enhancements with this release include:
New GNSS subsystem added, enabling geo-awareness in Zephyr applications.
New API and drivers introduced for interfacing with keyboard matrices.
New socket and CoAP service libraries streamlining the implementation of socket and CoAP servers respectively, while also optimizing the use of resources.
Integrated Trusted Firmware-M (TF-M) 2.0, including an update to Mbed TLS 3.5.2.
Improved LLEXT tooling, simplifying module creation in the Zephyr build system.
Userspace support extended to Xtensa architecture.
Build system now supports Link Time Optimization (LTO), reducing the size of the final image.
Bluetooth Mesh protocol 1.1 now supported by default.
Major updates to the documentation of the native simulator, clarifying supported peripherals and how to use them.
Over 30 new supported boards, spanning all Zephyr-supported architectures.
An overview of the changes required or recommended when migrating your application from Zephyr v3.5.0 to Zephyr v3.6.0 can be found in the separate migration guide.
The following sections provide detailed lists of changes by component.
Architectures
ARC
Enabled hardware prefetcher and shared cluster cache (SCM - Shared Cluster Memory) for ARCv3 processors (HS5x & HS6x).
Disabled Thread-local Storage support for platforms with two or more register banks.
Fixed unstable work of application built with MetaWare toolchain for hardware platforms (garbage in .device_states section).
ARM
MPU regions are now always cleared before initialization.
Standardized on
arch_secondary_cpu_init()
to provide consistency across all architectures.Renamed
z_arm_prep_c()
asz_prep_c()
to provide consistency across all architectures.Renamed the exception header to be consistent across all architectures.
GDB stubs added (currently only supports Zynq-7000).
Added support for custom interrupt controllers using
CONFIG_ARM_CUSTOM_INTERRUPT_CONTROLLER
.MMU and MPU initialization moved to
z_prep_c()
for Cortex-A and Cortex-R to enable initialization by individual cores.Common Cortex-M MPU code moved to
arch/arm/core/mpu
.
Xtensa
Removed the unused Kconfig option
CONFIG_XTENSA_NO_IPC
.Added userspace support via MMU.
Bluetooth
Audio
Changed
bt_bap_scan_delegator_subgroup
tobt_bap_bass_subgroup
and made it independent ofCONFIG_BT_BAP_SCAN_DELEGATOR
.Modified
bt_bap_stream_send()
to no longer take a timestamp as parameter, and addedbt_bap_stream_send_ts()
that does.Modified
bt_cap_stream_send()
to no longer take a timestamp as parameter, and addedbt_cap_stream_send_ts()
that does.Assigned number values have been moved from
include/zephyr/bluetooth/audio/lc3.h
toinclude/zephyr/bluetooth/audio/audio.h
and theLC3
infix have been removed.The CAP initiator APIs have been streamlined and follow the same parameter pattern.
Added Kconfig options to make MCC functionality optional to reduce memory usage for simple clients.
Added CAP Commander change volume and change volume offset.
Added proper support for doing decoding in the application instead of in the controller by modifying how the ISO data path is configured.
Added
bt_csip_set_member_unregister()
to unregister a CSIS instance.Added helper functions to get and set assigned number values in codec configuration and codec capabilities.
Added support for the new mono audio location.
Added ISO state callbacks for streams so the user knows the state of the CIS.
Added
bt_pacs_set_available_contexts_for_conn()
to set available context per connection.Refactored the
bt_bap_base
to be an abstract struct with new helper functions, so that Zephyr supports all BASEs regardless of the size.
Host
Added
recycled()
callback tobt_conn_cb
, which notifies listeners when a connection object has been freed, so it can be utilized for different purposes. No guarantees are made to what listener will be granted the object, as only the first claim is served.Modified
bt_iso_chan_send()
to no longer take a timestamp as parameter, and addedbt_iso_chan_send_ts()
that does.
Mesh
Added the delayable messages functionality to apply random delays for the transmitted responses on the Access layer. The functionality is enabled by the
CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG
Kconfig option.The Bluetooth Mesh protocol 1.1 is now supported by default.
Controller
Added deinit implementation for ESP32 controller.
HCI Driver
Split ST HCI SPI Bluetooth driver from the Zephyr one to provide more features based on ST SPI protocols V1 and V2. As a result,
st,hci-spi-v1
andst,hci-spi-v2
were introduced.
Boards & SoC Support
Added support for these SoC series:
Added support for Renesas R-Car Gen4 series.
Added support for STM32F303xB SoC variants.
Added support for STM32H7B0xx SoC variants.
Added support for STM32L010xx SoC variants.
Added support for STM32L081xx SoC variants.
Added support for STM32U5A9xx SoC variants.
Added support for NXP S32K1 devices.
Added support for NXP IMX8ULP SoC.
Added support for NXP MIMXRT595 DSP core.
Made these changes in other SoC series:
Nordic SoCs now imply
CONFIG_XIP
instead of selecting it. This allows for creating RAM-based applications by disabling it.BLE is now supported on STM32WBA series.
xtensa: imx8: Split the generic i.MX8 SoC into i.MX8QXP and i.MX8QM.
LPC55xxx: Fixed the system hardware clock cycle rate.
Added support for these ARM boards:
Added support for Adafruit QTPy RP2040 board:
adafruit_qt_py_rp2040
.Added support for FANKE FK7B0M1-VBT6 board:
fk7b0m1_vbt6
.Added support for Renesas R-Car Spider board CR52:
rcar_spider_cr52
.Added support for ST Nucleo F722ZE board:
nucleo_f722ze
.Added support for ST STM32H750B Discovery Kit:
stm32h750b_dk
.Added support for ST STM32L4R9I Discovery board:
stm32l4r9i_disco
.Added support for ST STM32U5A9J-DK discovery kit:
stm32u5a9j_dk
.Added support for ST Nucleo WBA55CG board:
nucleo_wba55cg
.Added support for ST STM32WB5MM-DK Discovery board:
stm32wb5mm_dk
.Added support for Wiznet W5500 Evaluation Pico board:
w5500_evb_pico
.Added support for ADI boards:
adi_sdp_k1
,adi_eval_adin1110ebz
,adi_eval_adin2111ebz
.Added support for NXP UCANS32K1SIC board:
ucans32k1sic
.
Added support for this RISC-V board:
Added Lilygo TTGO T8-C3 board:
ttgo_t8c3
.
Added support for these Xtensa boards:
Added support for NXP iMX8ULP board:
nxp_adsp_imx8ulp
.Added Heltec Wireless Stick Lite (V3) board:
heltec_wireless_stick_lite_v3
.Added KINCONY-KC868-A32 board:
kincony_kc868_a32
.Added Lolin ESP32-S2 Mini board:
esp32s2_lolin_mini
.Added Lilygo TTGO LoRa32 board:
ttgo_lora32
.Added M5Stack AtomS3 board:
m5stack_atoms3
.Added M5Stack AtomS3-Lite board:
m5stack_atoms3_lite
.Added M5Stack StampS3 board:
m5stack_stamps3
.
Made these changes for ARM boards:
Added support for low power on G1120B0MIPI using RT595.
Added support for lpspi, lpi2c on NXP board:
mimx93_evk_a55
.Fixed partition naming on
lpcxpresso55s69
to use the standard slot naming used by TFM-enabled Zephyr platforms.Enabled support for linkserver debugger on
frdm_kl25z
,mimxrt1015_evk
,mimxrt1020_evk
,mimxrt1050_evk
,mimxrt685_evk
,frdm_k64f
.Switched MCUBoot FW Update mode on NXP boards from Swap & Scratch to Swap & Move.
Made these changes for RISC-V boards:
Enabled ADC support on
longan_nano
.
Made these changes for native/POSIX boards:
The simulated nrf5340 targets now include the IPC and MUTEX peripherals, and support OpenAMP to communicate between the cores. It is now possible to run the BLE controller or 802.15.4 driver in the net core, and application and BT host in the app core.
The nrf*_bsim simulated targets now include models of the UART peripheral. It is now possible to connect a nrf52_bsim UART to another, or a UART in loopback, utilizing both the new and legacy nRFx UART drivers, in any mode.
For the native simulator based targets it is now possible to set via Kconfig command line options which will be handled by the executable as if they were provided from the invoking shell.
For all native boards, the native logger backend will now also be used even if the UART is enabled.
Several bugfixes and other minor additions to the nRF5x HW models.
Multiple documentation updates and fixes for all native boards.
Added support for these following shields:
Added support for M5Stack-Core2 base:
m5stack_core2_ext
.Added support for MikroElektronika ACCEL 13 Click:
mikroe_accel13_click
.Added support for Waveshare Pico UPS-B:
waveshare_pico_ups_b
.Added support for X-NUCLEO-BNRG2A1: BLE expansion board:
x_nucleo_bnrg2a1
.Added support for X-NUCLEO-IKS4A1: MEMS Inertial and Environmental Multi sensor:
x_nucleo_iks4a1
.
Build system and infrastructure
Added functionality for Link Time Optimization. This change includes interrupt script generator rebuilding and adds the following Kconfig options:
CONFIG_ISR_TABLES_LOCAL_DECLARATION
: LTO compatible interrupt tables parserCONFIG_LTO
: Enable Link Time Optimization
Currently the LTO compatible interrupt tables parser is only supported by ARM architectures and GCC compiler/linker. See pull request GitHub #66392 for details.
Dropped the
COMPAT_INCLUDES
option. It was unused since Zephyr v3.0.Fixed an issue whereby board revision
0
did not include overlay files for that revision.Added
PRE_IMAGE_CMAKE
andPOST_IMAGE_CMAKE
hooks to sysbuild modules, which allows for modules to run code after and before each image’s cmake invocation.Added
CONFIG_ROM_END_OFFSET
option which allows reducing the size of an image. This is intended for use with firmware signing scripts which add additional data to the end of images outside of the build itself.Added MCUboot image size reduction to sysbuild images which include MCUboot. This prevents issues with building firmware images that are too large for MCUboot to swap.
Deprecated
CONFIG_BOOTLOADER_SRAM_SIZE
. Users of this should transition to having RAM set up properly in their board devicetree files.Fixed an issue whereby shields were processed in order of the root they resided in rather than the order they were supplied to cmake in.
Fixed an issue whereby using some shields with sysbuild would cause a cmake Kconfig error.
Fixed an issue where the macros
_POSIX_C_SOURCE
and_XOPEN_SOURCE
would be defined globally when building with Picolibc or for the native (ARCH_POSIX
) targets. After this change users may need to define them for their own applications or libraries.Added support for sysbuild setting a signing script (
SIGNING_SCRIPT
). See Extending signing externally for details.Added support for
FILE_SUFFIX
in the build system which allows for adding suffixes to application Kconfig fragment file names and devicetree overlay file names. See File Suffixes and Sysbuild file suffix support for details.Deprecated
CONF_FILE
prj_<build>.conf
build type.Added -Wdouble-promotion as a default warning when compiling to warn developers with single-precision floats easily being promoted to double-precision.
Drivers and Sensors
ADC
Power Management for ADC is now supported on STM32 devices.
STM32 ADC driver now supports mixing shared and separate IRQs (for instance on STM32G473 which has 5 ADCs, ADC1 and ADC2 share one IRQ while ADC3, ADC4 and ADC5 each have unique IRQs). Enabling all instances in the same application is not possible on such devices as of now.
Auxiliary Display
Added Sparkfun SerLCD driver.
Audio
Added a driver
drivers/audio/dmic_mcux.c
for NXP DMIC peripheral. This peripheral is present on theiMX RT5xx
andiMX RT6xx
parts, as well as some LPC SOCs.
Battery backed up RAM
STM32WL devices now support BBRAM.
CAN
Added system call
can_get_mode()
for getting the current operation mode of a CAN controller.Add system call
can_get_transceiver()
for getting the CAN transceiver associated with a CAN controller.Added accessor functions for the CAN statistics.
Added common bit error counter to the CAN statistics.
Added CAN statistics support to the following drivers:
Added CAN controller driver for the Nuvoton NuMaker series (
nuvoton,numaker-canfd
).Added CAN controller driver for the Infineon XMC4xxx family (
infineon,xmc4xxx-can
andinfineon,xmc4xxx-can-node
).Added support for the NXP S32K1xx family to the
nxp,flexcan
driver.All Bosch M_CAN-based front-end drivers now use named IRQs, “int0” and “int1”.
The
zephyr,native-linux-can
driver now supports being built with embedded C libraries.Added support for setting “raw” timing values from the CAN shell.
Clock control
Renesas R-Car clock control driver now supports Gen4 SoCs.
Renamed
CONFIG_CLOCK_CONTROL_RA
toCONFIG_CLOCK_CONTROL_RENESAS_RA
.On STM32 devices,
st,stm32-hse-clock
now allows setting acss-enabled
property which enables HSE clock security system (CSS).
Counter
The nRFx counter driver now works with simulated nrf*_bsim targets.
Added support for top value configuration and fixed a bug in the native posix driver.
Added support for the MRT counter for NXP RT6xx, RT5xx and LPC55xxx.
Crypto
STM32WB devices now support crypto API through AES block.
Display
Introduced frame buffer config to STM32 LTDC driver.
DMA
STM32WBA Devices now support GPDMA.
Introduced a new DMA driver
drivers/dma/dma_nxp_edma.c
for NXP’s eDMA IP.
Entropy
The “native_posix” entropy driver now accepts a new command line option
seed-random
. When used, the random generator will be seeded from/dev/urandom
On STM32devices, RNG block is now suspended when pool is full to save power.
Ethernet
The “native_posix” ethernet driver now supports being built with embedded C libraries.
Enabled HW checksum offloading for STM32H7.
Added implementation of Open Alliance’s TC6 T1S driver.
Added xmc4xxx driver.
Added NXP enet driver with PTP support.
Added KSZ8081 PHY driver.
Added proper IPv4 multicast support to NXP mcux driver.
Added LAN8651 T1S support.
Added DSA support to STM32.
Added tja1103 PHY support.
Added Nuvoton numaker support.
Fixed lan865x driver. Transmission speed improvements, IRQ handling fixes.
Fixed s32_gmac driver. Link up/down handling fixes.
Fixed phy_mii driver. The invalid phy id was incorrectly checked.
Fixed sam_gmac driver. PTP clock adjustment was wrong for negative values.
Fixed adin2111 driver. Initialization was done incorrectly when working with adin2110.
Fixed ksz8081 driver. Logging changes, RMII clock fixes, GPIO pin fixes.
Added a driver
drivers/ethernet/eth_nxp_enet.c
for NXP ENET which is a rework of the old driverdrivers/ethernet/eth_mcux.c
. The old driver became unmaintainable due to fundamental problems with the lack of PHY abstraction. The new driver is still experimental and requires maturation. Eventually the old driver will be deprecated and this new driver will be supported instead.
Flash
Redesigned the Atmel SAM controller to fully utilize flash page layout.
spi_nor
driver now sleeps between polls inspi_nor_wait_until_ready
. If this is not desired (For example due to ROM constraints in a bootloader),CONFIG_SPI_NOR_SLEEP_WHILE_WAITING_UNTIL_READY
can be disabled.Flash readout protection configuration was added on STM32G4 and STM32L4 series.
nordic_qspi_nor
driver now supports user-configurable QSPI timeout withCONFIG_NORDIC_QSPI_NOR_TIMEOUT_MS
.
GNSS
Added GNSS device driver API and subsystem for parsing and publishing location, datetime, and satellite information, enabled by
CONFIG_GNSS
andCONFIG_GNSS_SATELLITES
. The GNSS subsystem and device drivers are based on the Modem modules subsystem, using themodem_pipe
module, modem backends, andmodem_chat
module to communicate with the modems. For systems which already contain a cellular modem, adding a GNSS modem is very efficient due to the reuse of subsystems.Added GNSS-specific, safe, string-to-integer parsing utilities, enabled by
CONFIG_GNSS_PARSE
.Added NMEA0183 parsing utilities, enabled by
CONFIG_GNSS_NMEA0183
.Added extensive GNSS data logging, enabled by
CONFIG_GNSS_DUMP_TO_LOG
.Added generic NMEA0183 over UART based modem device driver, matching the devicetree compatible
gnss-nmea-generic
.Added fully featured device driver for the Quectel LCX6G series GNSS modems, matching the devicetree compatibles
quectel,lc26g
,quectel,lc76g
andquectel,lc86g
.
GPIO
Renesas R-Car GPIO driver now supports Gen4 SoCs.
Renamed
CONFIG_GPIO_RA
toCONFIG_GPIO_RENESAS_RA
.Added a new GPIO driver (
drivers/gpio/gpio_mcux_rgpio.c
). This driver is used for i.MX93 and i.MX8ULP.
I2C
i2c_get_config()
is now supported on the STM32 driver.
I2S
STM32H7 devices now support I2S.
I3C
The Legacy Virtual Register defines have been renamed from
I3C_DCR_I2C_*
toI3C_LVR_I2C_*
.Added the ability to specify a start address when searching for a free I3C address to be reserved. This requires a new function argument to
i3c_addr_slots_next_free_find()
.Added a field named
num_xfer
ini3c_msg
andi3c_ccc_taget_payload
as an output to indicate the actual number of bytes transferred.Cadence I3C driver (
drivers/i3c/i3c_cdns.c
):Added support to handle controller abort where the target does not emit end of data for register read but continues sending data.
Updated the timeout calculation to be coupled with CPU speed instead of a fixed number of retries.
NXP MCUX I3C driver (
drivers/i3c/i3c_mcux.c
):Fixed
mcux_i3c_config_get()
not returning the configuration to the caller.Improved the FIFO read routine to support higher transfer rates.
Removed the infinite wait for MCTRLDONE in auto IBI.
Added
disable-open-drain-high-pp
property tonxp,mcux-i3c
, which allows alternative high time for open-drain clock.
IEEE 802.15.4
Removed
CONFIG_IEEE802154_SELECTIVE_TXPOWER
Kconfig option.
Input
The
short-codes
property ofzephyr,input-longpress
is now optional. The node can be used by specifying only input and long codes.Added support for keyboard matrix drivers, including a new
gpio-kbd-matrix
andinput-keymap
drivers. See GPIO Keyboard Matrix for more details.Added a pair of input codes to HID codes translation functions. See
input_to_hid_code()
andinput_to_hid_modifier()
.Added power management support to
gpio-keys
focaltech,ft5336
.Added a
zephyr,native-linux-evdev
device node for getting input events from a Linux evdev device node.Added support for optical encoders and power management to
gpio-qdec
.New driver
analog-axis
.Added ESP32 touch sensor driver including a
espressif,esp32-touch
.
MDIO
Fixed initialization priorities of NXP s32 NETC drivers.
Fixed SAM GMAC transfer timeout errors caused by MDIO clock not being initialized.
Fixed ESP32 MDIO driver being enabled when node was not status okay.
Added support for C22 and C45 APIs on S32 GMAC.
Added MDIO driver for NXP ENET peripheral.
Added xmc4xxx MDIO drivers.
Fixed build errors caused by mdio.h driver header not including errno.h
MFD
Added support for
maxim,max20335
.Added support for
adi,ad5592
.Added separate initialization priorities for
nordic,npm1300
andnordic,npm6001
.
PCIE
Fixed MMIO size calculation by disabling IO/memory decoding beforehand.
Modified to use PNP ID for PRT retrieval.
MEMC
Added a new driver for NXP FlexRAM.
MIPI-DBI
Introduced a new MIPI DBI driver class.
Pin control
Renesas R-Car pinctrl driver now supports Gen4 SoCs.
Renamed
CONFIG_PINCTRL_RA
toCONFIG_PINCTRL_RENESAS_RA
.Renesas R-Car pinctrl driver now supports voltage control for R8A77951 and R8A77961 SoCs.
Added driver for ZynqMP / Mercury XU.
Added driver for i.MX8QM/QXP.
Added driver for Renesas RZ/T2M.
On STM32 devices, pins assigned to JTAG/SW port can now be put to analog state when
CONFIG_PM
enabled andCONFIG_DEBUG
disabled.
PWM
Fixed ESP32S3 low frequency PWM issue.
Regulators
Added new API functions
startup-delay-us
andoff-on-delay-us
are now supported for all regulators.Added non-multithreading support.
Added support for
maxim,max20335-regulator
.Added ASYS UVLO configuration for
nxp,pca9420
.Added LDO/DCDC support for
renesas,smartbond-regulator
.Added LDO soft start configuration for
nordic,npm1300-regulator
.Fixed init priority for
x-powers,axp192-regulator
.Fixed LDO GPIO control for
nordic,npm1300-regulator
.
Retained memory
Retained memory driver backend for registers was added.
Retained memory API status was changed from experimental to unstable.
RTC
Added Atmel SAM driver.
SMBUS:
SMBUS is now supported on STM32 devices.
SDHC
Added SDHC driver for Cadence SDHC IP.
Added SDHC driver for Infineon CAT1 IP.
Added support for SDIO commands to iMX USDHC SDHC driver.
Sensor
Fixed arithmetic overflow in the LTRF216A driver.
Fixed negative temperature calculation in MAX31865 driver.
Added TI TMAG5273 3D Hall sensor driver.
Added Vishay VCNL36825T proximity sensor driver.
Added BMA4xx accelerometer sensor emulator.
Added white channel support to the VEML7700 ambient light sensor driver.
Added ST LIS2DE12 accelerometer sensor driver.
Added Bosch BMP581 pressure sensor driver.
Added support for triggering multiple sensor devices in the sensor shell.
Added Aosong AGS10 TVOC air quality gas sensor driver.
Extended MAX31865 temperature sensor driver to support changing three-wire mode at runtime.
Fixed Bosch BMI160 gyro range calculation and added support for getting attributes.
Optimized Bosch BMA4xx accelerometer sample calculation, improving accuracy.
Removed floating point arithmetic from the TI BQ274xx gauge driver.
Fixed ST drivers Kconfig dependency to the HAL_ST module.
Added Bosch BMA4xx accelerometer sensor driver.
Added ST LIS2DU12 accelerometer sensor driver.
Extended NTC thermistor driver to support TDK NTCG103JF103FT1.
Added NXP S32 quadrature decoder driver.
Fixed LSM6DSV16x gyro range table.
Fixed missing return value checks in ADLTC2990, TSL2540, MAX17055 drivers.
Added ST LPS28DFW pressure sensor driver.
Fixed interrupt in BMI323 driver.
Added devicetree properties macros to various ST sensor drivers.
Added Renesas HS300x temperature/humidity sensor driver.
Added Gas Sensing Solutions’ ExplorIR-M CO2 sensor driver.
Fixed self test delay in ADXL367 accelerometer sensor driver.
Added ST LPS22DF pressure sensor driver.
Added new streaming APIs and implemented in the ICM42688 driver.
Added trigger support to the ADXL367 accelerometer sensor driver.
Added PM suspend and resume support to the LSM6DSL accelerometer sensor driver.
Added AMS TSL2561 light sensor driver.
Extended BQ274xx driver to support configuring and confirming the chemistry profile.
Extended LIS2DH and LSM6DSV16x drivers to support configuring INT1/INT2 in devicetree.
Added die temperature measurement support to NPM1300 charger driver.
Added ADLTC2990 sensor emulator.
Extended MPU6050 driver to support MPU6886 variant.
Added ADXL367 accelerometer sensor driver.
Added LiteOn LTR-F216A illuminance sensor driver.
Added Memsic MC3419 accelerometer sensor driver.
Added AMD SB temperature sensor driver.
Added ESP32S3 internal temperature sensor driver.
Added new self-documenting macros for setting ST sensor devicetree properties (e.g., LSM6DSV16X_DT_ODR_AT_60Hz). (GitHub #65410)
Serial
Added drivers to support UART on Renesas RA and RZ/T2M.
Added support for higher baud rate for ITE IT8xxx2.
Added driver to support Intel Lightweight UART.
Added UART asynchronous RX helper.
Added support for async API on NS16550 driver.
Updated
uart_esp32
to use serial port configuration from devicetree.Added an adaptation API to provide interrupt driven API for drivers which have only implemented async API.
Emulated UART driver (
drivers/serial/uart_emul.c
):Added emulated interrupt based TX.
Added emulated error for testing.
Modified to use local work queue for data transfer.
Modified FIFO size and its handling to be more aligned with real hardware.
On STM32 devices, it is now possible to enable FIFO by setting a
fifo-enable
property in targeted serial node, with the following benefits: In TX, FIFO allows to work in burst mode, easing scheduling of loaded applications. It also allows more reliable communication with UART devices sensitive to variation of inter-frames delays. In RX, FIFO reduces overrun occurrences.
SPI
On STM32H7 devices,
fifo-enable
property allows using SPI block FIFO. This feature is still experimental and requires maturation.On STM32 devices impacted by BSY bit erratum, a workaround was implemented.
USB
On STM2G0 devices, property
crs-usb-sof
inclk_hsi48
node enables support for Clock Recovery System, allowing a more stable HSI48 clock and hence resilient USB connection.On compatible STM32 devices, isochronous endpoints are now functional thanks to the use of double buffering.
Added new UDC driver for DWC2 controller.
Added support for Nuvoton NuMaker series USBD controllers.
W1
Added 1-Wire GPIO master driver. See the
zephyr,w1-gpio
devicetree binding for more information.
Wi-Fi
Added Infineon airoc driver.
Fixed esp32 driver. Decreased minimum heap size, disabled automatic reconnection on leaving.
Fixed esp_at driver. Allow building without IPv4 support. Passive Receive mode fixes. Depend on UART runtime configuration.
Fixed winc1500 driver. Disconnect result event was not returned when disconnecting.
Networking
CoAP:
Added support for Echo and Request-Tag CoAP options (RFC 9175).
Changed
coap_remove_observer()
API function return type to bool.Introduced CoAP service library, which simplifies implementation of CoAP server functionality.
Updated CoAP server example to use CoAP service library.
Added shell module for CoAP server.
Fixed NULL pointer dereference in
coap_packet_remove_option()
.Added CoAP observer/service network events using the Network Event subsystem.
Changed
coap_pending_init()
API function to takecoap_transmission_parameters
instead of retry count.Added new API functions:
Connection Manager:
Added a generic Wi-Fi connectivity backend.
DHCP:
Added missing DHCPv6 state structure initialization when initializing network interface.
DHCP-assigned IPv4 address is now removed when interface goes down.
Added DHCPv4 server implementation.
Rearranged DHCPv4 file structure. All DHCPv4 related files are now grouped within
subsys/net/lib/dhcpv4
.Moved DHCPv6 files to
subsys/net/lib/dhcpv6
to align with DHCPv4.
DNS:
Added support for enabling mDNS listener on all network interfaces.
Added VLAN support to the
mdns_responder
sample.Fixed TTL/hop limit set on DNS packets.
Added
CONFIG_DNS_RESOLVER_AUTO_INIT
which allows to disable automatic initialization of the default DNS context on boot.
Ethernet:
Manual registration of ARP entries is now supported.
Added PHY mode selection to device tree.
Added TX-Injection mode support.
gPTP:
The local port identity is now used when forwarding sync messages.
Fixed double converted byte order of BMCA info.
GM PRIO root system id is now always used for announce messages.
Created gPTP handler thread stack size Kconfig option.
Inverted the priority of outgoing packets.
ICMP:
Fixed an error being emitted when unhandled ICMP message was received.
Fixed a bug where ICMP Echo Reply could be sent without proper source IP address set.
Fixed a packet leak in ICMP Echo Request handlers in case priority check failed.
Improved thread safety of the module handling Neighbor Discovery.
Added support for IPv6 Neighbor reachability hints, allowing to reduce ICMPv6 traffic for active connections.
IP:
Fixed L3/L4 checksum calculation/validation for IP-fragmented packets on interfaces that support checksum offload.
Fixed net_context not being set on IP fragmented packets, preventing send callback from being called.
It is now possible to have separate IPv4 TTL value and IPv6 hop limit value for unicast and multicast packets. This can be controlled in each socket via
setsockopt()
API.Improved source IP address verification in the IP stack. Addresses received to/from loopback address on non-loopback interfaces are dropped.
Added new functions to verify if IPv6 address is site local or global.
Added support for setting peer IP address in
net_pkt
structure for offloaded interfaces. This allows forrecvfrom()
to return a valid address in offloaded case.
LwM2M:
Added
CONFIG_LWM2M_UPDATE_PERIOD
which configures the LwM2M Update period regardless of the lifetime value.Fixed composite read/write access rights check.
Added shell command to delete object and resource instances.
Fixed a bug in block-wise transfer where block-wise ACKs were sent with wrong response code.
Fixed object version reporting for LwM2M version 1.1.
Added support for DTLS Connection Identifier in the LwM2M engine.
Added support for LwM2M Server Disable executable resource.
Implemented fallback mechanism for LwM2M server selection during registration phase. The engine will now try to choose a different server if the current one becomes unavailable or disabled.
Added support for storing LwM2M error list in settings.
Fixed pmin observer attribute handling in tickless mode.
Added support for notifying the application about ongoing CoAP transmissions with
set_socket_state()
callback.Deprecated unsigned 64-bit integer value type, as it’s not represented in the spec. Use signed 64-bit integer instead.
Added a callback for LwM2M Gateway object, which allows to handle LwM2M messages with prefixed path.
Added LwM2M-specific macros for object initialization during boot.
Several other minor bugfixes ans improvements.
Misc:
Added support for compile time network event handlers using the macro
NET_MGMT_REGISTER_EVENT_HANDLER
.Added the
CONFIG_NET_MGMT_EVENT_WORKER
choice to allow emitting network events using the system work queue or synchronously.Removed redundant Network Connectivity API documentation page.
Improved thread safety of the network connections subsystem.
Removed
eth_native_posix
sample.Removed redundant
arb
andfv2015
fields fromstruct net_pkt_cb_ieee802154
.Introduced a separate mutex for TX at the network interface level to prevent concurrent access on TX to drivers that are not re-entrant.
Fixed netmask not being registered for loopback address.
Added support for binding to a specific network interface at the net_context level.
Added IGMPv3 support.
Added a new network event,
NET_EVENT_HOSTNAME_CHANGED
, triggered upon hostname change.Refactored net_context option getters/setters to reduce code duplication.
Fixed a possible packet leak at the ARP level, in case of errors during ARP packet creation.
Added support for analyzing SNTP time uncertainty.
Fixed network interface being brought up even when underlying device is not ready.
Added start/stop functions for dummy interfaces.
Added a detailed network configuration guide to the documentation.
Added
CONFIG_NET_HOSTNAME_DYNAMIC
option, which allows to enable setting hostname at runtime.
MQTT-SN:
Added
mqtt_sn_get_topic_name()
API function.Fixed handling of incoming Register messages when wildcard subscription is used.
OpenThread:
Implemented the following OpenThread platform APIs:
otPlatRadioSetRxOnWhenIdle()
otPlatResetToBootloader()
otPlatCryptoPbkdf2GenerateKey()
Updated OpenThread platform UART driver so that it no longer waits for communication with a host to start during boot.
Added BLE TCAT implementation in OpenThread platform.
Updated Crypto PSA backend for OpenThread with additional algorithms.
Fixed
otPlatAssertFail()
so that it prints the location of the actual assert instead of the function itself.
PPP:
Fixed PPP connection termination when interface goes down.
Shell:
Refactored networking shell module so that instead of large single file, it is split into submodules, on a per command basis.
Fixed unexpected timeout message when executing loopback ping.
Added
net sockets
command to print information about open sockets and socket services.Join IPv4/IPv6 multicast groups, if needed, when adding IPv4/IPv6 multicast addresses via shell.
Fixed
tcp connect
command operation (TCP context released prematurely).Added support for Echo option in telnet shell backend.
Fixed unnecessary connection close in telnet shell backend in case of non-fatal EAGAIN or ENOBUFS errors.
Fixed double packet dereference in ping reply handler.
Fixed possible deadlock when executing
net arp
command.Added more detailed Ethernet statistics printout for
net stats
command.Added
net dhcpv4 server
commands for DHCPv4 server management.Added shell module to manage TLS credentials.
Sockets:
Added support for v4-mapping-to-v6, which allows IPv4 and IPv6 to share the same port space.
Added support for
IPV6_V6ONLY
socket option.Added support for
SO_ERROR
socket option.Fixed
select()
not settingwritefds
in case of errors.Added support for object core, which allows to track networks sockets and their statistics.
Added support for
recvmsg()
.Added support for
IP_PKTINFO
andIPV6_RECVPKTINFO
socket options.Added support for
IP_TTL
socket option.Added support for IPv4 multicast
IP_ADD_MEMBERSHIP
andIP_DROP_MEMBERSHIP
socket options.Added support for IPv6 multicast
IPV6_ADD_MEMBERSHIP
andIPV6_DROP_MEMBERSHIP
socket options.Improved doxygen documentation of BSD socket API.
Fixed POLLERR error reporting in TLS sockets.
Fixed DTLS handshake processing during
poll()
.Aligned DTLS socket
connect()
behavior with regular TLS (handshake during connect call).Added Socket Service library, which allows registering multiple socket-based network services and processing them within a single thread.
Added a new
echo_service
sample for Socket Service.Added support for
SO_DOMAIN
socket option.Fixed DTLS connection timeout when monitoring socket with
poll()
.Fixed NULL link layer address pointer dereference on packet socket, in case of packet loopback.
Several other minor bugfixes and improvements.
TCP:
TCP stack now replies with RST packet in response to connection attempt on a closed port.
Fixed remote address passed in
accept()
call.Fixed reference counting during active handshake to prevent TCP context being released prematurely.
Fixed compilation with
CONFIG_NET_TCP_CONGESTION_AVOIDANCE
disabled.Reworked TCP data queueing API to prevent TCP stack from overflowing TX window.
Fixed possible race condition between TCP workqueue and other threads when releasing TCP context.
Fixed possible race condition between input thread and TCP workqueue.
Added support for TCP Keep-Alive feature.
Fixed a bug where TCP state machine could get stuck in LAST_ACK state during passive connection close.
Fixed a bug where TCP state machine could get stuck in FIN_WAIT_1 state in case peer did not respond.
Several other minor bugfixes ans improvements.
TFTP:
Fixed potential buffer overflow when copying TFTP error message.
Improved logging in case of errors.
Wi-Fi:
Added Wi-Fi driver version information to Wi-Fi shell.
Added AP (Access Point) mode support to Wi-Fi shell.
Added Regulatory channel information.
Added Wi-Fi bindings to connection manager.
Fixed Wi-Fi shell. SSID print fixes. Help text fixes. Channel validation fixes.
Fixed TWT functionality. Teardown status was not updated. Powersave fixes.
zperf:
Improved IP address binding. Zperf will now bind to any address by default and allow to override this with Kconfig/API provided address.
Fixed TCP packet counting when transmitting.
Refactored UDP/TCP received to use Socket Service to save memory.
Fixed zperf session leak on interrupted downloads.
Fixed the calculation ratio between Mbps, Kbps and bps.
The zperf sample now supports relocating network code to RAM.
USB
Device support:
Introduced new USB Audio 2 implementation that uses devicetree for instantiation, hiding descriptor complexity from the application. The initial implementation is limited to full speed only and provides the absolute minimum set of features required for basic implicit and explicit feedback. Interrupt notification is not supported.
Added support for SetFeature(TEST_MODE).
Devicetree
Bindings
Introduced new SPI properties
spi-cpol
,spi-cpha
, andspi-hold-cs
to be used by the macroSPI_CONFIG_DT
in order to set SPI mode in a Devicetree file.
Libraries / Subsystems
Management
Fixed an issue in MCUmgr image management whereby erasing an already erased slot would return an unknown error. It now returns success.
Fixed MCUmgr UDP transport structs being statically initialised. This results in about a ~5KiB flash saving.
Fixed an issue in MCUmgr which would cause a user data buffer overflow if the UDP transport was enabled on IPv4 only but IPv6 support was enabled in the kernel.
Implemented datetime functionality in MCUmgr OS management group. This makes use of the RTC driver API.
Fixed an issue in MCUmgr console UART input whereby the FIFO would be read outside of an ISR, which is not supported in the next USB stack.
Fixed an issue whereby the
mcuboot erase
DFU shell command could be used to erase the MCUboot or currently running application slot.Fixed an issue whereby messages that were too large to be sent over the UDP transport would wrongly return
MGMT_ERR_EINVAL
instead ofMGMT_ERR_EMSGSIZE
.Fixed an issue where confirming an image in Direct XIP mode would always confirm the image in the primary slot even when executing from the secondary slot. Now the currently active image is always confirmed.
Added support for retrieving registered command groups, to support registering and deregistering default command groups at runtime, allowing an application to support multiple implementations for the same command group.
Fixed an issue in MCUmgr FS management whereby the semaphore lock would not be given if an error was returned, leading to a possible deadlock.
Added support for custom payload MCUmgr handlers. This can be enabled with
CONFIG_MCUMGR_MGMT_CUSTOM_PAYLOAD
.Fixed an issue in MCUmgr image management whereby an error would be returned if a command was sent to erase the slot which was already erased.
Added support for image slot size checking to ensure an update can be utilised by MCUboot. This can be performed by using sysbuild when building both application and MCUboot by enabling
CONFIG_MCUMGR_GRP_IMG_TOO_LARGE_SYSBUILD
or by use of bootloader information sharing from MCUboot by enablingCONFIG_MCUMGR_GRP_IMG_TOO_LARGE_BOOTLOADER_INFO
.
Logging
Added an option to remove string literals from the binary when dictionary-based logging is used.
Optimized the most common logging messages (strings with up to 2 numeric arguments). Optimization is done for code size (significant gain seen on riscv32) and performance.
Extended logging frontend API to optionally implement dedicated functions for optimized messages. Optional API is enabled by
CONFIG_LOG_FRONTEND_OPT_API
.Added support for runtime message filtering for the logging frontend.
Added option to support multiple instances of the UART logging backend.
Fixed userspace issue for
printk()
whenCONFIG_LOG_PRINTK
is enabled.Added compile time detection of logging messages that use character pointers for
%p
. It must be avoided when dictionary-based logging is used and strings are stripped from the binary. When an erroneous case is detected, the user message is replaced with an error message that suggests pointer casting must be added.Removed remaining references to v2 logging. Renamed
log2_generic()
tolog_generic()
.
Modem modules
Added
TRANSMIT_IDLE
event to themodem_pipe
module which notifies the user of the pipe that the backend has transmitted all bytes placed in its buffer usingmodem_pipe_transmit()
. The event greatly increases the efficiency of transmitting large quantities of data if used to dynamically manage the delay between calls tomodem_pipe_transmit()
.Implemented
TRANSMIT_IDLE
event in all modem backends.Extended all modem modules to utilize the
TRANSMIT_IDLE
event to dynamically manage the delay between calls tomodem_pipe_transmit()
. This addition reduced the utilization of the system workqueue while transmitting large, continuous quantities of data, by 86%, while only reducing the throughput by 12%. This optimization additionally allows lower priority threads, like the deferred logging thread, to run during the transmission (it was blocked by the relentless, continuous calls tomodem_pipe_transmit()
).Improved
modem_pipe
event dispatching. Themodem_pipe
module now invokes theRECEIVE_READY
event every time the pipe is attached usingmodem_pipe_attach()
if it has data ready to be read, and always invokesTRANSMIT_IDLE
when the pipe is either opened or attached. This ensures event driven users of the modem pipe module can rely solely on the events to start read/transmit work. A test suite has been added to complement the improvements.Extended
modem_cmux
module to support acting both as DTE (user application) and DCE (modem). With this addition, two Zephyr applications can communicate with each other through their respectivemodem_cmux
instances.
Picolibc
Updated to version 1.8.6. This removes the
_POSIX_C_SOURCE
definition from the build system, so applications will need to add this if they use APIs outside of the Zephyr requirements.Added new
printf()
modes,CONFIG_PICOLIBC_IO_LONG_LONG
andCONFIG_PICOLIBC_IO_MINIMAL
. These provide applications with finer grained control over the level of support provided by the library to control text space usage. By default, the correct level of support is selected based upon other configuration parameters.Added
CONFIG_PICOLIBC_ASSERT_VERBOSE
. This option, which is false by default, controls whether theassert()
function displays verbose information, including the file name, line number, function name and failing expression text, when the assertion fails. Leaving this disabled saves text space.CONFIG_THREAD_LOCAL_STORAGE
can now be disabled while using Picolibc. This is very helpful in diagnosing issues when using Picolibc as those are often caused by enabling TLS and not caused by using the library itself.Numerous improvements in the library including code-size reductions in areas like printf and ctype and various fixes in the math library.
Power management
Introduced Atmel SAM SUPC functions to allow wakeup sources and poweroff.
STM32F4 devices now support stop mode thanks to the use of a RTC based idle timer which keeps track of tick evolution while cortex systick is off.
pm_device_runtime_put_async()
got a parameter to specify a minimum delay to the operation. This is useful to avoid multiple states transitions when a device is used.Devices that don’t need to block when suspending or resuming can now be defined as ISR safe (
PM_DEVICE_ISR_SAFE
). For those devices, Zephyr is able to reduce RAM consumption and runtime device power management can be safely used from interrupts.Optimizations in device runtime power management.
pm_device_runtime_get()
andpm_device_runtime_put()
no longer wait for a pending operation to be concluded if it is still in the work queue. In this case, the pending work is just canceled and the device state updated.The Kconfig options below were added to customize the initialization priority of different power domains.
Crypto
Mbed TLS updated to 3.5.2. Full release notes can be found in: https://github.com/Mbed-TLS/mbedtls/releases/tag/v3.5.2
Retention
Fixed issue whereby
CONFIG_RETENTION_BUFFER_SIZE
values over 256 would cause an infinite loop due to use of 8-bit variables.
SD
Added support for SDIO devices.
Storage
File systems: LittleFS module has been updated to version 2.8.1.
Following Flash Map API macros, marked in 3.2 as deprecated, have been removed:
FLASH_AREA_ID
,FLASH_AREA_OFFSET
,FLASH_AREA_SIZE
,FLASH_AREA_LABEL_EXISTS
andFLASH_AREA_DEVICE
.
POSIX API
Completed support for
POSIX_THREADS_EXT
,XSI_THREADS_EXT
,POSIX_CLOCK_SELECTION
, andPOSIX_SEMAPHORES
Option Groups.Completed support for
_POSIX_MESSAGE_PASSING
and_POSIX_PRIORITY_SCHEDULING
Options.Fixed Coverity-CID 211585, 334906, 334909, and 340851.
Improved structure and accuracy of POSIX documentation.
Improved navigation and organization of POSIX Kconfig options.
Added support to allocate and free stacks up to 8 MB with pthread_attr_t.
Added support for deferred and asynchronous thread cancellation.
Added dining philosophers sample application.
Added support for named semaphores.
Added a top-level
posix
command in the Zephyr shell. Zephyr shell utilities for the POSIX API can be added as subcommands (e.g.posix uname -a
)Added support for async thread cancellation and
SIGEV_THREAD
,CLOCK_REALTIME
.Added compile-time-constant sysconf() implementation.
LoRa/LoRaWAN
Added LoRaWAN remote multicast support with
CONFIG_LORAWAN_REMOTE_MULTICAST
in preparation for OTA firmware upgrade support.
ZBus
Replaced mutexes with semaphores to lock channels and implement the Highest Locker Protocol (HLP) priority boost for the zbus operations. This feature avoids priority inversions and preemptions, making the VDED delivery process faster and more consistent. (GitHub #63183)
Fixed documentation for
zbus_chan_add()
andzbus_chan_rm()
adding the timeout argument. (GitHub #65544)Fixed warning when mixing C and C++ files using zbus. (GitHub #65222)
ZBUS_CHANNEL_DEFINE
macro is now compatible with C++. (GitHub #65196)Fixed parameter order of net buf pool fixed definition. (GitHub #65039)
Refactored the benchmark sample, adding message subscribers. (GitHub #64524)
Renamed
CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_DYNAMIC
andCONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC
toCONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC
andCONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC
. (GitHub #65632)
HALs
STM32
Updated STM32F1 to cube version V1.8.5.
Updated STM32F7 to cube version V1.17.1.
Updated STM32H7 to cube version V1.11.1.
Updated STM32L4 to cube version V1.18.0.
Updated STM32U5 to cube version V1.4.0.
Updated STM32WBA to cube version V1.2.0.
Updated STM32WB to cube version V1.18.0.
MCUboot
Fixed compatible sector checking in bootutil.
Fixed Kconfig issue with saving encrypted TLVs not depending on encryption being enabled.
Fixed issue with missing condition check for applications in sysflash include file.
Fixed issue with single slot encrypted image listing support in boot_serial.
Fixed issue with allowing MBEDTLS Kconfig selection when tinycrypt is used.
Fixed missing response if echo command was disabled in boot_serial.
Fixed issue with USB configurations not generating usable images.
Added debug logging for boot status write in bootutil.
Added estimated image overhead size to cache in sysbuild.
Added firmware loader operating mode which allows for a dedicated secondary slot image that is used to update the primary image.
Added error if main thread is not pre-emptible when USB CDC serial recovery is enabled.
Added error if USB CDC and console are both enabled and set to the same device.
Removed the deprecated
CONFIG_ZEPHYR_TRY_MASS_ERASE
Kconfig option.Updated zcbor to version 0.8.1 and re-generated boot_serial files.
Moved IO functions out of main to separate file.
Made
align
parameter of imgtool optional.Added MCUBoot support for
mimxrt1010_evk
,mimxrt1015_evk
,mimxrt1040_evk
,lpcxpresso55s06
,lpcxpresso55s16
,lpcxpresso55s28
,lpcxpresso55s36
,lpcxpresso55s69_cpu0
.Added
CONFIG_MCUBOOT_IMGTOOL_OVERWRITE_ONLY
which passes the –overwrite-only option to imgtool to avoid adding the swap status area size when calculating overflow. It is used by non-swap update modes.The MCUboot version in this release is version
2.1.0+0-dev
.
zcbor
zcbor has been updated from 0.7.0 to 0.8.1. Full release notes can be found at: https://github.com/zephyrproject-rtos/zcbor/blob/0.8.0/RELEASE_NOTES.md and https://github.com/zephyrproject-rtos/zcbor/blob/0.8.1/RELEASE_NOTES.md
Highlights:
Addded support for unordered maps.
Performance improvements.
Naming improvements for generated code.
Bugfixes.
LVGL
LVGL has been updated from 8.3.7 to 8.3.11. Detailed release notes can be found at: https://github.com/zephyrproject-rtos/lvgl/blob/zephyr/docs/CHANGELOG.md
Additionally, the following changes in Zephyr were done:
Added the
zephyr,lvgl-keypad-input
compatible for keypad input.Fixed issue with the Zephyr log levels not mapping properly to LVGL log levels.
Fixed issue where setting
CONFIG_LV_Z_FULL_REFRESH
did not setCONFIG_LV_Z_VDB_SIZE
to 100 percent.
Tests and Samples
native_sim has replaced native_posix as the default test platform. native_posix remains supported and used in testing but will be deprecated in a future release.
Bluetooth split stacks tests, where the BT host and controller are run in separate MCUs, are now run in CI based on the nrf5340_bsim targets. Several other runtime AMP tests based on these targets have been added to CI, including tests of OpenAMP, the mbox and IPC drivers/subsystem, and the logger multidomain functionality.
Runtime UART tests have been added to CI based on the nrf52_bsim target. These include tests of the nRFx UART driver and networked BT stack tests with the host and controller in separate devices communicating over the HCI UART driver.
Fixed an issue in SMP server sample whereby if USB was already initialised, application would fail to boot properly.
Added an LVGL sample LVGL line chart with accelerometer data showcasing displaying of live sensor data in a chart widget.
Added ESP32-S3 IPM support in IPM on ESP32.
Added ESP32 memory-mapped flash access sample in Memory-Mapped Flash.
Added ESP32 PWM loopback test case.
Added support in the mbox sample for NXP boards
MIMXRT1160-EVK
,MIMXRT1170-EVK
,MIMXRT1170-EVKB
,LPCXpresso55S69
.Added a sample
flexram-magic-addr
formimxrt11xx_cm7
to show how to use flexram magic address functionality when using memc flexram driver.