blob: ea6b3eafe20d136cf09f0deddc434cb34fd6ede9 [file] [log] [blame]
:orphan:
.. _zephyr_2.6:
Zephyr 2.6.0 (Working Draft)
############################
We are pleased to announce the release of Zephyr RTOS version 2.6.0.
Major enhancements with this release include:
* Logging subsystem overhauled
* Added support for 64-bit ARCv3
* Split ARM32 and ARM64, ARM64 is now a top-level architecture
* Added initial support for Arm v8.1-m and Cortex-M55
* Removed legacy TCP stack support which was deprecated in 2.4
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
Known issues
************
You can check all currently known issues by listing them using the GitHub
interface and listing all issues with the `bug label
<https://github.com/zephyrproject-rtos/zephyr/issues?q=is%3Aissue+is%3Aopen+label%3Abug>`_.
API Changes
***********
* Driver APIs now return ``-ENOSYS`` if optional functions are not implemented.
If the feature is not supported by the hardware ``-ENOTSUP`` will be returned.
Formerly ``-ENOTSUP`` was returned for both failure modes, meaning this change
may require existing code that tests only for that value to be changed.
* The :c:func:`wait_for_usb_dfu` function now accepts a ``k_timeout_t`` argument instead of
using the ``CONFIG_USB_DFU_WAIT_DELAY_MS`` macro.
* Added disconnect reason to the :c:func:`disconnected` callback of :c:struct:`bt_iso_chan_ops`.
* Align error handling of :c:func:bt_l2cap_chan_send and
:c:func:`bt_iso_chan_send` so when an error occur the buffer is not unref.
* Added :c:func:`lwm2m_engine_delete_obj_inst` function to the LwM2M library API.
Deprecated in this release
* :c:macro:`DT_CLOCKS_LABEL_BY_IDX`, :c:macro:`DT_CLOCKS_LABEL_BY_NAME`,
:c:macro:`DT_CLOCKS_LABEL`, :c:macro:`DT_INST_CLOCKS_LABEL_BY_IDX`,
:c:macro:`DT_INST_CLOCKS_LABEL_BY_NAME`, and
:c:macro:`DT_INST_CLOCKS_LABEL` was deprecated in favor of utilizing
:c:macro:`DT_CLOCKS_CTLR` and variants.
* :c:macro:`DT_PWMS_LABEL_BY_IDX`, :c:macro:`DT_PWMS_LABEL_BY_NAME`,
:c:macro:`DT_PWMS_LABEL`, :c:macro:`DT_INST_PWMS_LABEL_BY_IDX`,
:c:macro:`DT_INST_PWMS_LABEL_BY_NAME`, and
:c:macro:`DT_INST_PWMS_LABEL` was deprecated in favor of utilizing
:c:macro:`DT_PWMS_CTLR` and variants.
* :c:macro:`DT_IO_CHANNELS_LABEL_BY_IDX`,
:c:macro:`DT_IO_CHANNELS_LABEL_BY_NAME`,
:c:macro:`DT_IO_CHANNELS_LABEL`,
:c:macro:`DT_INST_IO_CHANNELS_LABEL_BY_IDX`,
:c:macro:`DT_INST_IO_CHANNELS_LABEL_BY_NAME`, and
:c:macro:`DT_INST_IO_CHANNELS_LABEL` were deprecated in favor of utilizing
:c:macro:`DT_IO_CHANNELS_CTLR` and variants.
* :c:macro:`DT_DMAS_LABEL_BY_IDX`,
:c:macro:`DT_DMAS_LABEL_BY_NAME`,
:c:macro:`DT_INST_DMAS_LABEL_BY_IDX`, and
:c:macro:`DT_INST_DMAS_LABEL_BY_NAME` were deprecated in favor of utilizing
:c:macro:`DT_DMAS_CTLR` and variants.
* USB HID specific macros in ``<include/usb/class/usb_hid.h>`` are deprecated
in favor of new common HID macros defined in ``<include/usb/class/hid.h>``.
* USB HID Kconfig option USB_HID_PROTOCOL_CODE is deprecated.
USB_HID_PROTOCOL_CODE does not allow to set boot protocol code for specific
HID device. USB HID API function usb_hid_set_proto_code() can be used instead.
* USB HID class API is changed by removing get_protocol/set_protocol and
get_idle/set_idle callbacks. These callbacks are redundant or do not provide
any additional value and have led to incorrect usage of HID class API.
* The ``CONFIG_OPENOCD_SUPPORT`` Kconfig option has been deprecated in favor
of ``CONFIG_DEBUG_THREAD_INFO``.
* Disk drivers (``disk_access_*.c``) are moved to ``drivers/disk`` and renamed
according to their function. Driver's Kconfig options are revised and renamed.
SDMMC host controller drivers are selected when the corresponding node
in devicetree is enabled. Following application relevant Kconfig options
are renamed: ``CONFIG_DISK_ACCESS_RAM`` -> `CONFIG_DISK_DRIVER_RAM`,
``CONFIG_DISK_ACCESS_FLASH`` -> `CONFIG_DISK_DRIVER_FLASH`,
``CONFIG_DISK_ACCESS_SDHC`` -> `CONFIG_DISK_DRIVER_SDMMC`.
Disk API header ``<include/disk/disk_access.h>`` is deprecated in favor of
``<include/storage/disk_access.h>``.
* :c:func:`flash_write_protection_set()`.
* The ``CONFIG_NET_CONTEXT_TIMESTAMP`` is removed as it was only able to work
with transmitted data. The same functionality can be achieved by setting
``CONFIG_NET_PKT_RXTIME_STATS`` and ``CONFIG_NET_PKT_TXTIME_STATS`` options.
These options are also able to calculate the RX & TX times more accurately.
This means that support for the SO_TIMESTAMPING socket option is also removed
as it was used by the removed config option.
* The device power management (PM) APIs and data structures have been renamed
from ``device_pm_*`` to ``pm_device_*`` since they are not device APIs but PM
subsystem APIs. The same applies to enumerations and definitions, they now
follow the ``PM_DEVICE_*`` convention. Some other API calls such as
``device_set_power_state`` and ``device_get_power_state`` have been renamed to
``pm_device_state_set`` and ``pm_device_state_get`` in order to align with
the naming of other device PM APIs.
* The runtime device power management (PM) APIs is now synchronous by default
and the asynchronous API has the **_async** sufix. This change aligns the API
with the convention used in Zephyr. The affected APIs are
:c:func:`pm_device_put` and :c:func:`pm_device_get`.
* The following functions, macros, and structures related to the kernel
work queue API:
* :c:func:`k_work_pending()` replace with :c:func:`k_work_is_pending()`
* :c:func:`k_work_q_start()` replace with :c:func:`k_work_queue_start()`
* :c:struct:`k_delayed_work` replace with :c:struct:`k_work_delayable`
* :c:func:`k_delayed_work_init()` replace with
:c:func:`k_work_init_delayable`
* :c:func:`k_delayed_work_submit_to_queue()` replace with
:c:func:`k_work_schedule_for_queue()` or
:c:func:`k_work_reschedule_for_queue()`
* :c:func:`k_delayed_work_submit()` replace with :c:func:`k_work_schedule()`
or :c:func:`k_work_reschedule()`
* :c:func:`k_delayed_work_pending()` replace with
:c:func:`k_work_delayable_is_pending()`
* :c:func:`k_delayed_work_cancel()` replace with
:c:func:`k_work_cancel_delayable()`
* :c:func:`k_delayed_work_remaining_get()` replace with
:c:func:`k_work_delayable_remaining_get()`
* :c:func:`k_delayed_work_expires_ticks()` replace with
:c:func:`k_work_delayable_expires_get()`
* :c:func:`k_delayed_work_remaining_ticks()` replace with
:c:func:`k_work_delayable_remaining_get()`
* :c:macro:`K_DELAYED_WORK_DEFINE` replace with
:c:macro:`K_WORK_DELAYABLE_DEFINE`
==========================
Removed APIs in this release
* Removed support for the old zephyr integer typedefs (u8_t, u16_t, etc...).
* Removed support for k_mem_domain_destroy and k_mem_domain_remove_thread
* Removed support for counter_read and counter_get_max_relative_alarm
* Removed support for device_list_get
============================
Stable API changes in this release
==================================
Kernel
******
* Added :c:func:`k_mem_unmap()` so anonymous memory mapped via :c:func:`k_mem_map()`
can be unmapped and virtual address reclaimed.
* Added the ability to gather more statistics for demand paging, including execution
time histograms for eviction algorithms and backing stores.
Architectures
*************
* ARC
* Added new ARCv3 64bit ISA support and corresponding HS6x processor support
* Hardened SMP support
* Various minor fixes/improvements for ARC MWDT toolchain infrastructure
* Refactor of ARC Kconfig
* ARM
* AARCH32
* Added support for null pointer dereferencing detection in Cortex-M.
* Added initial support for Arm v8.1-m and Cortex-M55.
* Added support for preempting threads while they are performing secure calls in Cortex-M.
* Added support for memory region generation by the linker based on device tree node information in Cortex-M.
* Cleaned up definitions of SoC-specific memory regions in the common Cortex-M linker script.
* Added support for clearing NXP MPU region configuration during Zephyr early boot stage.
* Disallowed fpu hard ABI when building Non-Secure applications with TF-M on Cortex-M33.
* Enhanced register information dump in fault exceptions in Cortex-R.
* Fixed spurious interrupt handling in Cortex-R.
* AARCH64
* SMP support
* MMU dynamic mappings with page table sharing.
* Userspace (unprivileged) thread support.
* Standalone SMCCC support.
* XIP support.
* ARM64 is now a top-level standalone architecture.
* Support for Cortex-R82 and Armv8-R AArch64 MPU.
* Cache management support.
* Revamped boot code.
* Full FPU context switching.
* POSIX
* RISC-V
* x86
* Added SoC configuration for Lakemont SoC.
* Removed kconfig ``CONFIG_CPU_MINUTEIA`` as there is no user of this option.
* Renamed kconfig ``CONFIG_SSE*`` to ``CONFIG_X86_SSE*``.
* Extended the pagetable generation script to allow specifying additional
memory mapping during build.
* x86-32
* Added support for kernel image to reside in virtual address space, allowing
code execution and data manipulation via virtual addresses.
Bluetooth
*********
* Audio
* Split up ISO handling from audio handling, and moved the latter to its
own directory.
* Added the Volume Offset Control Service and client.
* Added the Audio Input Control Service and client.
* Added the Volume Control Service and client.
* Host
* Added basic support for Direction Finding.
* Added support for CTE connectionless transimission and reception over
periodic advertising.
* Refactored the HCI and ECC handling implementations.
* Stopped auto updating the device name in the adv data.
* Added support for logging security keys to be used by an air sniffer.
* Fixed a bonding issue where the local bond data was not being updated after
the remote device had removed it when the peer was not using the IRK stored
in the bonding information.
* Implemented the directory listing object to OTS.
* Added a function to access the ``bt_conn_iso`` object.
* Added a new configuration option for writeable device name.
* Added a new configuration option for minimum encryption key size.
* Added support for keypress notifications as an SMP responder.
* Added a new option, ``BT_LE_ADV_OPT_FORCE_NAME_IN_AD``, which forces the
device name to appear in the adv packet instead of the scan response.
* Added a security level check when sending a notification or indication.
* Added the ability to send HCI monitor traces over RTT.
* Refactored the Bluetooth buffer configuration for simplicity. See the
commit message of 6483e12a8ac4f495b28279a6b84014f633b0d374 for more info.
* Added support for concurrent advertising with multiple identities.
* Changed the logic to disable scanning before setting the random address.
* Fixed a crash where an ATT timeout occurred on a disconnected ATT channel.
* Changed the pairing procedure to fail pairing when both sides have the same
public key.
* Fixed an issue where GATT requests could deadlock the RX thread.
* Fixed an issue where a fixed passkey that was previously set could not be
cleared.
* Fixed an issue where callbacks for "security changed" and "pairing failed"
were not always called.
* Changed the pairing procedure to fail early if the remote device could not
reach the required security level.
* Fixed an issue where GATT notifications and Writes Without Response could
be sent out of order.
* Changed buffer ownership of ``bt_l2cap_chan_send``.
The application must now release the buffer for all returned errors.
* Mesh
* Added CDB handle key refresh phase.
* Added the ability to perform replay checks on SeqAuth.
* Added the sending of a Link Close message when closing a link.
* Added a Proxy callback structure for Node ID enabling and disabling.
* Added a check for the response address in the Configuration Client.
* Introduced a new acknowledged messages API.
* Reworked the periodic publication timer and poll timeout scheduling logic.
* Added reporting configured ``LPNTimeout`` in ``cfg_srv``.
* Ensured that provisioning output count number is at least 1.
* Ensured to encrypt initial friend poll with friend credentials.
* Stopped resetting the PB ADV reliable timer on retransmission.
* Bluetooth LE split software Controller
* Removed support for the nRF5340 PDK. Use the nRF5340 DK instead.
* Added basic support for Direction Finding.
* Added support for CTE connectionless transimission and reception over
periodic advertising.
* Added support for antenna switching in the context of Direction Finding.
* Added an invalid ACL data length check.
* Added basic support for the ISO Adaptation Layer.
* Added experimental support for Broadcast Isochronous Groups and Streams.
* Added partial experimental support for Connected Isochronous Groups and
Streams.
* Implemented extended connection creation and cancellation.
* Changed the policy to ignore connection requests from an already-connected
peer.
* Added a control procedure locking system.
* Added GPIO PA/LNA support for the Nordic nRF53x SoC series.
* Added FEM support for the nRF21540 IC.
* Added a new radio API to configure the CTE RX path.
* HCI Driver
* Added support for the Espressif ESP32 platform.
Boards & SoC Support
********************
* Added support for these SoC series:
* STM32F205xx
* STM32G03yxx, STM32G05yxx, STM32G070xx and STM32G0byxx
* STM32G4x1, STM32G4x3 and STM32G484xE
* STM32WL55xx
* Nuvoton npcx7m6fc, and npcx7m6fc
* Renesas RCar Gen3
* Silicon Labs EFR32FG13P
* ARM MPS3-AN547
* ARM FVP-AEMv8A
* ARM FVP-AEMv8R
* NXP LS1046A
* X86 Lakemont
* Removed support for these SoC series:
* ARM Musca-A
* Made these changes in other SoC series:
* Added Cypress PSoC-6 pinctrl support.
* STM32 L4/L5/WB series were updated for better power management support (CONFIG_PM=y).
* Backup SRAM added on a selection of STM32 series (F2/F4/F7/H7)
* Set TRACE_MODE to asynchronous and enable trace output pin on STM32 SoCs
* Changes for ARC boards:
* Added nSIM and QEMU simulation boards (nsim_hs6x and qemu_arc_hs6x)
with ARCv3 64bit HS6x processors
* Enabled MPU on qemu_arc_hs and qemu_arc_em boards
* Added cy8c95xx GPIO expander support to HSDK board
* Added support for these ARM boards:
* Actinius Icarus
* Actinius Icarus SoM
* Laird Connectivity BL654 Sensor Board
* Laird Connectivity Sentrius BT6x0 Sensor
* EFR32 Radio BRD4255A Board
* MPS3-AN547
* RAK4631
* Renesas R-Car H3ULCB
* Ronoth LoDev (based on AcSIP S76S / STM32L073)
* nRF9160 Thing Plus
* ST Nucleo F030R8
* ST Nucleo G0B1RE
* ST Nucleo H753ZI
* ST Nucleo L412RP-P
* ST Nucleo WL55JC
* ST STM32G071B Discovery
* Thingy:53
* u-blox EVK-BMD-30/35: BMD-300-EVAL, BMD-301-EVAL, and BMD-350-EVAL
* u-blox EVK-BMD-330: BMD-330-EVAL
* u-blox EVK-BMD-34/38: BMD-340-EVAL and BMD-341-EVAL
* u-blox EVK-BMD-34/38: BMD-345-EVAL
* u-blox EVK-BMD-360: BMD-360-EVAL
* u-blox EVK-BMD-34/48: BMD-380-EVAL
* u-blox EVK-ANNA-B11x
* u-blox EVK NINA-B11x
* u-blox EVK-NINA-B3
* u-blox EVK NINA-B40x
* Added support for these ARM64 boards:
* fvp_base_revc_2xaemv8a
* fvp_baser_aemv8r
* nxp_ls1046ardb
* Removed support for these ARM boards:
* ARM V2M Musca-A
* Nordic nRF5340 PDK
* Removed support for these X86 boards:
* up_squared_32
* qemu_x86_coverage
* minnowboard
* Made these changes in other boards:
* cy8ckit_062_ble: Refactored to configure by pinctrl.
* cy8ckit_062_ble: Added support to SCB[uart] with interrupt.
* cy8ckit_062_ble: Added support to SCB[spi].
* cy8ckit_062_ble: Added board revision schema.
* cy8ckit_062_wifi_bt: Refactored to configure by pinctrl.
* cy8ckit_062_wifi_bt: Added support to SCB[uart] with interrupt.
* lpcxpresso55s16: Board renamed from lpcxpresso55s16_ns to
lpcxpresso55s16 since the board does not have Trusted Firmware M
(TF-M) support.
* lpcxpresso55s28: Removed lpcxpresso55s28_ns config since the board
does not have Trusted Firmware M (TF-M) support.
* Added support for these following shields:
* FTDI VM800C Embedded Video Engine Board
* Generic ST7735R Display Shield
* NXP FRDM-STBC-AGM01
* Semtech SX1272MB2DAS LoRa Shield
Drivers and Sensors
*******************
* ADC
* Added support on TI CC32xx.
* Added support on ITE IT8xxx2.
* Added support for DMA and HW triggers in the MCUX ADC16 driver.
* Added ADC emulator.
* Moved definitions of ADC acquisition time macros so that those macros can be used in dts files.
* Bluetooth
* The Kconfig option ``CONFIG_BT_CTLR_TO_HOST_UART_DEV_NAME`` was removed.
Use the :ref:`zephyr,bt-c2h-uart chosen node <devicetree-chosen-nodes>`
directly instead.
* CAN
* A driver for CAN-FD based on the Bosch M_CAN IP was added. The driver
currently supports STM32G4 series MCUs. Additional support for Microchip
SAM and NXP chips is in progress.
* The CAN ISO-TP subsystem was enhanced to allow padding and fixed
addressing.
* Clock Control
* On STM32 series, system clock configuration has been moved from Kconfig to DTS.
Usage of existing Kconfig dedicated symbols (CONFIG_CLOCK_STM32_FOO) is now
deprecated.
* Console
* Added ``UART_CONSOLE_INPUT_EXPIRED`` and ``UART_CONSOLE_INPUT_EXPIRED_TIMEOUT``
Kconfig options to notify the power management module that UART console is
in use now and forbid it to enter low-power states.
* Counter
* Added support for ESP32 Counter
* DAC
* Added support for Microchip MCP4725
* Disk
* Added SDMMC support on STM32L4+
* Display
* Added support for ST7735R
* DMA
* Added support on STM32G0 and STM32H7
* EEPROM
* ESPI
* Added support for Microchip eSPI SAF
* Ethernet
* Added simulated PTP clock to e1000 Ethernet controller. This allows simple PTP
clock testing with Qemu.
* Separated PTP clock from gPTP support in mcux and gmac drivers. This allows
application to use PTP clock without enabling gPTP support.
* Converted clock control to use DEVICE_DT_GET in mcux driver.
* Changed to allow changing MAC address in gmac driver.
* Driver for STM32H7 is now using specific memory layout to fit DMA constraints
for RAM accesses.
* Flash
* flash_write_protection_set() has been deprecated and will be removed in
Zephyr 2.8. Responsibility for write/erase protection management has been
moved to the driver-specific implementation of the flash_write() and
flash_erase() API calls. All in-tree flash drivers have been updated,
and the protect implementation removed from their API tables.
During the deprecation period user code invoking
flash_write_protection_set() will have no effect, but the flash_write() and
flash_erase() driver shims will wrap their calls with calls to the protect
implementation if it is present in the API table.
Out-of-tree drivers must be updated before the wrapping in the shims is
removed when the deprecation period ends.
* Added QSPI support on STM32F7.
* GPIO
* :c:struct:`gpio_dt_spec`: a new structure which makes it more convenient to
access GPIO configuration in the :ref:`devicetree <dt-guide>`.
* New macros for initializing ``gpio_dt_spec`` values:
:c:macro:`GPIO_DT_SPEC_GET_BY_IDX`, :c:macro:`GPIO_DT_SPEC_GET_BY_IDX_OR`,
:c:macro:`GPIO_DT_SPEC_GET`, :c:macro:`GPIO_DT_SPEC_GET_OR`,
:c:macro:`GPIO_DT_SPEC_INST_GET_BY_IDX`,
:c:macro:`GPIO_DT_SPEC_INST_GET_BY_IDX_OR`,
:c:macro:`GPIO_DT_SPEC_INST_GET`, and :c:macro:`GPIO_DT_SPEC_INST_GET_OR`
* New helper functions for using ``gpio_dt_spec`` values:
:c:func:`gpio_pin_configure_dt`, :c:func:`gpio_pin_interrupt_configure_dt`
* Remove support for ``GPIO_INT_*`` flags in :c:func:`gpio_pin_configure()`.
The feature has been deprecated in the Zephyr 2.2 release. The interrupt
flags are now accepted by :c:func:`gpio_pin_interrupt_configure()`
function only.
* STM32 GPIO driver now supports clock gating using PM_DEVICE and PM_DEVICE_RUNTIME
* Hardware Info
* Added support on Silicon Labs Gecko SoCs
* I2C
* Added support on STM32F2
* I2S
* Added support for NXP LPC devices
* IEEE 802.15.4
* Fixed various issues in IEEE 802.15.4 L2 driver.
* nrf5:
* Made HW Radio Capabilities runtime.
* Enabled CSMA-CA on serialized host.
* Changed driver to load EUI64 from UICR.
* rf2xx:
* Added support for tx mode direct.
* Added support for tx mode CCA.
* Added support to enable promiscuous mode.
* Added support to enable pan coordinator mode.
* Interrupt Controller
* LED
* Add support for LED GPIO
* Added power management support for LED PWM
* LoRa
* Added support for SX1272
* Modem
* Converted wncm14a2a, quectel-bg9x, hl7800 and ublox-sara-r4 drivers to use
new DT device macros.
* Changed GSM modem to optionally do a factory reset when booting.
* Added autostarting support to GSM modem.
* Added wait for RDY instead of polling AT in BG9X.
* Fixed PDP context management for BG9X.
* Added TLS offload support to ublox-sara-r4.
* Made reset pin optional in ublox-sara-r4.
* Fixed potential buffer overrun in hl7800.
* Fixed build errors on 64-bit platforms.
* Added support for dialup modem in PPP driver.
* Pinmux
* PWM
* Added support on STM32F2 and STM32L1.
* Added support on Silicon Labs Gecko SoCs.
* Sensor
* Added support for STM32 internal (CPU) temperature sensor
* Serial
* Extended Cypress PSoC-6 SCB[uart] driver to support interrupts.
* SPI
* Added Cypress PSoC-6 SCB[spi] driver.
* Default SPI_SCK configuration is now pull-down for all STM32 to minimize power
consumption in stop mode.
* Timer
* USB
* Added support on STM32H7
* Watchdog
* WiFi
* Converted eswifi and esp drivers to new DT device macros
* esp:
* Fixed hostname configuration.
* Removed POSIX API dependency.
* Renamed offloading driver from esp to esp_at.
* Added esp32 wifi driver support.
Networking
**********
* CoAP:
* Fixed coap_find_options() to return 0 when options are empty.
* DHCPv4:
* Fixed DHCPv4 dependency to network event management options.
* DNS:
* Added locking to DNS library prevent concurrent access.
* Added 10ms delay when rescheduling query timeout handler in DNS. This allows
applications to run and handle the timeout gracefully.
* Added support for reconfiguring DNS resolver when DNS servers are changed.
This is supported by DHCPv4 and PPP.
* HTTP:
* Added support for storing numeric HTTP error code in client API.
* IPv4:
* Added IGMPv2 support to IPv4.
* Removed IPv4 multicast address check when selecting source address during TX.
* LwM2M:
* Fixed query buffer size so that it is large enough to encode all query strings.
* Added data validation callback.
* Fixed Register/Update to use link_format writer.
* Added application/link-format content writer.
* Removed .well-known/core handling.
* Introduced attribute handling helper functions.
* Removed obsolete LWM2M_IPSO_TIMESTAMP_EXTENSIONS option.
* Added IPSO Buzzer, Push Button, On/Off Switch, Accelerometer, Pressure Sensor,
Humidity, Generic Sensor and Temperature object implementation to support
object model in version 1.1
* Unified reusable resources creation.
* Added support for object versioning.
* Changed to allow cancel-observe to match path.
* Made pmin and pmax attributes optional.
* Added API function to delete object instance.
* Fixed Registration Update send on object creation.
* Changed to only parse TLV from the first block.
* Changed to trigger registration update only when registered.
* Misc:
* Added UDP packet sending support to net-shell.
* Fixed source network interface setting when sending and when there are
multiple network interfaces.
* Changed connection managed to ignore not used network interfaces.
* Added locking to network interface API function calls.
* Changed to allow application to disable IPv4 or IPv6 support for a network interface.
* Added support for virtual network interfaces.
* Added support for IPv4/v6 tunneling network interface.
* Added net events notification for PPP dead and running states.
* Added PPP LCP MRU option support.
* Added PPP IPCP IP and DNS address peer options support.
* Added support for network packet capturing and sending data to external system
for analysis.
* Enabled running without TX or RX threads. By default, one RX thread and
no TX thread is created. If userspace support is enabled, then one RX and one
TX thread are created. This improves the network transmit latency when a
packet is sent from application.
* Changed to push highest priority net_pkt directly to driver when sending and if
there is at least one TX thread.
* Changed to use k_fifo instead of k_work in RX and TX processing. This prevents
k_work from accessing already freed net_pkt struct. This also improves the latency
of network packets when the data is passed between different network threads.
* Changed to check network interface status when sending and return ENETDOWN to the
application if data cannot be sent.
* Fixed echo-server sample application and set netmask properly when VLAN is
enabled.
* OpenThread:
* Added microseconds timer API support.
* Changed to switch radio off when stopping diagnostics.
* Enabled CSL delayed transmissions.
* Added CSL transmitter and receiver API support.
* Changed to init NCP after USB communication is established.
* Aligned with the new NCP API.
* Aligned with the new CLI API.
* Introduced new OpenThread options.
* Added Link Metrics API support.
* Selected ECDSA when SRP is enabled.
* Made child related options only visible on FTD.
* Changed OT shell not to execute OT commands when shell is not ready.
* Socket:
* Added SO_PROTOCOL and SO_TYPE get socket option.
* Added MSG_WAITALL receive socket option flag.
* Added MSG_TRUNC socket option flag.
* Added support for close method for packet sockets.
* Added locking to socket API function calls.
* Added support for SO_BINDTODEVICE socket option.
* Added support for SO_SNDTIMEO socket option.
* Made NET_SOCKETS_POSIX_NAMES be on by default. This allows application to use
normal BSD socket API calls without adding the zsock prefix.
* Added sample application to use SO_TXTIME socket option.
* TCP:
* Implemented ISN calculation according to RFC6528 in TCP. This is optional and
enabled by default, and can be disabled if needed.
* Removed legacy TCP stack support.
* Changed TCP to use private work queue in order not to block system work queue.
* TLS:
* Fixed userspace access to TLS socket.
* Added socket option support for setting and getting DTLS handshake timeout.
Bluetooth
*********
* Host
* Mesh
* BLE split software Controller
* HCI Driver
Build and Infrastructure
************************
* Improved support for additional toolchains:
* Support for the Intel oneApi toolchain.
* Devicetree
- :c:macro:`DT_COMPAT_GET_ANY_STATUS_OKAY`: new macro
- the ``96b-lscon-3v3`` and ``96b-lscon-1v8`` :ref:`compatible properties
<dt-important-props>` now have ``linaro,`` vendor prefixes, i.e. they are
now respectively :dtcompatible:`linaro,96b-lscon-3v3` and
:dtcompatible:`linaro,96b-lscon-1v8`.
This change was made to bring Zephyr's devicetrees into compliance with an
upstream Linux regular expression used to validate compatible properties.
This regular expression requires a letter as the first character.
* West (extensions)
* This section only covers west :ref:`west-extensions` maintained in the
zephyr repository. For release notes on west's built-in features, see
:ref:`west-release-notes`.
* Changes to the runners backends used for :ref:`flashing and debugging
commands <west-build-flash-debug>`:
* bossac runner: added legacy mode option into extended SAM-BA
bootloader selection. This extends compatibility between Zephyr and
some Arduino IDE bootloaders.
* jlink runner: Zephyr thread awareness is now available in GDB by default
for application builds with :option:`CONFIG_DEBUG_THREAD_INFO` set to ``y``
in :ref:`kconfig`. This applies to ``west debug``, ``west debugserver``,
and ``west attach``. JLink version 7.11b or later must be installed on the
host system, with JLink 7.20 or later strongly recommended.
* jlink runner: default ``west flash`` output is less verbose. The old
behavior is still available when run as ``west --verbose flash``.
* jlink runner: when flashing, this runner now prefers a ``.hex`` file
generated by the build system to a ``.bin``. Unlike ``.bin``, the HEX
format includes information on the image's address range in flash, so
this works better when flashing Zephyr images linked for locations other
than the target's boot address, e.g. images meant to be run by
bootloaders. The ``.bin`` file is still used as a fallback if a HEX File
is not present.
* openocd runner: support for ``west debug`` and ``west attach`` has been
fixed. Previously with this runner, ``west debug`` behaved like ``west
attach`` should, and ``west attach`` behaved like ``west debugserver``
should.
* pyocd runner: board-specific pyOCD configuration files in YAML can now be
placed in :file:`support/pyocd.yaml` inside the board directory. See
:zephyr_file:`boards/arm/reel_board/support/pyocd.yaml` for an example,
and the pyOCD documentation for details on its configuration format.
* ``west spdx``: new command which can be used to generate SPDX software
bills of materials for a Zephyr application build. See :ref:`west-spdx`.
Libraries / Subsystems
**********************
* Disk
* Management
* MCUmgr
* updatehub
* Settings
* Random
* POSIX subsystem
* Power management
* ``device_pm_control_nop`` has been removed in favor of ``NULL`` when device
PM is not supported by a device. In order to make transition easier for
out-of-tree users a macro with the same name is provided as an alias to
``NULL``. The macro is flagged as deprecated to make users aware of the
change.
* Devices set as busy are no longer suspended by the system power management.
* The time necessary to exit a sleep state and return to the active state was
added in ``zephyr,power-state`` binding and accounted when the system
changes to a power state.
* Device runtime power management (PM), former IDLE runtime, was
completely overhauled.
* Multiple threads can wait an operation (:c:func:`pm_device_get_async` and
:c:func:`pm_device_put_async`) to finish.
* A new API :c:func:`pm_device_wait` was added so that drivers can easily
wait for an async request to finish.
* The API can be used in :ref:`pre-kernel <api_term_pre-kernel-ok>` stages.
* Several concurrence issues related with atomics access and the usage
of the polling API have been fixed. Condition variables are now used to
handle notification.
* Logging
* Introduced logging v2 which allows logging any variable types (including
floating point variables). New version does not require transient string
duplication (``log_strdup()``). Legacy mode remains and is still the default
but user API is not changed and modes are interchangeable.
``CONFIG_LOG2_MODE_DEFERRED`` or ``CONFIG_LOG2_MODE_IMMEDIATE`` enable
logging v2. Logging backend API is extended to support v2 and the most
popular backends (UART, shell) are updated.
* LVGL
* Shell
* Storage
* Task Watchdog
* This new subsystem was added with this release and allows supervision of
individual threads. It is based on a regularly updated kernel timer,
whose ISR is never actually called in regular system operation.
An existing hardware watchdog can be used as an optional fallback if the
task watchdog itself gets stuck.
* Tracing
* ``CONFIG_TRACING_CPU_STATS`` was removed in favor of
``CONFIG_THREAD_RUNTIME_STATS`` which provides per thread statistics. The
same functionality is also available when Thread analyzer is enabled with
the runtime statistics enabled.
* Expanded and overhauled tracing hooks with more coverage and support for
tracing all kernel objects and basic power management operations.
* Added support for Percepio Tracealyzer, a commercial tracing tool which now
has built-in support for Zephyr. We now have the Percepio tracerecorder
integrated as a module.
* Expanded support for the new hooks in SEGGER Systemview and enhanced the
description file with support for all APIs.
* Debug
* SEGGER Systemview and RTT SDK updated to version v3.30
* OS
* Reboot functionality has been moved to ``subsys/os`` from ``subsys/power``.
A consequence of this movement is that the ``<power/reboot.h>`` header has
been moved to ``<sys/reboot.h>``. ``<power/reboot.h>`` is still provided
for compatibility, but it will produce a warning to inform users of the
relocation.
HALs
****
* HALs are now moved out of the main tree as external modules and reside in
their own standalone repositories.
Trusted Firmware-m
******************
* Synchronized Trusted-Firmware-M module to the upstream v1.3.0 release.
* Configured QEMU to run Zephyr samples and tests in CI on mps2_an521_nonsecure
(Cortex-M33 Non-Secure) with TF-M as the secure firmware component.
* Added Kconfig options for selecting the desired TF-M profile and build type
* Added Kconfig options for enabling the desired TF-M secure partitions
* Added a new sample to run the PSA tests with Zephyr
* Added a new sample to run the TF-M regression tests using the Zephyr build system
* Added support for new platforms
* BL5340 DVK
* STM32L562E DK
* NOTE: Trusted-Firmware-M can not currently be used with mbedtls 2.26.0 when
PSA APIs are enabled in mbedtls (``MBEDTLS_USE_PSA_CRYPTO`` and
``MBEDTLS_PSA_CRYPTO_C``). If both TF-M and mbedtls are required, mbedtls
must be used without the PSA APIs. This will be resolved in a future
update to mbedtls.
Documentation
*************
* Documentation look and feel has been improved by using a new stylesheet.
* Doxygen is now run by Sphinx using the ``doxyrunner`` custom extension. The
new extension centralizes multiple scattered workarounds that existed before
in a single place.
* Doxygen now runs with ``WARN_AS_ERROR`` enabled.
* Documentation known warnings are now filtered using a custom Sphinx extension:
``warnings_filter``. This extension removes the need of post-processing
the Sphinx output and allows to use the ``-W`` option (treat warnings as
errors) which has been enabled by default.
* External content, e.g. samples and boards documentation is now handled by
the ``external_content`` extension.
* Sphinx is now run in parallel mode by default (``-j auto``).
* The documentation helper ``Makefile`` has been moved from the repository root
to the ``doc`` folder.
Tests and Samples
*****************
* Twister's ``dt_compat_enabled_with_alias()`` test case filter was deprecated
in favor of a new ``dt_enabled_alias_with_parent_compat()`` filter. The old
filter is still supported, but it may be removed in a future release.
To update, replace uses like this:
.. code-block:: yaml
filter: dt_compat_enabled_with_alias("gpio-leds", "led0")
with:
.. code-block:: yaml
filter: dt_enabled_alias_with_parent_compat("led0", "gpio-leds")
* Add a feature which handles pytest script in twister and provide an example.
* Provide test excution time per ztest testcase.
* Added and refined some testcases, most of them are negative testcases, to
improve the test code coverage:
* Testcases of x86's regular/direct interrupts and offload job from ISR.
* Testcases of SMP, and enabled SMP for existed testing of semaphore, condvar, etc.
* Testcases of memory protection, userspace and memory heap.
* Testcases of data structure include stack, queue, ringbuffer and rbtree.
* Testcases of IPC include pipe, poll, mailbox, message queue.
* Testcases of synchronization include mutex, semaphore, atomic operations.
* Testcases of scheduling and thread.
* Testcases of testing for arch_nop() and errno.
* Testcases of libc and posix API.
* Testcases of log and sensor subsystem.
Issue Related Items
*******************
These GitHub issues were addressed since the previous 2.5.0 tagged
release: