Back to Zephyr

Migration guide to Zephyr v4.1.0

doc/releases/migration-guide-4.1.rst

4.4.028.9 KB
Original Source

:orphan:

.. See https://docs.zephyrproject.org/latest/releases/index.html#migration-guides for details of what is supposed to go into this document.

.. _migration_4.1:

Migration guide to Zephyr v4.1.0 ################################

This document describes the changes required when migrating your application from Zephyr v4.0.0 to Zephyr v4.1.0.

Any other changes (not directly related to migrating applications) can be found in the :ref:release notes<zephyr_4.1>.

.. contents:: :local: :depth: 2

Build System


  • Support for the build type feature which was deprecated in Zephyr 3.6 has been removed, :ref:application-file-suffixes/:ref:sysbuild_file_suffixes has replaced this.

  • Sysbuild

    • The Kconfig SB_CONFIG_MCUBOOT_MODE_SWAP_WITHOUT_SCRATCH has been deprecated and replaced with SB_CONFIG_MCUBOOT_MODE_SWAP_USING_MOVE, applications should be updated to select this new symbol if they were selecting the old symbol.

BOSSA Runner

The bossac runner has been changed to no longer do a full erase by default when flashing. To perform a full erase, pass the --erase option when executing west flash.

Kernel


k_pipe API

The k_pipe API has been reworked and the API used in CONFIG_PIPES is now deprecated. The k_pipe API is enabled by default when CONFIG_MULTITHREADING is set. Function renames and modifications:

.. list-table:: :header-rows: 1

    • Old API
    • New API
    • Changes
    • k_pipe_put(..)
    • k_pipe_write(..)
    • Removed min_xfer parameter (partial transfers based on thresholds are no longer supported) bytes_written is now the return value
    • k_pipe_get(..)
    • k_pipe_read(..)
    • Removed min_xfer parameter (partial transfers based on thresholds are no longer supported) bytes_read is now the return value
    • k_pipe_flush(..) & k_pipe_buffer_flush(..)
    • k_pipe_reset(..)
    • Reset the pipe, discarding all data in the pipe, non blocking.
    • k_pipe_alloc_init(..), k_pipe_cleanup(..)
    • Removed
    • Dynamic allocation of pipes is no longer supported
    • k_pipe_read_avail(..), k_pipe_write_avail(..)
    • Removed
    • Querying the number of bytes in the pipe is no longer supported
    • None
    • k_pipe_close(..)
    • Close a pipe, waking up all pending readers and writers with an error code. No further reading or writing is allowed on the pipe. The pipe can be re-opened by calling k_pipe_init(..) again. Note, all data in the pipe is available to readers until the pipe is emptied.

Security


  • New options for stack canaries have been added, providing users with finer control over stack protection. With this change, :kconfig:option:CONFIG_STACK_CANARIES no longer enables the compiler option -fstack-protector-all. Users who wish to use this option must now enable :kconfig:option:CONFIG_STACK_CANARIES_ALL.

Boards


  • Shield mikroe_weather_click now supports both I2C and SPI interfaces. Users should select the required configuration by using mikroe_weather_click_i2c or mikroe_weather_click_spi instead of mikroe_weather_click.

  • All nRF52-based boards will now default to soft (system) reset instead of pin reset when flashing with west flash. If you want to keep using pin reset on the nRF52 family of ICs you can use west flash --pinreset.

  • Erasing the external memory when programming a new firmware image with west flash on the nRF52 and nRF53 series now always correctly honors the --erase flag (and its absence) both when using the nrfjprog and nrfutil backends. Prior to this release, the nrjfprog backend would always erase only the sectors of the external flash used by the new firmware, and the nrfutil one would always erase the whole external flash.

  • CAN1 and USART1 have been disabled on the stm32f4_disco, because of conflicting pinctrl on I2C1, which is now used to control the audio codec connected to the audio jack output.

Devicetree


  • The :dtcompatible:microchip,cap1203 driver has changed its compatible to :dtcompatible:microchip,cap12xx and has been updated to support multiple channels. The number of available channels is derived from the length of the devicetree array property input-codes. The :kconfig:option:CONFIG_INPUT_CAP1203_POLL has been removed: If the devicetree property int-gpios is present, interrupt mode is used otherwise, polling is used. The :kconfig:option:CONFIG_INPUT_CAP1203_PERIOD has been replaced with the devicetree property poll-interval-ms. In interrupt mode, the devicetree property repeat is supported.

