Zephyr 4.5.0 (Working Draft)

We are pleased to announce the release of Zephyr version 4.5.0.

Major enhancements with this release include:

New driver classes

Zephyr 4.5 adds several new driver APIs, including:

New subsystems

Zephyr 4.5 adds several new subsystem APIs, including:

  • Video for controlling video drivers

An overview of the changes required or recommended when migrating your application from Zephyr v4.4.0 to Zephyr v4.5.0 can be found in the separate migration guide.

The following sections provide detailed lists of changes by component.

API Changes

Removed APIs and options

  • Architectures

    • Xtensa

      • CONFIG_XTENSA_BACKTRACE_EXCEPTION_DUMP_HOOK

  • Bluetooth

    • Host

      • The CONFIG_BT_RECV_CONTEXT choice and its options CONFIG_BT_RECV_WORKQ_SYS and CONFIG_BT_RECV_WORKQ_BT have been removed. The host now always processes low-priority HCI packets on the dedicated Bluetooth RX workqueue (the former CONFIG_BT_RECV_WORKQ_BT behavior). See the migration guide.

      • Selected Host work items have moved from the system workqueue to the dedicated Bluetooth RX workqueue. Application callbacks reached from those work items now run in the Bluetooth RX thread. See the migration guide for affected callback families.

      • The CONFIG_BT_HCI_RAW_H4 and CONFIG_BT_HCI_RAW_H4_ENABLE Kconfig options have been removed. They have had no effect since Zephyr 4.2, where the HCI raw layer switched to using H:4 packet encoding for all buffers unconditionally. Applications still setting these options can simply drop them.

  • Counter

    • CONFIG_COUNTER_MAXIM_DS3231

  • LLEXT

    • llext_get_fn_table, replaced by llext_get_fn_table_entry

  • Networking

    • CONFIG_NET_TC_SKIP_FOR_HIGH_PRIO

    • CONFIG_NET_SOCKETS_POLL_MAX

    • CONFIG_NET_GPTP_CLOCK_ACCURACY_*

    • net_ipv6_set_hop_limit()

    • net_if_ipv4_get_netmask()

    • net_if_ipv4_set_netmask()

    • net_if_ipv4_set_netmask_by_index()

    • openthread_state_changed_cb_register()

    • openthread_state_changed_cb_unregister()

    • openthread_start()

    • openthread_api_mutex_lock()

    • openthread_api_mutex_try_lock()

    • openthread_api_mutex_unlock()

    • struct openthread_state_changed_cb

    • TLS_CREDENTIAL_SERVER_CERTIFICATE

    • start_11r_roaming

  • Random

    • CONFIG_CTR_DRBG_CSPRNG_GENERATOR

    • CONFIG_CS_CTR_DRBG_PERSONALIZATION

  • West sign support for imgtool, which was deprecated in Zephyr 4.0, has been removed.

Deprecated APIs and options

New APIs and options

New Boards

New Shields

New Drivers

New Samples

Libraries / Subsystems

  • Crypto

    • Added AES CFB and OFB cipher mode support.

  • Mbed TLS

    • Mbed TLS was updated to version 4.1.1. Release notes can be found here.

    • TF-PSA-Crypto was updated to version 1.1.1. Release notes can be found here.

    • Added CONFIG_TF_PSA_CRYPTO_DISPATCH_DIR, which enables TF-PSA-Crypto to use custom implementations of crypto operation dispatch. This makes hardware acceleration of cryptographic operations possible by using an accelerator-aware dispatch implementation.

  • TF-M

    • TF-M was updated from version 2.2.2 to version 2.3.0. Release notes can be found here.

    • TF-M can now be compiled using LLVM by setting ZEPHYR_TOOLCHAIN_VARIANT to zephyr/llvm.

  • DFU

  • LoRa / LoRaWAN

  • Video

    • Introducing a video subsystem that inherits all the function names previously in video drivers.

  • Zbus

