doc/releases/release-notes-3.6.rst
:orphan:
.. _zephyr_3.6:
Zephyr 3.6.0 ############
We are pleased to announce the release of Zephyr version 3.6.0.
Major enhancements with this release include:
GNSS subsystem <gnss_api> added, enabling geo-awareness in Zephyr applications.keyboard matrices <gpio-kbd>.native simulator <native_sim>,
clarifying supported peripherals and how to use them.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 :ref:migration guide<migration_3.6>.
The following sections provide detailed lists of changes by component.
Security Vulnerability Related
The following CVEs are addressed by this release:
More detailed information can be found in: https://docs.zephyrproject.org/latest/security/vulnerabilities.html
CVE-2023-5779 Zephyr project bug tracker GHSA-7cmj-963q-jj47 <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-7cmj-963q-jj47>_
CVE-2023-6249 Zephyr project bug tracker GHSA-32f5-3p9h-2rqc <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-32f5-3p9h-2rqc>_
CVE-2023-6749 Zephyr project bug tracker GHSA-757h-rw37-66hw <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-757h-rw37-66hw>_
CVE-2023-6881 Zephyr project bug tracker GHSA-mh67-4h3q-p437 <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-mh67-4h3q-p437>_
CVE-2023-7060: Under embargo until 2024-03-14
CVE-2024-1638 Zephyr project bug tracker GHSA-p6f3-f63q-5mc2 <https://github.com/zephyrproject-rtos/zephyr/security/advisories/GHSA-p6f3-f63q-5mc2>_
Architectures
ARC
ARM
arch_secondary_cpu_init to provide consistency
across all architectures.z_arm_prep_c as :c:func:z_prep_c to provide
consistency across all architectures.CONFIG_ARM_CUSTOM_INTERRUPT_CONTROLLER.z_prep_c for Cortex-A and
Cortex-R to enable initialization by individual cores.arch/arm/core/mpu.Xtensa
Removed the unused Kconfig option CONFIG_XTENSA_NO_IPC.
Added userspace support via MMU.
Bluetooth
Audio
bt_bap_scan_delegator_subgroup to :c:struct:bt_bap_bass_subgroup and
made it independent of :kconfig:option:CONFIG_BT_BAP_SCAN_DELEGATOR.bt_bap_stream_send to no longer take a timestamp as parameter,
and added :c:func:bt_bap_stream_send_ts that does.bt_cap_stream_send to no longer take a timestamp as parameter,
and added :c:func:bt_cap_stream_send_ts that does.include/zephyr/bluetooth/audio/lc3.h to
:file:include/zephyr/bluetooth/audio/audio.h and the LC3 infix have been removed.bt_csip_set_member_unregister to unregister a CSIS instance.bt_pacs_set_available_contexts_for_conn to set available context per connection.bt_bap_base to be an abstract struct with new helper functions,
so that Zephyr supports all BASEs regardless of the size.Host
recycled() callback to :c:struct:bt_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.bt_iso_chan_send to no longer take a timestamp as parameter,
and added :c:func:bt_iso_chan_send_ts that does.Mesh
CONFIG_BT_MESH_ACCESS_DELAYABLE_MSG
Kconfig option.Controller
HCI Driver
st,hci-spi-v1 and
:dtcompatible:st,hci-spi-v2 were introduced.Boards & SoC Support
Added support for these SoC series:
Made these changes in other SoC series:
CONFIG_XIP instead of selecting it. This allows for
creating RAM-based applications by disabling it.Added support for these ARM boards:
adafruit_qt_py_rp2040.fk7b0m1_vbt6.rcar_spider_cr52.nucleo_f722ze.stm32h750b_dk.stm32l4r9i_disco.stm32u5a9j_dk.nucleo_wba55cg.stm32wb5mm_dk.w5500_evb_pico.adi_sdp_k1, adi_eval_adin1110ebz,
adi_eval_adin2111ebz.ucans32k1sic.Added support for this RISC-V board:
ttgo_t8c3.Added support for these Xtensa boards:
nxp_adsp_imx8ulp.heltec_wireless_stick_lite_v3.kincony_kc868_a32.esp32s2_lolin_mini.ttgo_lora32.m5stack_atoms3.m5stack_atoms3_lite.m5stack_stamps3.Made these changes for ARM boards:
mimx93_evk_a55.lpcxpresso55s69 to use the standard slot
naming used by TFM-enabled Zephyr platforms.frdm_kl25z, mimxrt1015_evk,
mimxrt1020_evk, mimxrt1050_evk, mimxrt685_evk, frdm_k64f.Made these changes for RISC-V boards:
longan_nano.Made these changes for native/POSIX boards:
The :ref:simulated nrf5340 targets<nrf5340bsim> 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 :ref:nrf52_bsim<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:
m5stack_core2_ext.mikroe_accel13_click.waveshare_pico_ups_b.x_nucleo_bnrg2a1.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 OptimizationCurrently 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 and POST_IMAGE_CMAKE hooks to sysbuild modules, which allows for
modules to run code after and before each image's cmake invocation.
Added :kconfig:option: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 :kconfig:option: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
:ref:west-extending-signing 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
:ref:application-file-suffixes and :ref:sysbuild_file_suffixes 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
Auxiliary Display
Audio
drivers/audio/dmic_mcux.c for NXP DMIC peripheral. This peripheral is
present on the iMX RT5xx and iMX RT6xx parts, as well as some LPC SOCs.Battery backed up RAM
CAN
Added system call :c:func:can_get_mode() for getting the current operation mode of a CAN
controller.
Add system call :c:func: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:
microchip,mcp2515espressif,esp32-twaikvaser,pcicanAdded CAN controller driver for the Nuvoton NuMaker series
(:dtcompatible:nuvoton,numaker-canfd).
Added CAN controller driver for the Infineon XMC4xxx family
(:dtcompatible:infineon,xmc4xxx-can and :dtcompatible:infineon,xmc4xxx-can-node).
Added support for the NXP S32K1xx family to the :dtcompatible:nxp,flexcan driver.
All Bosch M_CAN-based front-end drivers now use named IRQs, "int0" and "int1".
The :dtcompatible:zephyr,native-linux-can driver now supports being built with embedded C
libraries.
Added support for setting "raw" timing values from the :ref:CAN shell <can_shell>.
Clock control
CONFIG_CLOCK_CONTROL_RA to :kconfig:option:CONFIG_CLOCK_CONTROL_RENESAS_RA.st,stm32-hse-clock now allows setting a css-enabled
property which enables HSE clock security system (CSS).Counter
Crypto
Display
DMA
drivers/dma/dma_nxp_edma.c for NXP's eDMA IP.Entropy
seed-random.
When used, the random generator will be seeded from /dev/urandomEthernet
drivers/ethernet/eth_nxp_enet.c for NXP ENET which is a rework of
the old driver :file:drivers/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 in spi_nor_wait_until_ready. If this is not
desired (For example due to ROM constraints in a bootloader),
:kconfig:option: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 with
:kconfig:option:CONFIG_NORDIC_QSPI_NOR_TIMEOUT_MS.
GNSS
Added GNSS device driver API and subsystem for parsing and publishing location,
datetime, and satellite information, enabled by
:kconfig:option:CONFIG_GNSS and :kconfig:option:CONFIG_GNSS_SATELLITES.
The GNSS subsystem and device drivers are based on the :ref:modem subsystem,
using the modem_pipe module, modem backends, and modem_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
:kconfig:option:CONFIG_GNSS_PARSE.
Added NMEA0183 parsing utilities, enabled by
:kconfig:option:CONFIG_GNSS_NMEA0183.
Added extensive GNSS data logging, enabled by
:kconfig:option:CONFIG_GNSS_DUMP_TO_LOG.
Added generic NMEA0183 over UART based modem device driver, matching the
devicetree compatible :dtcompatible:gnss-nmea-generic.
Added fully featured device driver for the Quectel LCX6G series GNSS modems,
matching the devicetree compatibles :dtcompatible:quectel,lc26g,
:dtcompatible:quectel,lc76g and :dtcompatible:quectel,lc86g.
GPIO
CONFIG_GPIO_RA to :kconfig:option:CONFIG_GPIO_RENESAS_RA.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
I3C
The Legacy Virtual Register defines have been renamed from I3C_DCR_I2C_*
to I3C_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
:c:func:i3c_addr_slots_next_free_find.
Added a field named num_xfer in :c:struct:i3c_msg and
:c:struct:i3c_ccc_taget_payload as an output to indicate the actual
number of bytes transferred.
Cadence I3C driver (:file: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 (:file: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 to
:dtcompatible:nxp,mcux-i3c, which allows alternative high time for
open-drain clock.
IEEE 802.15.4
CONFIG_IEEE802154_SELECTIVE_TXPOWER Kconfig option.Input
short-codes property of :dtcompatible:zephyr,input-longpress is
now optional. The node can be used by specifying only input and long codes.gpio-kbd-matrix and :dtcompatible:input-keymap drivers.
See :ref:gpio-kbd for more details.input_to_hid_code and :c:func:input_to_hid_modifier.gpio-keys
:dtcompatible:focaltech,ft5336.zephyr,native-linux-evdev device node for getting
input events from a Linux evdev device node.gpio-qdec.analog-axis.espressif,esp32-touch.MDIO
MFD
maxim,max20335.adi,ad5592.nordic,npm1300 and
:dtcompatible:nordic,npm6001.PCIE
Fixed MMIO size calculation by disabling IO/memory decoding beforehand.
Modified to use PNP ID for PRT retrieval.
MEMC
MIPI-DBI
MIPI DBI driver class <mipi_dbi_api>.Pin control
CONFIG_PINCTRL_RA to :kconfig:option:CONFIG_PINCTRL_RENESAS_RA.CONFIG_PM enabled and :kconfig:option:CONFIG_DEBUG disabled.PWM
Regulators
Added new API functions
regulator_set_active_dischargeregulator_get_active_dischargeregulator_list_current_limitstartup-delay-us and off-on-delay-us are now supported for all regulators.
Added non-multithreading support.
Added support for :dtcompatible:maxim,max20335-regulator.
Added ASYS UVLO configuration for :dtcompatible:nxp,pca9420.
Added LDO/DCDC support for :dtcompatible:renesas,smartbond-regulator.
Added LDO soft start configuration for :dtcompatible:nordic,npm1300-regulator.
Fixed init priority for :dtcompatible:x-powers,axp192-regulator.
Fixed LDO GPIO control for :dtcompatible:nordic,npm1300-regulator.
Retained memory
Retained memory driver backend for registers was added.
Retained memory API status was changed from experimental to unstable.
RTC
SMBUS:
SDHC
Sensor
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 (:file:drivers/serial/uart_emul.c):
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
fifo-enable property allows using SPI block FIFO. This
feature is still experimental and requires maturation.USB
crs-usb-sof in clk_hsi48 node enables support
for Clock Recovery System, allowing a more stable HSI48 clock and hence resilient USB
connection.W1
zephyr,w1-gpio
devicetree binding for more information.Wi-Fi
Networking
CoAP:
Added support for Echo and Request-Tag CoAP options (RFC 9175).
Changed :c:func: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 :c:func:coap_packet_remove_option.
Added CoAP observer/service network events using the Network Event subsystem.
Changed :c:func:coap_pending_init API function to take
:c:struct:coap_transmission_parameters instead of retry count.
Added new API functions:
coap_get_transmission_parameterscoap_set_transmission_parameterscoap_handle_request_lencoap_well_known_core_get_lencoap_uri_path_matchcoap_packet_is_requestcoap_find_observercoap_find_observer_by_tokencoap_pendings_countcoap_header_set_codeConnection Manager:
DHCP:
subsys/net/lib/dhcpv4.subsys/net/lib/dhcpv6 to align with DHCPv4.DNS:
mdns_responder sample.CONFIG_DNS_RESOLVER_AUTO_INIT which allows to disable
automatic initialization of the default DNS context on boot.Ethernet:
gPTP:
ICMP:
IP:
setsockopt API.net_pkt structure
for offloaded interfaces. This allows for :c:func:recvfrom to return a
valid address in offloaded case.LwM2M:
CONFIG_LWM2M_UPDATE_PERIOD which configures the LwM2M
Update period regardless of the lifetime value.set_socket_state() callback.Misc:
NET_MGMT_REGISTER_EVENT_HANDLER.CONFIG_NET_MGMT_EVENT_WORKER choice to
allow emitting network events using the system work queue or synchronously.eth_native_posix sample.arb and fv2015 fields from
struct net_pkt_cb_ieee802154.NET_EVENT_HOSTNAME_CHANGED, triggered upon
hostname change.network configuration <network_configuration_guide>
guide to the documentation.CONFIG_NET_HOSTNAME_DYNAMIC option, which allows to
enable setting hostname at runtime.MQTT-SN:
mqtt_sn_get_topic_name API function.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:
Shell:
net sockets command to print information about open sockets and
socket services.tcp connect command operation (TCP context released prematurely).net arp command.net stats command.net dhcpv4 server commands for DHCPv4 server management.Sockets:
IPV6_V6ONLY socket option.SO_ERROR socket option.select not setting writefds in case of errors.recvmsg.IP_PKTINFO and :c:macro:IPV6_RECVPKTINFO
socket options.IP_TTL socket option.IP_ADD_MEMBERSHIP and
:c:macro:IP_DROP_MEMBERSHIP socket options.IPV6_ADD_MEMBERSHIP and
:c:macro:IPV6_DROP_MEMBERSHIP socket options.poll.connect behavior with regular TLS (handshake
during connect call).echo_service sample for Socket Service.SO_DOMAIN socket option.poll.TCP:
accept call.CONFIG_NET_TCP_CONGESTION_AVOIDANCE
disabled.TFTP:
Wi-Fi:
zperf:
USB
Device support:
Devicetree
spi-cpol, spi-cpha, and spi-hold-cs to be used by
the macro :c:macro:SPI_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 :c:enumerator:MGMT_ERR_EINVAL instead of :c:enumerator:MGMT_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
:kconfig:option: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
:kconfig:option:CONFIG_MCUMGR_GRP_IMG_TOO_LARGE_SYSBUILD or by use of bootloader information
sharing from MCUboot by enabling
:kconfig:option:CONFIG_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 :kconfig:option: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 :c:func:printk when :kconfig:option:CONFIG_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 :c:func:log2_generic to :c:func:log_generic.
Modem modules
Added TRANSMIT_IDLE event to the modem_pipe module which notifies the user of the pipe
that the backend has transmitted all bytes placed in its buffer using
:c:func:modem_pipe_transmit().
The event greatly increases the efficiency of transmitting large quantities of data if used to
dynamically manage the delay between calls to :c:func:modem_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 to :c:func:modem_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 to :c:func:modem_pipe_transmit()).
Improved modem_pipe event dispatching. The modem_pipe module now invokes the
RECEIVE_READY event every time the pipe is attached using :c:func:modem_pipe_attach()
if it has data ready to be read, and always invokes TRANSMIT_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
respective modem_cmux instances.
Picolibc
Updated to version 1.8.6. This removes the :c:macro:_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 :c:func:printf modes, :kconfig:option:CONFIG_PICOLIBC_IO_LONG_LONG and
:kconfig:option:CONFIG_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 :kconfig:option:CONFIG_PICOLIBC_ASSERT_VERBOSE. This option, which is false by default,
controls whether the :c:func:assert 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.
:kconfig:option: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.
:c:func: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. :c:func:pm_device_runtime_get and
:c:func:pm_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.
CONFIG_POWER_DOMAIN_GPIO_INIT_PRIORITYCONFIG_POWER_DOMAIN_GPIO_MONITOR_INIT_PRIORITYCONFIG_POWER_DOMAIN_INTEL_ADSP_INIT_PRIORITYCrypto
Retention
CONFIG_RETENTION_BUFFER_SIZE values over 256 would cause
an infinite loop due to use of 8-bit variables.SD
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 and FLASH_AREA_DEVICE.
POSIX API
Completed support for POSIX_THREADS_EXT, XSI_THREADS_EXT,
POSIX_CLOCK_SELECTION, and POSIX_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 :kconfig:option: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 :c:func:zbus_chan_add and :c:func:zbus_chan_rm adding the timeout
argument. (:github:65544)
Fixed warning when mixing C and C++ files using zbus. (:github:65222)
:c:macro: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 and
CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC to
:kconfig:option:CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC and
:kconfig:option:CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC. (:github:65632)
HALs
STM32
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 :kconfig:option: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:
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 :dtcompatible: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 :kconfig:option:CONFIG_LV_Z_FULL_REFRESH did not
set :kconfig:option:CONFIG_LV_Z_VDB_SIZE to 100 percent.
Tests and Samples
:zephyr:board:native_sim<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 :ref:nrf5340_bsim<nrf5340bsim> 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 :ref:nrf52_bsim<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 :zephyr:code-sample:smp-svr sample whereby if USB was already initialised,
application would fail to boot properly.
Added an LVGL sample :zephyr:code-sample:lvgl-accelerometer-chart showcasing displaying of live
sensor data in a chart widget.
Added ESP32-S3 IPM support in :zephyr:code-sample:ipm-esp32.
Added ESP32 memory-mapped flash access sample in :zephyr:code-sample:esp32-flash-memory-mapped.
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 for mimxrt11xx_cm7 to show how to use flexram magic
address functionality when using memc flexram driver.