This is the documentation for the latest (main) development branch of Zephyr. If you are looking for the documentation of previous releases, use the drop-down menu on the left and select the desired version.

Zephyr 2.7.0

We are pleased to announce the release of Zephyr RTOS version 2.7.0 (LTS2).

Major enhancements since v2.6.0 include:

  • Bluetooth Audio, Direction Finding, and Mesh improvements

  • Support for Bluetooth Advertisement PDU Chaining

  • Added support for armclang / armlinker toolchain

  • Added support for MWDT C / C++ toolchain

  • Update to CMSIS v5.8.0 (Core v5.5.0, DSP v1.9.0)

  • Support for M-Profile Vector Extensions (MVE) on ARMv8.1-M

  • Improved thread safety for Newlib and C++ on SMP-capable systems

  • IEEE 802.15.4 Software Address Filtering

  • New Action-based Power Management API

  • USB Device Framework now includes all Chapter 9 defines and structures

  • Generic System Controller (syscon) driver and emulator

  • Linker Support for Tightly-Coupled Memory in RISC-V

  • Additional Blocking API calls for LoRa

  • Support for extended PCI / PCIe capabilities, improved MIS-X support

  • Added Support for Service Type Enumeration (STE) with mDNS / DNS Service Discovery

  • Added Zephyr Thread Awareness for OpenOCD to West

  • EEPROM now can be emulated in flash

  • Added both Ethernet MDIO and Ethernet generic PHY drivers

Additional Major enhancements since v1.14.0 (LTS1) include:

  • The kernel now supports both 32- and 64-bit architectures

  • We added support for SOCKS5 proxy

  • Introduced support for 6LoCAN, a 6Lo adaption layer for Controller Area Networks

  • We added support for Point-to-Point Protocol (PPP)

  • We added support for UpdateHub, an end-to-end solution for over-the-air device updates

  • We added support for ARM Cortex-R Architecture

  • Normalized APIs across all architectures

  • Expanded support for ARMv6-M architecture

  • Added support for numerous new boards and shields

  • Added numerous new drivers and sensors

  • Added BLE support on Vega platform

  • Memory size improvements to Bluetooth host stack

  • We added initial support for 64-bit ARMv8-A architecture

  • CANopen protocol support through 3rd party CANopenNode stack

  • LoRa support was added along with the SX1276 LoRa modem driver

  • A new Zephyr CMake package has been introduced

  • A new Devicetree API which provides access to virtually all DT nodes and properties

  • The kernel timeout API has been overhauled

  • A new k_heap/sys_heap allocator, with improved performance

  • Zephyr now integrates with the TF-M (Trusted Firmware M) PSA-compliant framework

  • The Bluetooth Low Energy Host now supports LE Advertising Extensions

  • The CMSIS-DSP library is now included and integrated

  • Introduced initial support for virtual memory management

  • Added Bluetooth host support for periodic advertisement and isochronous channels.

  • Added a new TCP stack which improves network protocol testability

  • Introduced a new toolchain abstraction with initial support for GCC and LLVM/Clang

  • Moved to using C99 integer types and deprecate Zephyr integer types

  • Introduced support for the SPARC architecture and the LEON implementation

  • Added Thread Local Storage (TLS) support

  • Added support for per thread runtime statistics

  • Added support for building with LLVM on X86

  • Added new synchronization mechanisms using Condition Variables

  • Add support for demand paging, initial support on X86

  • 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

  • Tracing subsystem overhaul / added support for Percepio Tracealyzer

  • Device runtime power management (PM) completely overhauled

  • Automatic SPDX SBOM generation has been added to West

  • Added an example standalone Zephyr application

The following sections provide detailed lists of changes by component.

Known issues

You can check all currently known issues by listing them using the GitHub interface and listing all issues with the bug label.

API Changes

Deprecated in this release