Raspberry Pi

  • CONFIG_SOC_SERIES_RP2XXX is renamed to :kconfig:option:CONFIG_SOC_SERIES_RP2040.

STM32

  • MCO clock source and prescaler are now exclusively configured by the DTS as it was introduced earlier. The Kconfig method for configuration is now removed.

  • ADC properties st,adc-sequencer and st,adc-clock-source now uses string values instead of integer values.

Modules


Mbed TLS

  • If a platform has a CSPRNG source available (i.e. :kconfig:option:CONFIG_CSPRNG_ENABLED is set), then the Kconfig option :kconfig:option:CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG is the default choice for random number source instead of :kconfig:option:CONFIG_MBEDTLS_PSA_CRYPTO_LEGACY_RNG. This helps in reducing ROM/RAM footprint of the Mbed TLS library.

  • The newly-added Kconfig option :kconfig:option:CONFIG_MBEDTLS_PSA_KEY_SLOT_COUNT allows to specify the number of key slots available in the PSA Crypto core. Previously this value was not explicitly set, so Mbed TLS's default value of 32 was used. The new Kconfig option defaults to 16 instead in order to find a reasonable compromise between RAM consumption and most common use cases. It can be further trimmed down to reduce RAM consumption if the final application doesn't need that many key slots simultaneously.

Trusted Firmware-M

LVGL

  • The config option :kconfig:option:CONFIG_LV_Z_FLUSH_THREAD_PRIO is now called :kconfig:option:CONFIG_LV_Z_FLUSH_THREAD_PRIORITY and its value is now interpreted as an absolute priority instead of a cooperative one.

  • The config option :kconfig:option:CONFIG_LV_Z_VBD_CUSTOM_SECTION is now called :kconfig:option:CONFIG_LV_Z_VDB_CUSTOM_SECTION.

Device Drivers and Devicetree


  • Device driver APIs are placed into iterable sections (:github:71773 and :github:82102) to allow for runtime checking. See :ref:device_driver_api for more details. The :c:macro:DEVICE_API() macro should be used by out-of-tree driver implementations for all the upstream driver classes.

ADC

  • Renamed the compatible from nxp,kinetis-adc12 to :dtcompatible:nxp,adc12.

Clock

  • Renamed the devicetree property freqs_mhz to freqs-mhz.
  • Renamed the devicetree property cg_reg to cg-reg.
  • Renamed the devicetree property pll_ctrl_reg to pll-ctrl-reg.

Counter

  • Renamed the devicetree property primary_source to primary-source.
  • Renamed the devicetree property secondary_source to secondary-source.
  • Renamed the devicetree property filter_count to filter-count.
  • Renamed the devicetree property filter_period to filter-period.

Controller Area Network (CAN)

  • Renamed the :dtcompatible:infineon,xmc4xxx-can-node devicetree property clock_div8 to clock-div8 (:github:83782).

Display

  • Displays using the MIPI DBI driver which set their MIPI DBI mode via the mipi-mode property in devicetree should now use a string property of the same name, like so:

    .. code-block:: devicetree

    /* Legacy display definition */

    st7735r: st7735r@0 { ... mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>; ... };

    /* New display definition */

    st7735r: st7735r@0 { ... mipi-mode = "MIPI_DBI_MODE_SPI_4WIRE"; ... };

  • Renamed the devicetree propertys pclk_pol and data_cmd-gpios to pclk-pol and data-cmd-gpios.

DAC

  • Renamed the devicetree properties voltage_reference and power_down_mode to voltage-reference and power-down-mode.

Enhanced Serial Peripheral Interface (eSPI)

Entropy

  • BT HCI based entropy driver now directly sends the HCI command to parse random data instead of waiting for BT connection to be ready. This is helpful on platforms where the BT controller owns the HW random generator and the application processor needs to get random data before BT is fully enabled. (:github:79931)

Ethernet

  • Deprecated eth_mcux driver was removed.

  • Silabs gecko ethernet changes:

    • Renamed the devicetree property location-phy_mdc to location-phy-mdc.
    • Renamed the devicetree property location-phy_mdio to location-phy-mdio.
    • Renamed the devicetree property location-rmii_refclk to location-phy-refclk.
    • Renamed the devicetree property location-rmii_crs_dv to location-phy-crs-dv.
    • Renamed the devicetree property location-rmii_txd0 to location-phy-txd0.
    • Renamed the devicetree property location-rmii_txd1 to location-phy-txd1.
    • Renamed the devicetree property location-rmii_tx_en to location-phy-tx-en.
    • Renamed the devicetree property location-rmii_rxd0 to location-phy-rxd0.
    • Renamed the devicetree property location-rmii_rxd1 to location-phy-rxd1.
    • Renamed the devicetree property location-rmii_rx_er to location-phy-rx-er.
    • Renamed the devicetree property location-phy_pwr_enable to location-phy-pwr-enable.
    • Renamed the devicetree property location-phy_reset to location-phy-reset.
    • Renamed the devicetree property location-phy_interrupt to location-phy-interrupt.

GNSS

GPIO

  • Renamed the device tree property pin_mask to pin-mask.
  • Renamed the device tree property pinmux_mask to pinmux-mask.
  • Renamed the device tree property vbatts_pins to vbatts-pins.
  • Renamed the device tree property bit_per_gpio to bit-per-gpio.
  • Renamed the device tree property off_val to off-val.
  • Renamed the device tree property on_val to on-val.
  • Renamed the compatible from ti,ads114s0x-gpio to :dtcompatible:ti,ads1x4s0x-gpio.

HWSPINLOCK

  • Renamed the DeviceTree property num_locks to num-locks.

I2C

  • Renamed the compatible from nxp,imx-lpi2c to :dtcompatible:nxp,lpi2c.
  • Renamed the device tree property port_sel to ``port-sel```.

I2S

  • Renamed the device tree property from fifo_depth to fifo-depth.

Input

LED

  • Renamed the device tree property max_curr_opt to max-curr-opt.`

PWM

  • Renamed the compatible from renesas,ra8-pwm to :dtcompatible:renesas,ra-pwm.

Interrupt Controller

LED Strip

Misc

  • All the functions in the ft8xx driver take an additional const struct *device parameter to allow for multiple instances of the driver.

    The exception to this is the functions and macros defined in the :zephyr_file:include/zephyr/drivers/misc/ft8xx/ft8xx_reference_api.h file, which translate the API to a single-instance model, compatible with the API defined in the FT8xx programming guide. These functions have not been modified.

  • The :c:func:ft8xx_register_int function now takes an additional void *user_data parameter to allow user-defined data to be passed to the interrupt handler. Additionally, the signature of the ft8xx interrupt handler has changed to include the void *user_data parameter.

MMU/MPU

  • Renamed the compatible from nxp,kinetis-mpu to :dtcompatible:nxp,sysmpu and added its corresponding binding.
  • Renamed the Kconfig option CPU_HAS_NXP_MPU to :kconfig:option:CPU_HAS_NXP_SYSMPU.

Pin Control

  • Renamed the compatible from nxp,kinetis-pinctrl to :dtcompatible:nxp,port-pinctrl.

  • Renamed the compatible from nxp,kinetis-pinmux to :dtcompatible:nxp,port-pinmux.

  • Silabs Series 2 devices now use a new pinctrl driver selected by :dtcompatible:silabs,dbus-pinctrl. This driver allows the configuration of GPIO properties through device tree, rather than having them hard-coded for each supported signal. It also supports all possible digital bus signals by including a binding header such as :zephyr_file:include/zephyr/dt-bindings/pinctrl/silabs/xg24-pinctrl.h.

    Pinctrl should now be configured like this:

    .. code-block:: devicetree

    #include <zephyr/dt-bindings/pinctrl/silabs/xg24-pinctrl.h>

    &pinctrl { i2c0_default: i2c0_default { group0 { /* Pin selection(s) using bindings included above / pins = <I2C0_SDA_PD2>, <I2C0_SCL_PD3>; / Shared properties for the group of pins */ drive-open-drain; bias-pull-up; }; }; };