Devicetree

Other notable changes

  • Build system

    • The minimum required CMake version has been raised to 3.28.0, a version satisfied by the CMake package in the Ubuntu 24.04 LTS package repositories. See the migration guide for options if your distribution ships an older version.

  • Kernel

  • Timer

    • With CONFIG_SYSTEM_CLOCK_SLOPPY_IDLE enabled, a driver may no longer stop its time base as soon as no timeout is pending, if that breaks sys_clock_cycle_get_32() / sys_clock_cycle_get_64(). Those must keep counting while the CPU runs. Stopping the time base is permitted only from sys_clock_idle_enter(), where sys_clock_idle_exit() is guaranteed to follow.

    • Tickless system-timer drivers can now be built on a shared implementation header, drivers/timer/system_timer_generic.h, which owns the tick accounting each driver previously open-coded: the cycle-to-tick conversion, the announce baseline, the tick-aligned deadline and the counter wrap and range handling. A driver reduces to a few cycle-domain primitives, a cycle-counter read plus an absolute-compare arm. See the migration guide for how to use it (GitHub #115844).

  • Wi-Fi

    • Removed the samples/net/wifi/test_certs/rsa2k enterprise test certificates (DES-encrypted private keys). Use rsa2k_no_des instead.

    • The transmit power ceiling properties in wifi-tx-power-2g.yaml and wifi-tx-power-5g.yaml are no longer required and now carry conservative defaults, so a board that has not been characterised errs on the side of transmitting too little rather than exceeding a regulatory limit. Boards that have measured their own limits continue to state them explicitly, so no board changes behaviour.

  • MCUboot

    • SB_CONFIG_BOOT_SIGNATURE_KEY_FILE now accepts a comma-separated list of key files, embedding the public half of each in the MCUboot bootloader. When more than one key is given, MCUboot accepts an image signed with any of them – the typical use is a development bootloader that boots both development- and production-signed images, while production bootloaders embed only the production key. The first entry is the key the application is signed with and the rest are verification-only public keys. See Signing Binaries.

  • NXP

    • The NXP LPC DTSI files have been reorganized from the flat dts/arm/nxp/lpc/ directory into per-series subdirectories (lpc11u6x/, lpc51u68/, lpc54xxx/, lpc55xxx/, lpc84x/). See the migration guide for how to update out-of-tree board includes.

    • The NXP Kinetis DTSI files have been reorganized from the flat dts/arm/nxp/kinetis/ directory into per-series subdirectories (k2x/, k32lx/, k6x/, k8x/, ke1xf/, ke1xz/, kl2x/, kv5x/, kwx/). See the migration guide for how to update out-of-tree board includes.

    • The NXP MCX DTSI files have been reorganized from the flat dts/arm/nxp/mcx/ directory into per-series subdirectories (mcxa/, mcxc/, mcxe/, mcxl/, mcxn/, mcxw/). See the migration guide for how to update out-of-tree board includes.

    • The NXP i.MX RT DTSI files have been reorganized from the flat dts/arm/nxp/imxrt/ directory into per-series subdirectories (imxrt10xx/, imxrt11xx/, imxrt5xx/, imxrt6xx/, imxrt7xx/, imxrt118x/). See the migration guide for how to update out-of-tree board includes.

  • Arm

    • The non-secure variant of

      Arm Musca-S1 (v2m_musca_s1/musca_s1/ns) has been removed due to TF-M removing platform support for this board.

    • As a consequence of the above, the secure variant of Arm Musca-S1 (v2m_musca_s1) has been deprecated. This is to avoid a confusing state of partial support.

Trusted Firmware-A

  • CONFIG_TFA_BUILD_FIP is introduced to configure FIP (Firmware Image Package) generation. FIP generation is by default disabled, but can be enabled by setting CONFIG_TFA_BUILD_FIP=y in prj.conf or for custom boards, in the board’s <board>_defconfig file.