Modified in this release

  • The following Bluetooth macros and structures in hci.h have been modified to align with the inclusive naming in the v5.3 specification:

    • BT_LE_FEAT_BIT_SLAVE_FEAT_REQ is now BT_LE_FEAT_BIT_PER_INIT_FEAT_XCHG

    • BT_LE_FEAT_BIT_CIS_MASTER is now BT_LE_FEAT_BIT_CIS_CENTRAL

    • BT_LE_FEAT_BIT_CIS_SLAVE is now BT_LE_FEAT_BIT_CIS_PERIPHERAL

    • BT_FEAT_LE_SLAVE_FEATURE_XCHG is now BT_FEAT_LE_PER_INIT_FEAT_XCHG

    • BT_FEAT_LE_CIS_MASTER is now BT_FEAT_LE_CIS_CENTRAL

    • BT_FEAT_LE_CIS_SLAVE is now BT_FEAT_LE_CIS_PERIPHERAL

    • BT_LE_STATES_SLAVE_CONN_ADV is now BT_LE_STATES_PER_CONN_ADV

    • BT_HCI_OP_LE_READ_WL_SIZE is now BT_HCI_OP_LE_READ_FAL_SIZE

    • bt_hci_rp_le_read_wl_size is now bt_hci_rp_le_read_fal_size

    • bt_hci_rp_le_read_wl_size::wl_size is now bt_hci_rp_le_read_fal_size::fal_size

    • BT_HCI_OP_LE_CLEAR_WL is now BT_HCI_OP_LE_CLEAR_FAL

    • BT_HCI_OP_LE_ADD_DEV_TO_WL is now BT_HCI_OP_LE_REM_DEV_FROM_FAL

    • bt_hci_cp_le_add_dev_to_wl is now bt_hci_cp_le_add_dev_to_fal

    • BT_HCI_OP_LE_REM_DEV_FROM_WL is now BT_HCI_OP_LE_REM_DEV_FROM_FAL

    • bt_hci_cp_le_rem_dev_from_wl is now bt_hci_cp_le_rem_dev_from_fal

    • BT_HCI_ROLE_MASTER is now BT_HCI_ROLE_CENTRAL

    • BT_HCI_ROLE_SLAVE is now BT_HCI_ROLE_PERIPHERAL

    • BT_EVT_MASK_CL_SLAVE_BC_RX is now BT_EVT_MASK_CL_PER_BC_RX

    • BT_EVT_MASK_CL_SLAVE_BC_TIMEOUT is now BT_EVT_MASK_CL_PER_BC_TIMEOUT

    • BT_EVT_MASK_SLAVE_PAGE_RSP_TIMEOUT is now BT_EVT_MASK_PER_PAGE_RSP_TIMEOUT

    • BT_EVT_MASK_CL_SLAVE_BC_CH_MAP_CHANGE is now BT_EVT_MASK_CL_PER_BC_CH_MAP_CHANGE

    • m_* structure members are now c_*

    • s_* structure members are now p_*

  • The CONFIG_BT_PERIPHERAL_PREF_SLAVE_LATENCY Kconfig option is now CONFIG_BT_PERIPHERAL_PREF_LATENCY

  • The CONFIG_BT_CTLR_SLAVE_FEAT_REQ_SUPPORT Kconfig option is now CONFIG_BT_CTLR_PER_INIT_FEAT_XCHG_SUPPORT

  • The CONFIG_BT_CTLR_SLAVE_FEAT_REQ Kconfig option is now CONFIG_BT_CTLR_PER_INIT_FEAT_XCHG

Changes in this release

Removed APIs in this release

  • Removed support for the deprecated DEVICE_INIT and DEVICE_AND_API_INIT macros.

  • Removed support for the deprecated BUILD_ASSERT_MSG macro.

  • Removed support for the deprecated GET_ARG1, GET_ARG2 and GET_ARGS_LESS_1 macros.

  • Removed support for the deprecated Kconfig PRINTK64 option.

  • Removed support for the deprecated bt_set_id_addr function.

  • Removed support for the Kconfig USB option. Option USB_DEVICE_STACK is sufficient to enable USB device support.

  • Removed CONFIG_OPENTHREAD_COPROCESSOR_SPINEL_ON_UART_ACM and CONFIG_OPENTHREAD_COPROCESSOR_SPINEL_ON_UART_DEV_NAME Kconfig options in favor of chosen node zephyr,ot-uart.

  • Removed CONFIG_BT_UART_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,bt-uart.

  • Removed CONFIG_BT_MONITOR_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,bt-mon-uart.

  • Removed CONFIG_MODEM_GSM_UART_NAME Kconfig option in favor of direct use of chosen node zephyr,gsm-ppp.

  • Removed CONFIG_UART_MCUMGR_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,uart-mcumgr.

  • Removed CONFIG_UART_CONSOLE_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,console.

  • Removed CONFIG_UART_SHELL_ON_DEV_NAME Kconfig option in favor of direct use of chosen node zephyr,shell-uart.