PWM

  • Renamed the compatible from nxp,kinetis-ftm-pwm to :dtcompatible:nxp,ftm-pwm.

SDHC

  • Renamed the device tree property from power_delay_ms to ``power-delay-ms```
  • Renamed the device tree property from max_current_330 to max-current-330

Sensors

  • The :dtcompatible:we,wsen-pads driver has been renamed to :dtcompatible:we,wsen-pads-2511020213301. The Device Tree can be configured as follows:

    .. code-block:: devicetree

    &i2c0 { pads:pads-2511020213301@5d { compatible = "we,wsen-pads-2511020213301"; reg = <0x5d>; odr = < 10 >; interrupt-gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>; }; };

  • The :dtcompatible:we,wsen-pdus driver has been renamed to :dtcompatible:we,wsen-pdus-25131308XXXXX. The Device Tree can be configured as follows:

    .. code-block:: devicetree

    &i2c0 { pdus:pdus-25131308XXXXX@78 { compatible = "we,wsen-pdus-25131308XXXXX"; reg = < 0x78 >; sensor-type = < 4 >; }; };

  • The :dtcompatible:we,wsen-tids driver has been renamed to :dtcompatible:we,wsen-tids-2521020222501. The Device Tree can be configured as follows:

    .. code-block:: devicetree

    &i2c0 { tids:tids-2521020222501@3F { compatible = "we,wsen-tids-2521020222501"; reg = < 0x3F >; odr = < 25 >; interrupt-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>; }; };

  • The :dtcompatible:invensense,icp10125 driver has been renamed to :dtcompatible:invensense,icp101xx. The Device Tree can be configured as follows:

    .. code-block:: devicetree

    &i2c0 { icp101xx:icp101xx@63 { compatible = "invensense,icp101xx"; reg = <0x63>; }; };

Serial

  • Renamed the compatible from nxp,kinetis-lpuart to :dtcompatible:nxp,lpuart.
  • Silabs Usart driver has been split for Series 2 :dtcompatible:silabs,usart-uart and Series 0/1 silabs,gecko-usart

Stepper

  • Renamed the compatible from zephyr,gpio-steppers to :dtcompatible:zephyr,gpio-stepper.
  • Renamed the stepper_set_actual_position function to :c:func:stepper_set_reference_position.
  • Renamed the stepper_enable_constant_velocity_mode function to :c:func:stepper_run. The function does not take a velocity parameter anymore. Set the desired speed using the :c:func:stepper_set_microstep_interval function beforehand.
  • Renamed the stepper_move function to :c:func:stepper_move_by.
  • Renamed the stepper_set_target_position function to :c:func:stepper_move_to.
  • Renamed the stepper_set_max_velocity function to :c:func:stepper_set_microstep_interval. The function now takes the step interval in nanoseconds. This allows for a more precise control.
  • Deprecating setting max velocity via :c:func:stepper_run.
  • The :kconfig:option:STEPPER_ADI_TMC_RAMP_GEN is now deprecated and is replaced with the new :kconfig:option:STEPPER_ADI_TMC50XX_RAMP_GEN option.
  • Renamed tmc5041 stepper driver to tmc50xx.
  • To control the velocity for :dtcompatible:adi,tmc50xx stepper driver, use :c:func:tmc50xx_stepper_set_max_velocity or :c:func:tmc50xx_stepper_set_ramp.
  • Renamed the DeviceTree property en_spreadcycle to en-spreadcycle.
  • Renamed the DeviceTree property i_scale_analog to i-scale-analog.
  • Renamed the DeviceTree property index_optw to index-otpw.
  • Renamed the DeviceTree property ìndex_step to index-step.
  • Renamed the DeviceTree property internal_rsense to internal-rsense.
  • Renamed the DeviceTree property lock_gconf to lock-gconf.
  • Renamed the DeviceTree property mstep_reg_select to mstep-reg-select.
  • Renamed the DeviceTree property pdn_disable to pdn-disable.
  • Renamed the DeviceTree property poscmp_enable to poscmp-enable.
  • Renamed the DeviceTree property test_mode to test-mode.

SPI

  • Renamed the compatible from nxp,imx-lpspi to :dtcompatible:nxp,lpspi.
  • Renamed the compatible from nxp,kinetis-dspi to :dtcompatible:nxp,dspi.
  • Renamed the compatible from silabs,gecko-spi-usart to :dtcompatible:silabs,usart-spi.
  • Renamed the compatible from silabs,gecko-spi-eusart to :dtcompatible:silabs,eusart-spi.

Regulator

RTC

  • Renamed the compatible from nxp,kinetis-rtc to :dtcompatible:nxp,rtc.

Timer

  • Renamed the compatible from nxp,kinetis-ftm to :dtcompatible:nxp,ftm and relocate it under dts/bindings/timer.
  • Renamed the device tree property from ticks_us to ticks-us.

USB

  • Renamed the devicetree property names phy_handle to phy-handle.

Video

  • The :file:include/zephyr/drivers/video-controls.h got updated to have video controls IDs (CIDs) matching the definitions in the Linux kernel file include/uapi/linux/v4l2-controls.h. In most cases, removing the category prefix is enough: VIDEO_CID_CAMERA_GAIN becomes VIDEO_CID_GAIN. The new video-controls.h source now contains description of each control ID to help disambiguating.

  • The video_pix_fmt_bpp() function was returning a byte count, this got replaced by video_bits_per_pixel() which return a bit count. For instance, invocations such as pitch = width * video_pix_fmt_bpp(pixfmt) needs to be replaced by an equivalent pitch = width * video_bits_per_pixel(pixfmt) / BITS_PER_BYTE.

  • The :c:func:video_buffer_alloc and :c:func:video_buffer_aligned_alloc functions in the video API now take an additional timeout parameter.

  • The :c:func:video_stream_start and :c:func:video_stream_stop driver APIs are now merged into the new :c:func:video_set_stream driver API. The user APIs are however unchanged to keep backward compatibility with downstream applications.

Watchdog

  • Renamed the compatible from nxp,kinetis-wdog32 to :dtcompatible:nxp,wdog32.

Wi-Fi

  • The config options :kconfig:option:CONFIG_NXP_WIFI_BUILD_ONLY_MODE and :kconfig:option:CONFIG_NRF_WIFI_BUILD_ONLY_MODE are now unified under :kconfig:option:CONFIG_BUILD_ONLY_NO_BLOBS making it a common entry point for any vendor to enable builds without blobs.

Bluetooth


Bluetooth HCI

  • The :kconfig:option:BT_CTLR has been deprecated. A new :kconfig:option:HAS_BT_CTLR has been introduced which should be selected by the respective link layer Kconfig options (e.g. a HCI driver option, or the one for the upstream controller). It's recommended that all HCI drivers for local link layers select the new option, since that opens up the possibility of indicating build-time support for specific features, which e.g. the host stack can take advantage of.

Bluetooth Mesh

  • Following the beginnig of the deprecation process for the TinyCrypt crypto library, Kconfig symbol :kconfig:option:CONFIG_BT_MESH_USES_TINYCRYPT was set as deprecated. Default option for platforms that do not support TF-M is :kconfig:option:CONFIG_BT_MESH_USES_MBEDTLS_PSA.

  • Mesh key representations are not backward compatible if images are built with TinyCrypt and crypto libraries based on the PSA API. Mesh no longer stores the key values for those crypto libraries. The crypto library stores the keys in the internal trusted storage. If a provisioned device is going to update its image that was built with the :kconfig:option:CONFIG_BT_MESH_USES_TINYCRYPT Kconfig option set on an image that was built with :kconfig:option:CONFIG_BT_MESH_USES_MBEDTLS_PSA or :kconfig:option:CONFIG_BT_MESH_USES_TFM_PSA without erasing the persistent area, it should be unprovisioned first and reprovisioned after update again. If the image is changed over Mesh DFU, use :c:enumerator:BT_MESH_DFU_EFFECT_UNPROV.

  • Mesh explicitly depends on the Secure Storage subsystem if storing into non-volatile memory (:kconfig:option:CONFIG_BT_SETTINGS) is enabled and Mbed TLS library (:kconfig:option:CONFIG_BT_MESH_USES_MBEDTLS_PSA) is used. Applications should be built with :kconfig:option:CONFIG_SECURE_STORAGE enabled.

Bluetooth Audio

  • The following Kconfig options are not longer automatically enabled by the LE Audio Kconfig options and may need to be enabled manually (:github:81328):

    • :kconfig:option:CONFIG_BT_GATT_CLIENT
    • :kconfig:option:CONFIG_BT_GATT_AUTO_DISCOVER_CCC
    • :kconfig:option:CONFIG_BT_GATT_AUTO_UPDATE_MTU
    • :kconfig:option:CONFIG_BT_EXT_ADV
    • :kconfig:option:CONFIG_BT_PER_ADV_SYNC
    • :kconfig:option:CONFIG_BT_ISO_BROADCASTER
    • :kconfig:option:CONFIG_BT_ISO_SYNC_RECEIVER
    • :kconfig:option:CONFIG_BT_PAC_SNK
    • :kconfig:option:CONFIG_BT_PAC_SRC
  • PACS have been changed to support dynamic, runtime configuration. This means that PACS now has to be registered with :c:func:bt_pacs_register before it can be used. In addition, :c:func:bt_pacs_register also have to be called before :c:func:bt_ascs_register can be be called. All Kconfig options still remain. Runtime configuration cannot override a disabled Kconfig option. (:github:83730)

  • Several services and service client (AICS, ASCS, CSIP, HAS, MCS, PACS, TBS, VCP and VOCS) now depend on :kconfig:option:CONFIG_BT_SMP and may need to be explicitly enabled. (:github:`84994``)

Bluetooth Classic

Bluetooth Host

  • :kconfig:option:CONFIG_BT_BUF_ACL_RX_COUNT has been deprecated. The number of ACL RX buffers is now computed internally and is equal to :kconfig:option:CONFIG_BT_MAX_CONN + 1. If an application needs more buffers, it can use the new :kconfig:option:CONFIG_BT_BUF_ACL_RX_COUNT_EXTRA to add additional ones.

    e.g. if :kconfig:option:CONFIG_BT_MAX_CONN was 3 and :kconfig:option:CONFIG_BT_BUF_ACL_RX_COUNT was 7 then :kconfig:option:CONFIG_BT_BUF_ACL_RX_COUNT_EXTRA should be set to 7 - (3 + 1) = 3.

    .. warning::

    The default value of :kconfig:option:CONFIG_BT_BUF_ACL_RX_COUNT has been set to 0.

  • LE legacy pairing is no longer enabled by default since it's not secure. Leaving it enabled makes a device vulnerable for downgrade attacks. If an application still needs to use LE legacy pairing, it should disable :kconfig:option:CONFIG_BT_SMP_SC_PAIR_ONLY manually.

  • The prompt for :kconfig:option:CONFIG_BT_ECC has been removed, since it only offers an internal API, meaning internal users should explicitly select it in their respective Kconfig options.

