blob: 38953b1b30ecf4b8cd091f36b4e7f8af9bf12e5c [file] [log] [blame]
:orphan:
.. _zephyr_4.0:
Zephyr 4.0.0 (Working Draft)
############################
We are pleased to announce the release of Zephyr version 4.0.0.
Major enhancements with this release include:
* The introduction of the :ref:`secure storage<secure_storage>` subsystem. It allows the use of the
PSA Secure Storage API and of persistent keys in the PSA Crypto API on all board targets. It
is now the standard way to provide device-specific protection to data at rest. (:github:`76222`)
An overview of the changes required or recommended when migrating your application from Zephyr
v3.7.0 to Zephyr v4.0.0 can be found in the separate :ref:`migration guide<migration_4.0>`.
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-2024-8798: Under embargo until 2024-11-22
API Changes
***********
* Removed deprecated arch-level CMSIS header files
``include/zephyr/arch/arm/cortex_a_r/cmsis.h`` and
``include/zephyr/arch/arm/cortex_m/cmsis.h``. ``cmsis_core.h`` needs to be
included now.
* Removed deprecated ``ceiling_fraction`` macro. :c:macro:`DIV_ROUND_UP` needs
to be used now.
* Deprecated ``EARLY``, ``APPLICATION`` and ``SMP`` init levels can no longer be
used for devices.
Removed APIs in this release
============================
* Macro ``K_THREAD_STACK_MEMBER``, deprecated since v3.5.0, has been removed.
Use :c:macro:`K_KERNEL_STACK_MEMBER` instead.
* ``CBPRINTF_PACKAGE_COPY_*`` macros, deprecated since Zephyr 3.5.0, have been removed.
Deprecated in this release
==========================
* Deprecated the :c:func:`net_buf_put` and :c:func:`net_buf_get` API functions in favor of
:c:func:`k_fifo_put` and :c:func:`k_fifo_get`.
* The :ref:`kscan_api` subsystem has been marked as deprecated.
Architectures
*************
* ARC
* ARM
* ARM64
* Added initial support for :c:func:`arch_stack_walk` that supports unwinding via esf only
* RISC-V
* The stack traces upon fatal exception now prints the address of stack pointer (sp) or frame
pointer (fp) depending on the build configuration.
* When :kconfig:option:`CONFIG_EXTRA_EXCEPTION_INFO` is enabled, the exception stack frame (arch_esf)
has an additional field ``csf`` that points to the callee-saved-registers upon an fatal error,
which can be accessed in :c:func:`k_sys_fatal_error_handler` by ``esf->csf``.
* For SoCs that select ``RISCV_SOC_HAS_ISR_STACKING``, the ``SOC_ISR_STACKING_ESF_DECLARE`` has to
include the ``csf`` member, otherwise the build would fail.
* Xtensa
* x86
* Added initial support for :c:func:`arch_stack_walk` that supports unwinding via esf only
Kernel
******
Bluetooth
*********
* Audio
* :c:func:`bt_tbs_client_register_cb` now supports multiple listeners and may now return an error.
* Added APIs for getting and setting the assisted listening stream values in codec capabilities
and codec configuration:
* :c:func:`bt_audio_codec_cfg_meta_get_assisted_listening_stream`
* :c:func:`bt_audio_codec_cfg_meta_set_assisted_listening_stream`
* :c:func:`bt_audio_codec_cap_meta_get_assisted_listening_stream`
* :c:func:`bt_audio_codec_cap_meta_set_assisted_listening_stream`
* Host
* Added API :c:func:`bt_gatt_get_uatt_mtu` to get current Unenhanced ATT MTU of a given
connection (experimental).
* HCI Drivers
Boards & SoC Support
********************
* Added support for these SoC series:
* Made these changes in other SoC series:
* NXP S32Z270: Added support for the new silicon cut version 2.0. Note that the previous
versions (1.0 and 1.1) are no longer supported.
* Added support for these boards:
* Made these board changes:
* :ref:`native_posix<native_posix>` has been deprecated in favour of
:ref:`native_sim<native_sim>`.
* Support for Google Kukui EC board (``google_kukui``) has been dropped.
* STM32: Deprecated MCO configuration via Kconfig in favour of setting it through devicetree.
See ``samples/boards/stm32/mco`` sample.
* Added support for the following shields:
Build system and Infrastructure
*******************************
* Added support for .elf files to the west flash command for jlink, pyocd and linkserver runners.
* Extracted pickled EDT generation from gen_defines.py into gen_edt.py. This moved the following
parameters from the cmake variable ``EXTRA_GEN_DEFINES_ARGS`` to ``EXTRA_GEN_EDT_ARGS``:
* ``--dts``
* ``--dtc-flags``
* ``--bindings-dirs``
* ``--dts-out``
* ``--edt-pickle-out``
* ``--vendor-prefixes``
* ``--edtlib-Werror``
* Switched to using imgtool directly from the build system when signing images instead of calling
``west sign``.
Documentation
*************
* Added two new build commands, ``make html-live`` and ``make html-live-fast``, that automatically locally
host the generated documentation. They also automatically rebuild and rehost the documentation when changes
to the input ``.rst`` files are detected on the filesystem.
Drivers and Sensors
*******************
* ADC
* Battery
* CAN
* Charger
* Clock control
* Counter
* DAC
* Disk
* Display
* Ethernet
* LiteX: Renamed the ``compatible`` from ``litex,eth0`` to :dtcompatible:`litex,liteeth`.
* Flash
* GNSS
* GPIO
* Hardware info
* I2C
* I2S
* I3C
* Input
* LED
* lp5562: added ``enable-gpios`` property to describe the EN/VCC GPIO of the lp5562.
* lp5569: added ``charge-pump-mode`` property to configure the charge pump of the lp5569.
* lp5569: added ``enable-gpios`` property to describe the EN/PWM GPIO of the lp5569.
* LED code samples have been consolidated under the :zephyr_file:`samples/drivers/led` directory.
* LED Strip
* Updated ws2812 GPIO driver to support dynamic bus timings
* LoRa
* Mailbox
* MDIO
* MFD
* Modem
* Added support for the U-Blox LARA-R6 modem.
* Added support for setting the modem's UART baudrate during init.
* MIPI-DBI
* MSPI
* Pin control
* PWM
* rpi_pico: The driver now configures the divide ratio adaptively.
* Regulators
* Reset
* RTC
* RTIO
* SDHC
* 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
:dtcompatible:`jedec,jc-42.4-temp` compatible string instead to the ``microchip,mcp9808``
string.
* Serial
* LiteX: Renamed the ``compatible`` from ``litex,uart0`` to :dtcompatible:`litex,uart`.
* Nordic: Removed ``CONFIG_UART_n_GPIO_MANAGEMENT`` Kconfig options (where n is an instance
index) which had no use after pinctrl driver was introduced.
* SPI
* USB
* Video
* Watchdog
* Wi-Fi
Networking
**********
* ARP:
* CoAP:
* Connection manager:
* DHCPv4:
* DHCPv6:
* DNS/mDNS/LLMNR:
* gPTP/PTP:
* HTTP:
* IPSP:
* IPv4:
* IPv6:
* LwM2M:
* Location object: optional resources altitude, radius, and speed can now be
used optionally as per the location object's specification. Users of these
resources will now need to provide a read buffer.
* lwm2m_senml_cbor: Regenerated generated code files using zcbor 0.9.0
* Misc:
* MQTT:
* Network Interface:
* OpenThread
* PPP
* Shell:
* Sockets:
* Syslog:
* TCP:
* Websocket:
* Wi-Fi:
* zperf:
USB
***
Devicetree
**********
Kconfig
*******
Libraries / Subsystems
**********************
* Debug
* Demand Paging
* Formatted output
* Management
* MCUmgr
* Added support for :ref:`mcumgr_smp_group_10`, which allows for listing information on
supported groups.
* Fixed formatting of milliseconds in :c:enum:`OS_MGMT_ID_DATETIME_STR` by adding
leading zeros.
* Added support for custom os mgmt bootloader info responses using notification hooks, this
can be enabled witbh :kconfig:option:`CONFIG_MCUMGR_GRP_OS_BOOTLOADER_INFO_HOOK`, the data
structure is :c:struct:`os_mgmt_bootloader_info_data`.
* Added support for img mgmt slot info command, which allows for listing information on
images and slots on the device.
* hawkBit
* :c:func:`hawkbit_autohandler` now takes one argument. If the argument is set to true, the
autohandler will reshedule itself after running. If the argument is set to false, the
autohandler will not reshedule itself. Both variants are sheduled independent of each other.
The autohandler always runs in the system workqueue.
* Use the :c:func:`hawkbit_autohandler_wait` function to wait for the autohandler to finish.
* Running hawkBit from the shell is now executed in the system workqueue.
* Use the :c:func:`hawkbit_autohandler_cancel` function to cancel the autohandler.
* Use the :c:func:`hawkbit_autohandler_set_delay` function to delay the next run of the
autohandler.
* The hawkBit header file was separated into multiple header files. The main header file is now
``<zephyr/mgmt/hawkbit/hawkbit.h>``, the autohandler header file is now
``<zephyr/mgmt/hawkbit/autohandler.h>`` and the configuration header file is now
``<zephyr/mgmt/hawkbit/config.h>``.
* Logging
* Modem modules
* Power management
* Crypto
* Mbed TLS was updated to version 3.6.1. The release notes can be found at:
https://github.com/Mbed-TLS/mbedtls/releases/tag/mbedtls-3.6.1
* The Kconfig symbol :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG_ALLOW_NON_CSPRNG`
was added to allow ``psa_get_random()`` to make use of non-cryptographically
secure random sources when :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG`
is also enabled. This is only meant to be used for test purposes, not in production.
(:github:`76408`)
* The Kconfig symbol :kconfig:option:`CONFIG_MBEDTLS_TLS_VERSION_1_3` was added to
enable TLS 1.3 support from Mbed TLS. When this is enabled the following
new Kconfig symbols can also be enabled:
* :kconfig:option:`CONFIG_MBEDTLS_TLS_SESSION_TICKETS` to enable session tickets
(RFC 5077);
* :kconfig:option:`CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_ENABLED`
for TLS 1.3 PSK key exchange mode;
* :kconfig:option:`CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_EPHEMERAL_ENABLED`
for TLS 1.3 ephemeral key exchange mode;
* :kconfig:option:`CONFIG_MBEDTLS_SSL_TLS1_3_KEY_EXCHANGE_MODE_PSK_EPHEMERAL_ENABLED`
for TLS 1.3 PSK ephemeral key exchange mode.
* CMSIS-NN
* FPGA
* Random
* SD
* Shell:
* Reorganized the ``kernel threads`` and ``kernel stacks`` shell command under the
L1 ``kernel thread`` shell command as ``kernel thread list`` & ``kernel thread stacks``
* Added multiple shell command to configure the CPU mask affinity / pinning a thread in
runtime, do ``kernel thread -h`` for more info.
* ``kernel reboot`` shell command without any additional arguments will now do a cold reboot
instead of requiring you to type ``kernel reboot cold``.
* State Machine Framework
* Storage
* LittleFS: The module has been updated with changes committed upstream
from version 2.8.1, the last module update, up to and including
the released version 2.9.3.
* Task Watchdog
* POSIX API
* LoRa/LoRaWAN
* ZBus
* JWT (JSON Web Token)
* The following new Kconfigs were added to specify which library to use for the
signature:
* :kconfig:option:`CONFIG_JWT_USE_PSA` (default) use the PSA Crypto API;
* :kconfig:option:`CONFIG_JWT_USE_LEGACY` use legacy libraries, i.e. TinyCrypt
for ECDSA and Mbed TLS for RSA.
HALs
****
* Nordic
* STM32
* ADI
* Espressif
MCUboot
*******
OSDP
****
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
Highlights:
* Many code generation bugfixes
* You can now decide at run-time whether the decoder should enforce canonical encoding.
* Allow --file-header to accept a path to a file with header contents
Tests and Samples
*****************
Issue Related Items
*******************
Known Issues
============