Stable API changes in this release

  • Bluetooth

  • Networking

    • Added IPv4 address support to the multicast group join/leave monitor. The address parameter passed to the callback function was therefore changed from in6_addr to net_addr type.

Kernel

Architectures

  • ARC

    • Add SMP support to ARCv3 HS6x

    • Add MWDT C library support

    • Add basic C++ support with MWDT toolchain

    • Add MPUv3 and MPUv6 support

    • Remove dead PM code from ARC core interrupt controller driver

    • Add updating arc connect debug mask dynamically

  • ARM

    • AARCH32

      • Updated CMSIS version to 5.8.0

      • Added support for FPU in QEMU for Cortex-M, allowing to build and execute tests in CI with FPU and FPU_SHARING options enabled.

      • Added MPU support for Cortex-R

    • AARCH64

  • RISC-V

    • Added support to RISC-V CPU devicetree compatible bindings

    • Added support to link with ITCM & DTCM sections

  • x86

Bluetooth

  • Updated all APIs and internal implementation to be conformant with the new inclusive terminology in version 5.3 of the Bluetooth Core Specification

  • Audio

    • Added the Microphone Input Control Service and client.

    • Changed the connected isochronous API to use a group-based opaque struct

    • Split the configuration options into connected and broadcast groups

    • Added support for a new sent callback to be notified when an SDU has been transmitted

  • Direction Finding

    • Added configurability for conditional CTE RX support

    • Added support for CTE periodic advertising chain transmissions

  • Host

    • Added support for setting more than 251 bytes of advertising data

    • Added new callbacks on ATT MTU update

    • Added a new call to retrieve the handle of an advertising set

    • Fixed key overwrite algorithm when working with multiple connections

    • Added configuration support for GATT security re-establishment

    • Added support for writing a long device name

    • OTS: Added object name write capability

  • Mesh

    • Added return value for opcode callback

    • Added support for OOB Public Key in the provisionee role

    • Added a new API to manually store pending RPL entries

    • Added support for application access to mesh messages

    • Refactored the Mesh Model Extensions

  • Bluetooth LE split software Controller

    • Added support for advertising PDU chaining, implementing advertising trains for Direction Finding

    • Added support for adding or removing the ACAD field in Common Extended Header Format to support BIGInfo

    • Refactored the legacy, extended and periodic advertising time reservation slot calculations

    • Implemented CSA#2 in Extended Advertising and Broadcast ISO sub-events

    • Added support for Extended Active Scanning

    • Added support for advertising on the S2 and S8 coding schemes

    • Added support for the Periodic Advertising channel map update indication

  • HCI Driver

    • Removed all CONFIG_BT_*_ON_DEV_NAME Kconfig options, use Devicetree instead