Bluetooth Crypto

Bluetooth Services

  • The :kconfig:option:CONFIG_BT_DIS_MODEL and :kconfig:option:CONFIG_BT_DIS_MANUF have been deprecated. Application developers should now use the :kconfig:option:CONFIG_BT_DIS_MODEL_NUMBER_STR and :kconfig:option:CONFIG_BT_DIS_MANUF_NAME_STR Kconfig options to set the string values in the Model Number String and Manufacturer Name String characteristics that are part of the Device Information Service (DIS).

Networking


  • The Prometheus metric creation has changed as user does not need to have a separate struct :c:struct:prometheus_metric any more. This means that the Prometheus macros :c:macro:PROMETHEUS_COUNTER_DEFINE, :c:macro:PROMETHEUS_GAUGE_DEFINE, :c:macro:PROMETHEUS_HISTOGRAM_DEFINE and :c:macro:PROMETHEUS_SUMMARY_DEFINE prototypes have changed. (:github:81712)

  • The default subnet mask on newly added IPv4 addresses is now specified with :kconfig:option:CONFIG_NET_IPV4_DEFAULT_NETMASK option instead of being left empty. Applications can still specify a custom netmask for an address with :c:func:net_if_ipv4_set_netmask_by_addr function if needed.

  • The HTTP server public API function signature for the :c:type:http_resource_dynamic_cb_t has changed, the data is now passed in a :c:struct:http_request_ctx which holds the data, data length and request header information. Request headers should be accessed via this parameter rather than directly in the :c:struct:http_client_ctx to correctly handle concurrent requests on different HTTP/2 streams.

  • The HTTP server public API function signature for the :c:type:http_resource_websocket_cb_t has changed, a :c:struct:http_request_ctx parameter has been added. The application may use this to access the request headers of the HTTP upgrade request, which may be useful in deciding whether to accept or reject a websocket connection.

  • An additional _res_fallback parameter has been added to the :c:macro:HTTP_SERVICE_DEFINE and :c:macro:HTTPS_SERVICE_DEFINE macros, allowing a fallback resource to be served if no other resources match the requested path. To retain the existing behaviour, NULL can be passed as the additional parameter.

  • The :kconfig:option:CONFIG_NET_L2_OPENTHREAD symbol no longer implies the :kconfig:option:CONFIG_NVS Kconfig option. Platforms using OpenThread must explicitly enable either the :kconfig:option:CONFIG_NVS or :kconfig:option:CONFIG_ZMS Kconfig option.

  • CONFIG_NET_TC_SKIP_FOR_HIGH_PRIO was deprecated in favour of :kconfig:option:CONFIG_NET_TC_TX_SKIP_FOR_HIGH_PRIO to avoid naming ambiguity.

