Migration guide to Zephyr v4.0.0 (Working Draft)
This document describes the changes required when migrating your application from Zephyr v3.7.0 to Zephyr v4.0.0.
Any other changes (not directly related to migrating applications) can be found in the release notes.
Build System
Kernel
Boards
native_posix has been deprecated in favour of native_sim (GitHub #76898).
Nordic nRF53 and nRF91 based boards can use the common devicetree overlays in
dts/common/nordic
to define default flash and ram partitioning based on TF-M.STM32WBA: The command used for fetching blobs required to build ble applications is now
west blobs fetch hal_stm32
instead ofwest blobs fetch stm32
.
STM32
On all official STM32 boards,
west flash
selects STM32CubeProgrammer as the default west runner. If you want to enforce the selection of another runner like OpenOCD or pyOCD for flashing, you should specify it using the west--runner
or-r
option. (GitHub #75284)
Modules
Mbed TLS
The Kconfig options
CONFIG_MBEDTLS_TLS_VERSION_1_0
andCONFIG_MBEDTLS_TLS_VERSION_1_1
have been removed because Mbed TLS doesn’t support TLS 1.0 and 1.1 anymore since v3.0. (GitHub #76833)The following Kconfig symbols were renamed (GitHub #76408): *
CONFIG_MBEDTLS_ENTROPY_ENABLED
is nowCONFIG_MBEDTLS_ENTROPY_C
, *CONFIG_MBEDTLS_ZEPHYR_ENTROPY
is nowCONFIG_MBEDTLS_ENTROPY_POLL_ZEPHYR
.The Kconfig option
CONFIG_MBEDTLS_SSL_EXPORT_KEYS
was removed because the corresponding build symbol was removed in Mbed TLS 3.1.0 and is now assumed to be enabled. (GitHub #77657)
Trusted Firmware-M
LVGL
zcbor
Updated the zcbor library to version 0.9.0. Full release notes at https://github.com/NordicSemiconductor/zcbor/blob/0.9.0/RELEASE_NOTES.md Migration guide at https://github.com/NordicSemiconductor/zcbor/blob/0.9.0/MIGRATION_GUIDE.md Migration guide copied here:
zcbor_simple_*()
functions have been removed to avoid confusion about their use. They are still in the C file because they are used by other functions. Instead, use the specific functions for the currently supported simple values, i.e.zcbor_bool_*()
,zcbor_nil_*()
, andzcbor_undefined_*()
. If a removed variant is strictly needed, add your own forward declaration in your code.Code generation naming:
More C keywords are now capitalized to avoid naming collision. You might have to capitalize some instances if your code was generated to have those names.
A fix was made to the naming of bstr elements with a .size specifier, which might mean that these elements change name in your code when you regenerate.
Device Drivers and Devicetree
The
compatible
of the LiteX ethernet controller has been renamed fromlitex,eth0
tolitex,liteeth
. (GitHub #75433)The
compatible
of the LiteX uart controller has been renamed fromlitex,uart0
tolitex,uart
. (GitHub #74522)The devicetree bindings for the Microchip
mcp23xxx
series have been split up. Users ofmicrochip,mcp230xx
andmicrochip,mcp23sxx
should change their devicetreecompatible
values to the specific chip variant, e.g.microchip,mcp23017
. Thengpios
devicetree property has been removed, since it is implied by the model name. Chip variants with open-drain outputs (mcp23x09
,mcp23x18
) now correctly reflect this in their driver API, users of these devices should ensure they pass appropriate values togpio_pin_set()
. (GitHub #65797)
Controller Area Network (CAN)
Display
Enhanced Serial Peripheral Interface (eSPI)
GNSS
The u-blox M10 driver has been renamed to M8 as it only supports M8 based devices. Existing devicetree compatibles should be updated to
u-blox,m8
, and Kconfig symbols swapped toCONFIG_GNSS_U_BLOX_M8
.The APIs
gnss_set_periodic_config()
andgnss_get_periodic_config()
have been removed. (GitHub #76392)
Input
INPUT_CALLBACK_DEFINE
has now an extrauser_data
void pointer argument that can be used to reference any user data structure. To restore the current behavior it can be set toNULL
. Avoid *user_data
argument has to be added to the callback function arguments.The
analog-axis
invert
property has been renamed toinvert-input
(there’s now aninvert-output
available as well).
Interrupt Controller
LED Strip
SDHC
The NXP USDHC driver now assumes a card is present if no card detect method is configured, instead of using the peripheral’s internal card detect signal to check for card presence. To use the internal card detect signal, the devicetree property
detect-cd
should be added to the USDHC node in use.
Sensors
The existing driver for the Microchip MCP9808 temperature sensor transformed and renamed to support all JEDEC JC 42.4 compatible temperature sensors. It now uses the
jedec,jc-42.4-temp
compatible string instead to themicrochip,mcp9808
string.The
nxp,
prefixed properties innxp,kinetis-acmp
have been deprecated in favor of properties without the prefix. The sensor based driver for thenxp,kinetis-acmp
has been updated to support both the new and deprecated property names. Uses of the deprecated property names should be updated to the new property names.
Serial
Users of
uart_irq_tx_ready()
now need to check forret > 0
to ensure that the FIFO can accept data bytes, instead ofret == 1
. The function now returns a lower bound on the number of bytes that can be provided touart_fifo_fill()
without truncation.
Regulator
Internal regulators present in nRF52/53 series can now be configured using devicetree. The Kconfig options
CONFIG_SOC_DCDC_NRF52X
,CONFIG_SOC_DCDC_NRF52X_HV
,CONFIG_SOC_DCDC_NRF53X_APP
,CONFIG_SOC_DCDC_NRF53X_NET
andCONFIG_SOC_DCDC_NRF53X_HV
selected by board-level Kconfig options have been deprecated.Example for nRF52 series:
/* configure REG/REG1 in DC/DC mode */ ®/reg1 { regulator-initial-mode = <NRF5X_REG_MODE_DCDC>; }; /* enable REG0 (HV mode) */ ®0 { status = "okay"; };
Example for nRF53 series:
/* configure VREGMAIN in DC/DC mode */ &vregmain { regulator-initial-mode = <NRF5X_REG_MODE_DCDC>; }; /* configure VREGRADIO in DC/DC mode */ &vregradio { regulator-initial-mode = <NRF5X_REG_MODE_DCDC>; }; /* enable VREGH (HV mode) */ &vregh { status = "okay"; };
Bluetooth
Bluetooth HCI
Bluetooth Mesh
Bluetooth Audio
The Volume Renderer callback functions
bt_vcp_vol_rend_cb.state
andbt_vcp_vol_rend_cb.flags
for VCP now contain an additional parameter for the connection. This needs to be added to all instances of VCP Volume Renderer callback functions defined. (GitHub #76992)The Unicast Server has a new registration function
bt_bap_unicast_server_register()
which takes abt_bap_unicast_server_register_param
as argument. This allows the Unicast Server to dynamically register Source and Sink ASE count at runtime. The oldCONFIG_BT_ASCS_ASE_SRC_COUNT
andCONFIG_BT_ASCS_ASE_SNK_COUNT
has been renamed toCONFIG_BT_ASCS_MAX_ASE_SRC_COUNT
andCONFIG_BT_ASCS_MAX_ASE_SNK_COUNT
to reflect that they now serve as a compile-time maximum configuration of ASEs to be used.bt_bap_unicast_server_register()
needs to be called once before using the Unicast Server, and more specfically prior to callingbt_bap_unicast_server_register_cb()
for the first time. It does not need to be called again until the new functionbt_bap_unicast_server_unregister()
has been called. (GitHub #76632)
Bluetooth Classic
Bluetooth Host
Bluetooth Crypto
Networking
The CoAP public API functions
coap_get_block1_option()
andcoap_get_block2_option()
have changed. Theblock_number
pointer type has changed fromuint8_t *
touint32_t *
. Additionally,coap_get_block2_option()
now accepts an additionalbool *has_more
parameter, to store the value of the more flag. (GitHub #76052)The Ethernet bridge shell is moved under network shell. This is done so that all the network shell activities can be found under
net
shell command. After this change the bridge shell is used bynet bridge
command. (GitHub #77235)The Ethernet bridging code is changed to allow similar configuration experience as in Linux. The bridged Ethernet interface can be used normally even if bridging is enabled. The actual bridging is done by a separate virtual network interface that directs network packets to bridged Ethernet interfaces. The
eth_bridge_iface_allow_tx()
is removed as it is not needed because the bridged Ethernet interface can send and receive data normally. Theeth_bridge_listener_add()
andeth_bridge_listener_remove()
are removed as same functionality can be achieved using promiscuous API. Because the bridge interface is a normal network interface, theeth_bridge_iface_add()
andeth_bridge_iface_remove()
will take network interface pointer as a first parameter. (GitHub #77987)To facilitate use outside of the networking subsystem, the network buffer header file was renamed from include/zephyr/net/buf.h to include/zephyr/net_buf.h and the implementation moved to lib/net_buf/. (GitHub #78009)
Other Subsystems
Flash map
CONFIG_SPI_NOR_IDLE_IN_DPD
has been removed from theCONFIG_SPI_NOR
driver. An enhanced version of this functionality can be obtained by enabling Device Runtime Power Management on the device (Tunable withCONFIG_SPI_NOR_ACTIVE_DWELL_MS
).
hawkBit
MCUmgr
The
MCUMGR_TRANSPORT_BT_AUTHEN
Kconfig option from theCONFIG_MCUMGR_TRANSPORT_BT
MCUmgr transport has been replaced with theCONFIG_MCUMGR_TRANSPORT_BT_PERM_RW
Kconfig choice. The requirement for Bluetooth authentication is now indicated by theCONFIG_MCUMGR_TRANSPORT_BT_PERM_RW_AUTHEN
Kconfig option. To remove the default requirement for Bluetooth authentication it is necessary to enable theCONFIG_MCUMGR_TRANSPORT_BT_PERM_RW
Kconfig option in the project configuration.
Modem
Shell
kernel threads
andkernel stacks
shell command have been renamed tokernel thread list
&kernel thread stacks