Boards & SoC Support

  • Added support for these SoC series:

    • Added STM32U5 basic SoC support

  • Removed support for these SoC series:

  • Made these changes in other SoC series:

    • Added Atmel SAM0 pinctrl support

    • Added Atmel SAM4L USBC device controller

    • Added Atmel GMAC support for MDIO driver

    • Added Atmel GMAC support to use generic PHY driver

    • Added Atmel SAM counter (TC) Driver

    • Added Atmel SAM DAC (DACC) driver

    • Enabled Atmel SAM clock-frequency support from devicetree

    • Free Atmel SAM TRACESWO pin when unused

    • Enabled Cypress PSoC-6 Cortex-M4 support

    • Added low power support to STM32L0, STM32G0 and STM32WL series

    • STM32: Enabled ART Flash accelerator by default when available (F2, F4, F7, H7, L5)

    • STM32: Added Kconfig option to enable STM32Cube asserts (CONFIG_USE_STM32_ASSERT)

    • NXP FRDM-K82F: Added arduino_i2c and arduino_spi aliases

    • NXP i.MX RT series: Added support for flash controller with XIP

    • NXP i.MX RT series: Added TRNG support

    • NXP i.MX RT1170: Added LPSPI driver support

    • NXP i.MX RT1170: Added ADC driver support

    • NXP i.MX RT1170: Enabled Segger RTT/SystemView

    • NXP i.MX RT1170: Added MCUX FlexCan support

    • NXP i.MX RT1064: Added watchdog driver support

    • NXP i.MX RT1064: Added DMA driver support

    • NXP i.MX RT600: Added arduino serial port

    • NXP i.MX RT600: Add mcuboot flash partitions

    • NXP i.MX RT600: Added counter support

    • NXP i.MX RT600: Added PWM support

    • NXP i.MX RT600: Added disk driver support

    • NXP i.MX RT600: Added USB driver support

    • NXP i.MX RT600: Added LPADC driver support

    • NXP i.MX RT600: Added CTimer Counter support

    • NXP KE1xF: Added SoC Power Management support

    • NXP LPC55s69: Added USB driver support

    • NXP LPC55s69: Added ctimer driver support

    • NXP LPC55s69: Added I2S driver support

  • Changes for ARC boards:

    • Implement ‘run’ command for SMP nSIM simulation board

    • Enable upstream verification on QEMU ARCv3 HS6x board (qemu_arc_hs6x)

    • Implement creg GPIO driver and add it to hsdk and em_starterkit boards

  • Changes for ARM boards:

    • Added SPI support on Arduino standard SPI when possible

  • Added support for these ARM boards:

    • Dragino NBSN95 NB-IoT Sensor Node

    • Seeedstudio LoRa-E5 Dev Board

    • ST B_U585I_IOT02A Discovery kit

    • ST Nucleo F446ZE

    • ST Nucleo U575ZI Q

    • ST STM32H735G Discovery

    • PJRC Teensy 4 Board

  • Added support for these ARM64 boards:

  • Removed support for these ARM boards:

  • Removed support for these X86 boards:

  • Made these changes in other boards:

    • arduino_due: Added support for TC driver

    • atsame54_xpro: Added support for PHY driver

    • sam4l_ek: Added support for TC driver

    • sam4e_xpro: Added support for PHY driver

    • sam4e_xpro: Added support for TC driver

    • sam4s_xplained: Added support for TC driver

    • sam_e70_xplained: Added support for DACC driver

    • sam_e70_xplained: Added support for PHY driver

    • sam_e70_xplained: Added support for TC driver

    • sam_v71_xult: Added support for DACC driver

    • sam_v71_xult: Added support for PHY driver

    • sam_v71_xult: Added support for TC driver

    • sam_v71_xult: Enable pwm on LED0

    • cy8ckit_062_ble: Added arduino’s nexus map

  • Added support for these following shields:

    • 4.2inch epaper display (GDEW042T2)

    • X-NUCLEO-EEPRMA2 EEPROM memory expansion board

