Zephyr 3.7.0 (Working Draft)
We are pleased to announce the release of Zephyr version 3.7.0.
Major enhancements with this release include:
A new, completely overhauled hardware model has been introduced. This changes the way both SoCs and boards are named, defined and constructed in Zephyr. Additional information can be found in the Board Porting Guide.
Zephyr now requires Python 3.10 or higher
Trusted Firmware-M (TF-M) 2.1.0 and Mbed TLS 3.6.0 have been integrated into Zephyr. Both of these versions are LTS releases.
An overview of the changes required or recommended when migrating your application from Zephyr v3.6.0 to Zephyr v3.7.0 can be found in the separate migration guide.
The following sections provide detailed lists of changes by component.
API Changes
Removed APIs in this release
The Bluetooth subsystem specific debug symbols are removed. They have been replaced with the Zephyr logging ones.
Removed deprecated
pcie_probe
andpcie_bdf_lookup
functions from the PCIe APIs.
Deprecated in this release
Bluetooth advertiser options
BT_LE_ADV_OPT_USE_NAME
andBT_LE_ADV_OPT_FORCE_NAME_IN_AD
are now deprecated. That means the following macro are deprecated:Application developer will now need to set the advertised name themselves by updating the advertising data or the scan response data.
POSIX API
Deprecated
PTHREAD_BARRIER_DEFINE
has been removed.Deprecated
EFD_IN_USE
andEFD_FLAGS_SET
have been removed.In efforts to use Kconfig options that map directly to the Options and Option Groups in IEEE 1003.1-2017, the following Kconfig options have been deprecated (replaced by):
CONFIG_POSIX_CLOCK
(CONFIG_POSIX_CLOCK_SELECTION
,CONFIG_POSIX_CPUTIME
,CONFIG_POSIX_MONOTONIC_CLOCK
,CONFIG_POSIX_TIMERS
, andCONFIG_POSIX_TIMEOUTS
)
CONFIG_POSIX_MAX_FDS
(CONFIG_POSIX_OPEN_MAX
andCONFIG_ZVFS_OPEN_MAX
)
CONFIG_POSIX_MAX_OPEN_FILES
(CONFIG_POSIX_OPEN_MAX
andCONFIG_ZVFS_OPEN_MAX
)Please see the POSIX API migration guide.
SPI
Deprecated
spi_is_ready()
API function has been removed.Deprecated
spi_transceive_async()
API function has been removed.Deprecated
spi_read_async()
API function has been removed.Deprecated
spi_write_async()
API function has been removed.
Architectures
ARC
ARM
ARM64
Implemented symbol names in the backtraces, enable by selecting
CONFIG_SYMTAB
RISC-V
The fatal error message triggered from a fault now contains the callee-saved-registers states.
Implemented stack unwinding
Frame-pointer can be selected to enable precise stack traces at the expense of slightly increased size and decreased speed.
Symbol names can be enabled by selecting
CONFIG_EXCEPTION_STACK_TRACE_SYMTAB
Xtensa
Kernel
Added
k_uptime_seconds()
function to simplify k_uptime_get() / 1000 usage.Added
k_realloc()
, that uses kernel heap to implement traditionalrealloc()
semantics.
Bluetooth
Audio
Removed
err
frombt_bap_broadcast_assistant_cb.recv_state_removed
as it was redundant.The broadcast_audio_assistant sample has been renamed to bap_broadcast_assistant. The broadcast_audio_sink sample has been renamed to bap_broadcast_sink. The broadcast_audio_source sample has been renamed to bap_broadcast_source. The unicast_audio_client sample has been renamed to bap_unicast_client. The unicast_audio_server sample has been renamed to bap_unicast_server. The public_broadcast_sink sample has been renamed to pbp_public_broadcast_sink. The public_broadcast_source sample has been renamed to pbp_public_broadcast_source.
The CAP Commander and CAP Initiator now no longer require CAS to be discovered for
BT_CAP_SET_TYPE_AD_HOC
sets. This allows applications to use these APIs on e.g. BAP Unicast Servers that do not implement the CAP Acceptor role.
Host
Added Nordic UART Service (NUS), enabled by the
CONFIG_BT_ZEPHYR_NUS
. This Service exposes the ability to declare multiple instances of the GATT service, allowing multiple serial endpoints to be used for different purposes.Implemented Hands-free Audio Gateway (AG), enabled by the
CONFIG_BT_HFP_AG
. It works as a device that is the gateway of the audio. Typical device acting as Audio Gateway is cellular phone. It controls the device (Hands-free Unit), that is the remote audio input and output mechanism.Implemented Advanced Audio Distribution Profile (A2DP) and Audio/Video Distribution Transport Protocol (AVDTP), A2DP is enabled by
CONFIG_BT_A2DP
, AVDTP is enabled byCONFIG_BT_AVDTP
. They implement the protocols and procedures that realize distribution of audio content of high quality in mono, stereo, or multi-channel modes. A typical use case is the streaming of music content from a stereo music player to headphones or speakers. The audio data is compressed in a proper format for efficient use of the limited bandwidth.
HCI Driver
Added support for Ambiq Apollo3 Blue series.
Boards & SoC Support
Added support for these SoC series:
Added support for Ambiq Apollo3 Blue and Apollo3 Blue Plus SoC series.
Made these changes in other SoC series:
ITE: Rename the Kconfig symbol for all ITE SoC variants.
Added support for these ARM boards:
Added support for Ambiq Apollo3 boards:
apollo3_evb
,apollo3p_evb
.Added support for RaspberryPi5 board:
rpi5
.Added support for Seeed Studio XIAO RP2040 board:
xiao_rp2040
.
Added support for these Xtensa boards:
Made these changes for ARM boards:
Made these changes for RISC-V boards:
Made these changes for native/POSIX boards:
Introduced the simulated nrf54l15bsim target.
LLVM fuzzing support has been refactored while adding support for it in native_sim.
Added support for these following shields:
Build system and Infrastructure
CI-enabled blackbox tests were added in order to verify correctness of the vast majority of Twister flags.
A
socs
folder for applications has been introduced that allows for Kconfig fragments and devicetree overlays that should apply to any board target using a particular SoC and board qualifier.Board/SoC flashing configuration settings have been added.
Deprecated the global CSTD cmake property in favor of the
CONFIG_STD_C
choice to select the C Standard version. Additionally subsystems can select a minimum required C Standard version, with for exampleCONFIG_REQUIRES_STD_C11
.Fixed issue with passing UTF-8 configs to applications using sysbuild.
Drivers and Sensors
ADC
Auxiliary Display
Audio
Battery
Added
re-charge-voltage-microvolt
property to thebattery
binding. This allows to set limit to automatically start charging again.
Battery backed up RAM
CAN
Deprecated the
can_calc_prescaler()
API function, as it allows for bitrate errors. Bitrate errors between nodes on the same network leads to them drifting apart after the start-of-frame (SOF) synchronization has taken place, leading to bus errors.Added
can_get_bitrate_min()
andcan_get_bitrate_max()
for retrieving the minimum and maximum supported bitrate for a given CAN controller/CAN transceiver combination, reflecting that retrieving the bitrate limits can no longer fail. Deprecated the existingcan_get_min_bitrate()
andcan_get_max_bitrate()
API functions.Extended support for automatic sample point location to also cover
can_calc_timing()
andcan_calc_timing_data()
.Added optional
min-bitrate
devicetree property for CAN transceivers.Added devicetree macros
DT_CAN_TRANSCEIVER_MIN_BITRATE
andDT_INST_CAN_TRANSCEIVER_MIN_BITRATE
for getting the minimum supported bitrate of a CAN transceiver.Added support for specifying the minimum bitrate supported by a CAN controller in the internal
CAN_DT_DRIVER_CONFIG_GET
andCAN_DT_DRIVER_CONFIG_INST_GET
macros.Added a new CAN controller API function
can_get_min_bitrate()
for getting the minimum supported bitrate of a CAN controller/transceiver combination.Updated the CAN timing functions to take the minimum supported bitrate into consideration when validating the bitrate.
Made the
sample-point
andsample-point-data
devicetree properties optional.Renamed the
bus_speed
andbus_speed_data
fields ofcan_driver_config
tobitrate
andbitrate_data
.
Charger
Added
chgin-to-sys-current-limit-microamp
property tomaxim,max20335-charger
.Added
system-voltage-min-threshold-microvolt
property tomaxim,max20335-charger
.Added
re-charge-threshold-microvolt
property tomaxim,max20335-charger
.Added
thermistor-monitoring-mode
property tomaxim,max20335-charger
.
Clock control
Counter
Added support for Ambiq Apollo3 series.
Crypto
Disk
Support for eMMC devices was added to the STM32 SD driver. This can be enabled with
CONFIG_SDMMC_STM32_EMMC
.Added a loopback disk driver, to expose a disk device backed by a file. A file can be registered with the loopback disk driver using
loopback_disk_access_register()
Added support for
DISK_IOCTL_CTRL_INIT
andDISK_IOCTL_CTRL_DEINIT
macros, which allow for initializing and de-initializing a disk at runtime. This allows hotpluggable disk devices (like SD cards) to be removed and reinserted at runtime.
Display
All in tree displays capable of supporting the MIPI Display Bus Interface (DBI) have been converted to use it. GC9X01X, UC81XX, SSD16XX, ST7789V, ST7735R based displays have been converted to this API. Boards using these displays will need their devicetree updated, see the display section of Migration guide to Zephyr v3.7.0 (Working Draft) for examples of this process.
Added driver for ST7796S display controller (
sitronix,st7796s
)Added support for
display_read()
API to ILI9XXX display driver, which can be enabled withCONFIG_ILI9XXX_READ
Added support for
display_set_orientation()
API to SSD16XXX display driverAdded driver for NT35510 MIPI-DSI display controller (
frida,nt35510
)Added driver to abstract LED strip devices as displays (
led-strip-matrix
)Added support for
display_set_pixel_format()
API to NXP eLCDIF driver. ARGB8888, RGB888, and BGR565 formats are supported.Added support for inverting color at runtime to the SSD1306 driver, via the
display_set_pixel_format()
API.Inversion mode can now be disabled in the ST7789V driver (
sitronix,st7789v
) using theinversion-off
property.
DMA
Entropy
eSPI
Renamed eSPI virtual wire direction macros, enum values and KConfig to match the new terminology in eSPI 1.5 specification.
Ethernet
Deperecated eth_mcux driver in favor of the reworked nxp_enet driver.
Driver nxp_enet is no longer experimental.
All boards and SOCs with
nxp,kinetis-ethernet
compatible nodes reworked to use the newnxp,enet
binding.
Flash
Added support for Ambiq Apollo3 series.
GNSS
GPIO
Added support for Ambiq Apollo3 series.
Added Broadcom Set-top box(brcmstb) SoC GPIO driver.
I2C
Added support for Ambiq Apollo3 series.
I2S
I3C
IEEE 802.15.4
Input
LED Strip
The
chain-length
andcolor-mapping
properties have been added to all LED strip bindings.
LoRa
Added driver for Reyax LoRa module
MDIO
MFD
Modem
Removed deprecated
GSM_PPP
driver along with its dts compatiblezephyr,gsm-ppp
.Removed deprecated
UART_MUX
andGSM_MUX
previously used byGSM_PPP
.Removed support for dts compatible
zephyr,gsm-ppp
fromMODEM_CELLULAR
driver.Removed integration with
UART_MUX
fromMODEM_IFACE_UART_INTERRUPT
module.Removed integration with
UART_MUX
fromMODEM_SHELL
module.
PCIE
MEMC
MIPI-DBI
Pin control
PWM
Regulators
Retained memory
RTC
Added Raspberry Pi Pico RTC driver.
SMBUS:
SDHC
Added ESP32 SDHC driver (
espressif,esp32-sdhc
).Added SDHC driver for Renesas MMC controller (
renesas,rcar-mmc
).
Sensor
Added TMP114 driver
Added DS18S20 1-wire temperature sensor driver.
Serial
Added driver to support UART over Bluetooth LE using NUS (Nordic UART Service). This driver enables using Bluetooth as a transport to all the subsystems that are currently supported by UART (e.g: Console, Shell, Logging).
SPI
Added support for Ambiq Apollo3 series general IOM based SPI.
Added support for Ambiq Apollo3 BLEIF based SPI, which is specific for internal HCI.
USB
W1
Watchdog
Added
CONFIG_WDT_NPCX_WARNING_LEADING_TIME_MS
to set the leading warning time in milliseconds. Removed no longer usedCONFIG_WDT_NPCX_DELAY_CYCLES
.Added support for Ambiq Apollo3 series.
Wi-Fi
Added support for configuring RTS threshold. With this, users can set the RTS threshold value or disable the RTS mechanism.
Added support for configuring AP parameters. With this, users can set AP parameters at build and run time.
Added support to configure “max_inactivity” BSS parameter. Users can set this both build and runtime duration to control the maximum time duration after which AP may disconnect a STA due to inactivity from STA.
Added support to configure “inactivity_poll” BSS parameter. Users can set build only AP parameter to control whether AP may poll the STA before throwing away STA due to inactivity.
Added support to configure “max_num_sta” BSS parameter. Users can set this both build and run time parameter to control the maximum numuber of STA entries.
Networking
DHCPv4:
Added support for encapsulated vendor specific options. By enabling
CONFIG_NET_DHCPV4_OPTION_CALLBACKS_VENDOR_SPECIFIC
callbacks can be registered withnet_dhcpv4_add_option_vendor_callback()
to handle these options after being initialised withnet_dhcpv4_init_option_vendor_callback()
.Added support for the “Vendor class identifier” option. Use the
CONFIG_NET_DHCPV4_VENDOR_CLASS_IDENTIFIER
to enable it andCONFIG_NET_DHCPV4_VENDOR_CLASS_IDENTIFIER_STRING
to set it.The NTP server from the DHCPv4 option can now be used to set the system time. This is done by default, if
CONFIG_NET_CONFIG_CLOCK_SNTP_INIT
is enabled.
LwM2M:
Added new API function:
Added new
offset
parameter tolwm2m_engine_set_data_cb_t
callback type. This affects post write and validate callbacks as well as some firmware callbacks.
IPSP:
Removed IPSP support.
CONFIG_NET_L2_BT
does not exist anymore.
TCP:
ISN generation now uses SHA-256 instead of MD5. Moreover it now relies on PSA APIs instead of legacy Mbed TLS functions for hash computation.
mDNS:
Fixed an issue where the mDNS Responder did not work when the mDNS Resolver was also enabled. The mDNS Resolver and mDNS Responder can now be used simultaneously.
USB
Devicetree
Libraries / Subsystems
Debug
symtab
By enabling
CONFIG_SYMTAB
, the symbol table will be generated with Zephyr link stage executable on supported architectures.
Management
hawkBit
The hawkBit subsystem has been reworked to use the settings subsystem to store the hawkBit configuration.
By enabling
CONFIG_HAWKBIT_SET_SETTINGS_RUNTIME
, the hawkBit settings can be configured at runtime. Use thehawkbit_set_config()
function to set the hawkBit configuration. It can also be set via the hawkBit shell, by using thehawkbit set
command.When using the hawkBit autohandler and an update is installed, the device will now automatically reboot after the installation is complete.
By enabling
CONFIG_HAWKBIT_CUSTOM_DEVICE_ID
, a callback function can be registered to set the device ID. Use thehawkbit_set_device_identity_cb()
function to register the callback.By enabling
CONFIG_HAWKBIT_CUSTOM_ATTRIBUTES
, a callback function can be registered to set the device attributes that are sent to the hawkBit server. Use thehawkbit_set_custom_data_cb()
function to register the callback.
MCUmgr
Instructions for the deprecated mcumgr go tool have been removed, a list of alternative, supported clients can be found on Tools/libraries.
Logging
By enabling
CONFIG_LOG_BACKEND_NET_USE_DHCPV4_OPTION
, the IP address of the syslog server for the networking backend is set by the DHCPv4 Log Server Option (7).
Modem modules
Picolibc
Power management
Crypto
Mbed TLS was updated to 3.6.0. Release notes can be found at: https://github.com/Mbed-TLS/mbedtls/releases/tag/v3.6.0
When any PSA crypto provider is available in the system (
CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT
is enabled), desired PSA features must now be explicitly selected throughCONFIG_PSA_WANT_xxx
symbols.Choice symbols
CONFIG_MBEDTLS_PSA_CRYPTO_LEGACY_RNG
andCONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG
were added in order to allow the user to specify how Mbed TLS PSA crypto core should generate random numbers. The former option, which is the default, relies on legacy entropy and CTR_DRBG/HMAC_DRBG modules, while the latter relies on CSPRNG drivers.CONFIG_MBEDTLS_PSA_P256M_DRIVER_ENABLED
enables support for the Mbed TLS’s p256-m driver PSA crypto library. This is a Cortex-M SW optimized implementation of secp256r1 curve.
Random
Besides the existing
sys_rand32_get()
function,sys_rand8_get()
,sys_rand16_get()
andsys_rand64_get()
are now also available. These functions are all implemented on top ofsys_rand_get()
.
Retention
SD
SDMMC and SDIO frequency and timing selection logic have been reworked, to resolve an issue where a timing mode would not be selected if the SDHC device in use did not report support for the maximum frequency possible in that mode. Now, if the host controller and card both report support for a given timing mode but not the highest frequency that mode supports, the timing mode will be selected and configured at the reduced frequency (GitHub #72705).
State Machine Framework
The
SMF_CREATE_STATE
macro now always takes 5 arguments.Transition sources that are parents of the state that was run now choose the correct Least Common Ancestor for executing Exit and Entry Actions.
Passing
NULL
tosmf_set_state()
is now not allowed.
Storage
FAT FS: It is now possible to expose file system formatting functionality for FAT without also enabling automatic formatting on mount failure by setting the
CONFIG_FS_FATFS_MKFS
Kconfig option. This option is enabled by default ifCONFIG_FILE_SYSTEM_MKFS
is set.FS: It is now possible to truncate a file while opening using
fs_open()
and by passingFS_O_TRUNC
flag.
POSIX API
LoRa/LoRaWAN
ZBus
HALs
STM32
MCUboot
Trusted Firmware-M
TF-M was updated to 2.1.0. Release notes can be found at: https://tf-m-user-guide.trustedfirmware.org/releases/2.1.0.html
Support for MCUboot signature types other than RSA-3072 has been added. The type can be chosen with the
CONFIG_TFM_MCUBOOT_SIGNATURE_TYPE
Kconfig option. Using EC-P256, the new default, reduces flash usage by several KBs compared to RSA.
zcbor
LVGL
Tests and Samples
Added snippet for easily enabling UART over Bluetooth LE by passing
-S nus-console
duringwest build
. This snippet sets theCONFIG_BT_ZEPHYR_NUS_AUTO_START_BLUETOOTH
which allows non-Bluetooth samples that use the UART APIs to run without modifications (e.g: Console and Logging examples).Removed
GSM_PPP
specific configuration overlays from samplesnet/cloud/tagoio
andnet/mgmt/updatehub
. TheGSM_PPP
device driver has been deprecated and removed. The newMODEM_CELLULAR
device driver which replaces it uses the native networking stack andPM
subsystem, which like ethernet, requires no application specific actions to set up networking.Removed
net/gsm_modem
sample as theGSM_PPP
device driver it depended on has been deprecated and removed. The sample has been replaced by the samplenet/cellular_modem
based on theMODEM_CELLULAR
device driver.