Other Subsystems


Flash map

Filesystem

  • The EXT2 Kconfig symbol CONFIG_MAX_FILES has been renamed to :kconfig:option:CONFIG_EXT2_MAX_FILES.

hawkBit

  • The Kconfig symbols :kconfig:option:CONFIG_SMF and :kconfig:option:CONFIG_SMF_ANCESTOR_SUPPORT are now required to be enabled to use the hawkBit subsystem.

MCUmgr

  • The Kconfig :kconfig:option:CONFIG_MCUBOOT_BOOTLOADER_MODE_SWAP_WITHOUT_SCRATCH has been deprecated and replaced with :kconfig:option:CONFIG_MCUBOOT_BOOTLOADER_MODE_SWAP_USING_MOVE, applications should be updated to select this new symbol if they were selecting the old symbol.

  • The deprecated macro MGMT_CB_ERROR_RET has been removed.

Modem

LoRa

  • The function :c:func:lora_recv_async and callback lora_recv_cb now include an additional user_data parameter, which is a void pointer. This parameter can be used to reference any user-defined data structure. To maintain the current behavior, set this parameter to NULL.

Secure Storage

  • Store backends no longer automatically enable their dependencies through select or imply. Users must ensure that the depencies are enabled in their applications. :kconfig:option:CONFIG_SECURE_STORAGE_ITS_STORE_IMPLEMENTATION_SETTINGS previously enabled NVS and settings, which means the NVS settings backend would get used by default if ZMS wasn't enabled. (:github:86181)

Stream Flash

  • The function :c:func:stream_flash_init no longer does auto-detection of device size when size parameter is set to 0 and will return error in such case. User is now required to explicitly provide device size. Issue :github:71042 provides rationale for the change.

Architectures


  • native/POSIX

    • :kconfig:option:CONFIG_NATIVE_APPLICATION has been deprecated. Out-of-tree boards using this option should migrate to the native_simulator runner (:github:81232). For an example of how this was done with a board in-tree check :github:61481.
    • For the native_sim target :kconfig:option:CONFIG_NATIVE_SIM_NATIVE_POSIX_COMPAT has been switched to n by default, and this option has been deprecated. Ensure your code does not use the :kconfig:option:CONFIG_BOARD_NATIVE_POSIX option anymore (:github:81232).
  • x86

    • Kconfigs CONFIG_DISABLE_SSBD and CONFIG_ENABLE_EXTENDED_IBRS have been deprecated since v3.7. These were removed. Use :kconfig:option:CONFIG_X86_DISABLE_SSBD and :kconfig:option:CONFIG_X86_ENABLE_EXTENDED_IBRS instead.