Drivers and Sensors

  • ADC

    • Added STM32WL ADC driver

    • STM32: Added support for oversampling

    • Added driver for Microchip MEC172x

  • Audio

    • Added DMIC driver for nRF PDM peripherals

  • Bluetooth

  • CAN

    • Renesas R-Car driver added

  • Clock Control

  • Console

  • Counter

    • Add Atmel SAM counter (TC) Driver

    • Added STM32WL RTC counter driver

  • Crypto

    • STM23: Add support for SOCs with AES hardware block (STM32G0, STM32L5 and STM32WL)

  • DAC

    • Added Atmel SAM DAC (DACC) driver

    • Added support for Microchip MCP4725

    • Added support for STM32F3 series

  • Disk

    • Added SDMMC support on STM32L4+

    • STM32 SDMMC now supports SDIO enabled devices

    • Added USDHC support for i.MX RT685

  • Display

    • Added support for ST7735R

  • DMA

    • Added Atmel SAM XDMAC reload support

    • Added support on STM32F3, STM32G0, STM32H7 and STM32L5

    • STM32: Reviewed bindings definitions, “st,stm32-dma-v2bis” introduced.

  • EEPROM

    • Added support for EEPROM emulated in flash.

  • Entropy

    • Added support for STM32F2, STM32G0, STM32WB and STM32WL

  • ESPI

    • Added support for Microchip eSPI SAF

  • Ethernet

    • Added Atmel SAM/SAM0 GMAC devicetree support

    • Added Atmel SAM/SAM0 MDIO driver

    • Added MDIO driver

    • Added generic PHY driver

  • Flash

    • Added STM32F2, STM32L5 and STM32WL Flash driver support

    • STM32: Max erase time parameter was moved to device tree

    • Added quad SPI support for STM32F4

  • GPIO

  • Hardware Info

  • I2C

  • I2S

    • Added Atmel SAM I2S driver support to XDMAC reload

    • Added driver for nRF I2S peripherals

  • IEEE 802.15.4

  • IPM

    • STM32: Add HSEM based IPM driver for STM32H7 series

  • Interrupt Controller

  • LED

  • LoRa

    • lora_send now blocks until the transmission is complete. lora_send_async can be used for the previous, non-blocking behaviour.

    • Enabled support for STM32WL series

  • MEMC

    • Added STM32F4 support

  • Modem

    • Added gsm_ppp devicetree support

  • PCI/PCIe

    • Fixed an issue that MSI-X was used even though it is not available.

    • Improved MBAR retrieval for MSI-X.

    • Added ability to retrieve extended PCI/PCIe capabilities.

  • Pinmux

    • Added Atmel SAM0 pinctrl support

    • STM32: Deprecated definitions like ‘STM32F2_PINMUX_FUNC_PA0_UART4_TX’ are now removed.

  • PWM

    • Property “st,prescaler” of binding “st,stm32-pwm” now defaults to “0”.

    • Added driver for ITE IT8XXX2 series

    • Added driver for NXP LPC devices

    • Added driver for Telink B91

  • Sensor

    • Refactored various drivers to use _dt_spec.

    • Refactored various drivers to support multiple instances.

    • Enhanced TI HDC20XX driver to support DRDY/INT pin.

    • Updated temperature conversion formula in TI HDC20XX driver.

    • Enhanced MS5607 pressure sensor driver to support I2C.

    • Fixed temperature compensation in MS5607 pressure sensor driver.

    • Refactored ST LIS2DW12 driver to move range, power, and trigger configuration from Kconfig to dts.

    • Enhanced TI BQ274XX fuel gauge driver to support power management.

    • Aligned ST sensor drivers to use STMEMC HAL I/F v2.00.

    • Added Sensirion SGP40 multipixel gas sensor driver.

    • Added Sensirion SHTCX humidity sensor driver.

    • Added Sensirion SHT4X temperature and humidity sensor driver.

    • Added SiLabs SI7270 hall effect magnetic position and temperature sensor driver.

    • Added ST I3G4250D gyroscope driver.

    • Added TI INA219 and INA23X current/power monitor drivers.

    • Added TI LM75 and LM77 temperature sensor drivers.

    • Added TI HDC20XX humidity and temperature sensor driver.

  • Serial

    • Added kconfig to disable runtime re-configuration of UART to reduce footprint if so desired.

    • Added ESP32-C3 polling only UART driver.

    • Added ESP32-S2 polling only UART driver.

    • Added Microchip XEC UART driver.

  • SPI

  • Timer

  • USB

    • Added Atmel SAM4L USBC device controller driver

    • Added support for NXP LPC USB controller

    • Adapted drivers use new USB framework header

  • Watchdog

    • Added STM32L5 watchdog support

  • WiFi

Networking

  • 802.15.4 L2:

    • Fixed a bug, where the net_pkt structure contained invalid LL address pointers after being processed by 802.15.4 L2.

    • Added an optional destination address filtering in the 802.15.4 L2.

  • CoAP:

    • Added user_data field to the coap_packet structure.

    • Fixed processing of out-of-order notifications.

    • Fixed coap_packet_get_payload() function.

    • Converted CoAP test suite to ztest API.

    • Improved coap_packet_get_payload() function to minimize number of RNG calls.

    • Fixed retransmissions in the coap_server sample.

    • Fixed observer removal in the coap_server sample (on notification timeout).

  • DHCPv4:

    • Fixed a bug, where DHPCv4 library removed statically configured gateway before obtaining a new one from the server.

  • DNS:

    • Fixed a bug, where the same IP address was used to populate the result address info entries, when multiple IP addresses were obtained from the server.

  • DNS-SD:

    • Added Service Type Enumeration support (_services._dns_sd._udp.local)

  • HTTP:

    • Switched the library to use zsock_* API, to improve compatibility with various POSIX configurations.

    • Fixed a bug, where HTTP_DATA_FINAL notification was triggered even for intermediate response fragments.

  • IPv6:

    • Multiple IPv6 fixes, addressing failures in IPv6Ready compliance tests.

  • LwM2M:

    • Added support for notification timeout reporting to the application.

    • Fixed a bug, where a multi instance resource with only one active instance was incorrectly encoded on reads.

    • Fixed a bug, where notifications were generated on changes to non-readable resources.

    • Added mutex protection for the state variable of the lwm2m_rd_client module.

    • Removed LWM2M_RES_TYPE_U64 type, as it’s not possible to encode it properly for large values.

    • Fixed a bug, where large unsigned integers were incorrectly encoded in TLV.

    • Multiple fixes for FLOAT type processing in the LwM2M engine and encoders.

    • Fix a bug, where IPSO Push Button counter resource was not triggering notification on incrementation.

    • Fixed a bug, where Register failures were reported as success to the application.

  • Misc:

    • Added RX/TX timeout on a socket in big_http_download sample.

    • Introduced net_pkt_remove_tail() function. Added IEEE 802.15.4 security-related flags to the net_pkt structure.

    • Added bridging support to the Ethernet L2.

    • Fixed a bug in mDNS, where an incorrect address type could be set as a response destination.

    • Added an option to suppress ICMP destination unreachable errors.

    • Fixed possible assertion in net nbr shell command.

    • Major refactoring of the TFTP library.

  • MQTT:

    • Added an option to register a custom transport type.

    • Fixed a bug in mqtt_abort(), where the function could return without releasing a lock.

  • OpenThread:

    • Update OpenThread module up to commit 9ea34d1e2053b6b2a80e1d46b65a6aee99fc504a. Added several new Kconfig options to align with new OpenThread configurations.

    • Added OpenThread API mutex protection during initialization.

    • Converted OpenThread thread to a dedicated work queue.

    • Implemented missing otPlatAssertFail() platform function.

    • Fixed a bug, where NONE level OpenThread logs were not processed.

    • Added possibility to disable CSL sampling, when used.

    • Fixed a potential bug, where invalid error code could be returned by the platform radio layer to OpenThread.

    • Reworked UART configuration in the OpenThread Coprocessor sample.

  • Socket:

    • Added microsecond accuracy in zsock_select() function.

    • Reworked zsock_select() into a syscall.

    • Fixed a bug, where poll() events were not signalled correctly for socketpair sockets.

    • Fixed a bug, where socket mutex could be used after being initialized by a new owner after being deallocated in zsock_close().

    • Fixed a possible assert after enabling CAN sockets.

    • Fixed IPPROTO_RAW usage in packet socket implementation.

  • TCP:

    • Fixed a bug, where unacked_len could be set to a negative value.

    • Fixed possible assertion failure in tcp_send_data().

    • Fixed a bug, where [FIN, PSH, ACK] was not handled properly in TCP_FIN_WAIT_2 state.

  • TLS:

    • Reworked TLS sockets to use secure random generator from Zephyr.

    • Fixed busy looping during DTLS handshake with offloaded sockets.

    • Fixed busy looping during TLS/DTLS handshake on non blocking sockets.

    • Reset mbed TLS session on timed out DTLS handshake, to allow a retry without closing a socket.

    • Fixed TLS/DTLS sendmsg() implementation for larger payloads.

    • Fixed TLS/DTLS sockets POLLHUP notification.

  • WebSocket:

    • Fixed poll() implementation for WebSocket, which did not work correctly with offloaded sockets.

    • Fixed ioctl() implementation for WebSocket, which did not work correctly with offloaded sockets.

USB

  • Added new header file where all defines and structures from Chapter 9 (USB Device Framework) should be included.

  • Revised configuraiton of USB device support. Removed Kconfig option CONFIG_USB and introduced Kconfig option CONFIG_USB_DEVICE_DRIVER to enable USB device controller drivers, which is selected when option CONFIG_USB_DEVICE_STACK is enabled.

  • Enhanced verification of the control request in device stack, classes, and samples.

  • Added support to store alternate interface setting.

  • Added zephyr_udc0 nodelabel to all boards with USB support to allow generic USB device support samples to be build.

  • Reworked descriptors, config, and data definitions macros in CDC ACM class.

  • Changed CDC ACM UART implementation to get configuration from devicetree. With this change, many CONFIG_*_ON_DEV_NAME options were removed and applications revised. See USB device stack CDC ACM support for more information.

Build and Infrastructure

Libraries / Subsystems

  • Disk

  • Management

  • CMSIS subsystem

  • Power management

    • The APIs to set/clear/check if devices are busy from a power management perspective have been moved to the PM subsystem. Their naming and signature has also been adjusted to follow common conventions. Below you can find the equivalence list.

      • device_busy_set -> pm_device_busy_set

      • device_busy_clear -> pm_device_busy_clear

      • device_busy_check -> pm_device_is_busy

      • device_any_busy_check -> pm_device_is_any_busy

    • The device power management callback (pm_device_control_callback_t) has been largely simplified to work based on actions, resulting in simpler and more natural implementations. This principle is also used by other OSes like the Linux Kernel. As a result, the callback argument list has been reduced to the device instance and an action (e.g. PM_DEVICE_ACTION_RESUME). Other improvements include specification of error codes, removal of some unused/unclear states, or guarantees such as avoid calling a device for suspend/resume if it is already at the right state. All these changes together have allowed simplifying multiple device power management callback implementations.

    • Introduced a new API to allow devices capable of wake up the system register themselves was wake up sources. This permits applications to select the most appropriate way to wake up the system when it is suspended. Devices marked as wake up source are not suspended by the kernel when the system is idle. It is possible to declare a device wake up capable direct in devicetree like this example:

      &gpio0 {
              compatible = "zephyr,gpio-emul";
              gpio-controller;
              wakeup-source;
      };
      
      • Removed PM_DEVICE_STATE_FORCE_SUSPEND device power state.because it is an action and not a state.

      • Removed PM_DEVICE_STATE_RESUMING and PM_DEVICE_STATE_SUSPENDING. They were transitional states and only used in device runtime. Now the subsystem is using device flag to keep track of a transition.

      • Implement constraint API as weak symbols so applications or platform can override them. Platforms can have their own way to set/release constraints in their drivers that are not part of Zephyr code base.

  • Logging

  • MODBUS

    • Changed server handler to copy Transaction and Protocol Identifiers to response header.

  • Random

    • xoroshiro128+ PRNG deprecated in favor of xoshiro128++

  • Shell

  • Storage

  • Task Watchdog

  • Tracing

  • Debug

  • OS

HALs

  • HALs are now moved out of the main tree as external modules and reside in their own standalone repositories.

Trusted Firmware-m

  • Renamed psa_level_1 sample to psa_crypto. Extended the use of the PSA Cryptography 1.0 API in the sample code to demonstrate additional crypto functionality.

  • Added a new sample to showcase the PSA Protecter Storage service.

Documentation

  • Kconfig options need to be referenced using the :kconfig: Sphinx role. Previous to this change, :option: was used for this purpose.

  • Doxygen alias @config{} has been deprecated in favor of @kconfig{}.

Tests and Samples