The latest development version of this page may be more current than this released 4.0.0 version.

Zephyr 2.4.0

We are pleased to announce the release of Zephyr RTOS version 2.4.0.

Major enhancements with this release include:

  • Introduced initial support for virtual memory management.

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

  • Enabled the new TCP stack, TCP2, by default. This stack was introduced in Zephyr v2.1.0 to improve network protocol testability with open source tools.

  • Introduced a new toolchain abstraction with initial implementations for GCC and LLVM/Clang, and groundwork for future support of commercial toolchains.

  • Moved to using C99 integer types and deprecate Zephyr integer types. The Zephyr types can be enabled by Kconfig DEPRECATED_ZEPHYR_INT_TYPES option.

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

  • Moved to using C99 integer types and deprecate Zephyr integer types. The Zephyr types can be enabled by Kconfig DEPRECATED_ZEPHYR_INT_TYPES option.

  • The <sys/util.h> header has been promoted to a documented API with experimental stability. See Utilities for an API reference.

  • The wdt_feed() function will now return -EAGAIN if issuing a feed would stall the caller. Application code may need to ignore this diagnostic result or initiate another feed operation later.

  • <drivers/uart.h> has seen its callbacks normalized. uart_callback_t and uart_irq_callback_user_data_t had their signature changed to add a struct device pointer as first parameter. uart_irq_callback_t has been removed. uart_callback_set(), uart_irq_callback_user_data_set() and uart_irq_callback_set() user code have been modified accordingly.

  • <drivers/dma.h> has seen its callback normalized. It had its signature changed to add a struct device pointer as first parameter. Such callback signature has been generalized through the addition of dma_callback_t. ‘callback_arg’ argument has been renamed to ‘user_data. All user code have been modified accordingly.

  • <drivers/ipm.h> has seen its callback normalized. ipm_callback_t had its signature changed to add a struct device pointer as first parameter. ipm_register_callback() user code have been modified accordingly. The context argument has been renamed to user_data and all drivers have been modified against it as well.

  • The fs_open() function now accepts open flags that are passed as a third parameter. All custom file system front-ends require change to the implementation of open callback to accept the new parameter. To maintain original behaviour within user code, two argument invocations should be converted to pass a third argument FS_O_CREATE | FS_O_RDWR.

  • The struct device got 3 attributes renamed: config_info to config, driver_api to api and finally driver_data to data. This renaming was done to get rid of legacy names, for which the reasons do no longer apply.

  • All device instances got a const qualifier. So this applies to all APIs manipulating struct device * (ADC, GPIO, I2C, …). In order to avoid const qualifier loss on ISRs, all ISRs now take a const *void as a parameter as well.

  • The _gatt_ and _GATT_ infixes have been removed for the HRS, DIS and BAS APIs and the Kconfig options.

  • <include/bluetooth/gatt.h> callback bt_gatt_attr_func_t() used by bt_gatt_foreach_attr() and bt_gatt_foreach_attr_type() has been changed to always pass the original pointer of attributes along with its resolved handle.

  • Established the unrestricted alignment of flash reads for all drivers.

Deprecated in this release

  • The full set of k_mem_pool and sys_mem_pool APIs are considered deprecated as of this release. The replacements are the k_heap and sys_heap APIs. These APIs are not tagged with __deprecated in the 2.4 release, but will be in 2.5. They will be removed completely in Zephyr 2.6 LTS. The set of APIs now deprecated is as follows:

    • k_mbox_data_block_get()

    • k_pipe_block_put()

    • K_MEM_POOL_DEFINE()

    • k_mem_pool_alloc()

    • k_mem_pool_free()

    • k_mem_pool_free_id()

    • SYS_MEM_POOL_DEFINE()

    • sys_mem_pool_init()

    • sys_mem_pool_alloc()

    • sys_mem_pool_free()

    • sys_mem_pool_try_expand_inplace()

  • The Kconfig option CONFIG_MULTITHREADING to disable multi-threading was deprecated due to lack of maintainership. This means that single-threaded mode with the scheduler disabled is deprecated; normal multi-threaded mode is still fully supported.

Removed APIs in this release

  • Other

    • The deprecated MACRO_MAP macro has been removed from the Utilities. Use FOR_EACH instead.

    • The CONFIG_NET_IF_USERSPACE_ACCESS is removed as it is no longer needed.

  • Build system

    • The set of *_if_kconfig() CMake functions have been removed. Use _ifdef(CONFIG_ ...) instead.

Stable API changes in this release

  • USB

    • HID class callbacks now takes a parameter const struct device* which is the HID device for which callback was called.

  • Bluetooth

    • The _gatt_ infix has been removed from all GATT service APIs.

  • Bluetooth HCI Driver

    • bt_hci_evt_is_prio() removed, use bt_hci_evt_get_flags() instead when CONFIG_BT_RECV_IS_RX_THREAD is defined and call bt_recv and bt_recv_prio when their flag is set, otherwise always call bt_recv().

Kernel

  • Initial support for virtual memory management

    • API definitions in include/sys/mem_manage.h.

    • Supporting architectures will implement arch_mem_map() and enable CONFIG_MMU.

    • The kernel is linked at its physical memory location in RAM.

    • The size of the address space is controlled via CONFIG_KERNEL_VM_SIZE with memory mapping calls allocating virtual memory growing downward from the address space limit towards the system RAM mappings.

    • This infrastructure is still under heavy development.

  • Device memory mapped I/O APIs

    • Namedspaced as DEVICE_MMIO and specified in a new include/sys/device_mmio.h header.

    • This is added to facilitate the specification and the storage location of device driver memory-mapped I/O regions based on system configuration.

      • Maintained entirely in ROM for most systems.

      • Maintained in RAM with hooks to memory-mapping APIs for MMU or PCI-E systems.

  • Updates for Memory Domain APIs

    • All threads now are always a member of a memory domain. A new memory domain k_mem_domain_default introduced for initial threads like the main thread.

    • The k_mem_domain_destroy() and k_mem_domain_remove_thread() APIs are now deprecated and will be removed in a future release.

    • Header definitions moved to include/app_memory/mem_domain.h.

  • Thread stack specification improvements

    • Introduced a parallel set of K_KERNEL_STACK_* APIs for specifying thread stacks that will never host user threads. This will conserve memory as ancillary data structures (such as privilege mode elevation stacks) will not need to be created, and certain alignment requirements are less strict.

    • Internal interfaces to the architecture code have been simplified. All thread stack macros are now centrally defined, with arches declaring support macros to indicate the alignment of the stack pointer, the stack buffer base address, and the stack buffer size.

Architectures

  • ARC

    • Added ARC MetaWare toolchain support

    • General arch improvements for stacks & memory domains

    • API improvements for cache flush and cache invalidate

    • Debugging help: show all registers on exception

    • Fix for fast irq (one register bank configuration)

    • Fix for undefined shift behavior (CID 211523)

  • ARM

    • AARCH32

      • Added support for ARM Cortex-M1 architecture.

      • Implemented the timing API in Cortex-M architecture using the Data Watchpoint and Trace (DWT) unit.

      • The interrupt vector relaying feature support was extended to Cortex-M Mainline architecture variants.

      • Cortex-M fault handling implementation was enhanced by adding an option to generate and supply the full register state to the kernel fatal error handling mechanism.

      • Fixed Cortex-M boot sequence for single-threaded applications (CONFIG_MULTITHREADING=n).

      • Added thread safety to Non-Secure entry function calls in ARMv8-M architecture.

      • Fixed stack randomization for main thread.

      • Fixed exception vector table alignment in Cortex-M architecture

      • Increased test coverage in QEMU for ARMv6-M architecture variant.

      • Removed the implementation of arch_mem_domain_* APIs for Cortex-M

    • AARCH64

      • Re-implemented thread context-switch to use the _arch_switch() API

  • POSIX

  • RISC-V

  • x86

    • x86 MMU paging support has been overhauled to meet CONFIG_MMU requirements.

      • arch_mem_map() is implemented.

      • Restored support for 32-bit non-PAE paging. PAE use is now controlled via the CONFIG_X86_PAE option

      • Initial kernel page tables are now created at build time.

      • Page tables are no longer strictly identity-mapped

    • Added zefi infrastructure for packaging the 64-bit Zephyr kernel into an EFI application.

    • Added a GDB stub implementation that works over serial for x86 32-bit.

Boards & SoC Support

  • Added support for these SoC series:

    • ARM Cortex-M1/M3 DesignStart FPGA

    • Atmel SAM4L

    • Nordic nRF52805

    • NXP i.MX RT685, i.MX8M Mini, and LPC11U6x

    • ARC QEMU support for EM and HS family

  • Made these changes in other SoC series:

    • STM32L4/STM32WB: Added support for Low Power Mode.

    • STM32H7/STM32WB/STM32MP1: Added Dual Core concurrent register access protection using HSEM.

    • Increased cpu frequency for ARC nsim_hs_smp.

  • Changes for ARC boards:

    • ARC QEMU boards for ARC EM and HS

    • ARC MetaWare toolchain support, including mdb runner for various ARC boards

    • gcov coverage support for ARC QEMU

    • New nSIM configuration, corresponding to em7d_v22 EMSK board

    • Enabled SMP on HSDK board, including dual core and quad core configurations.

    • Switched from legacy ARC-nSIM UART to ns16550 UART model and driver.

    • Fixed EMSDP secure config for emsdp_em7d_esp.

  • Added support for these ARM boards:

    • Adafruit ItsyBitsy M4 Express

    • Arduino Nano 33 IOT

    • ARM Cortex-M1/M3 DesignStart FPGA reference designs running on the Digilent Arty A7 development board

    • Atmel SAM4L-EK board

    • Circuit Dojo nRF9160 Feather

    • EOS S3 Quick Feather

    • Laird Connectivity Pinnacle 100 Modem Development board (pinnacle_100_dvk)

    • nRF21540 DK (nrf21540dk_nrf52840)

    • nRF52805 emulation on nRF52 DK (nrf52dk_nrf52805)

    • nRF5340 DK

    • Nuvoton npcx7m6fb and pfm m487 boards

    • NXP i.MX RT685 EVK, i.MX8M Mini EVK, LPCXpresso LPC11U68

    • OLIMEX-STM32-H103

    • Ruuvitag board

    • Seagate FaZe board

    • Seeeduino XIAO

    • Serpente board

    • Silicon Labs BRD4180A (a.k.a. SLWRB4180A) Mighty Gecko Radio Board

    • ST B_L4S5I_IOT01A Discovery kit

    • ST NUCLEO-H745ZI-Q

    • Waveshare Open103Z

    • WeAct Studio Black Pill V2.0

  • Made these changes in other boards:

    • b_l072z_lrwan1: Added flash, LoRa, USB, EEPROM, RNG

    • nRF boards: enabled HW Stack Protection by default on boards maintained by Nordic

    • nucleo_l552ze_q: Added non secure target and TFM support

    • STM32 boards: Enabled MPU on all boards with at least 64K flash

    • lpcxpresso55s69: Added TFM support

  • Added support for these following shields:

    • Adafruit WINC1500 Wifi

    • ARM Ltd. V2C-DAPLink for DesignStart FPGA

    • Atmel AT86RF2XX Transceivers

    • Buydisplay 2.8” TFT Touch Shield with Arduino adapter

    • DAC80508 Evaluation Module

Drivers and Sensors

  • ADC

    • Added chip select flags to SPI ADC drivers.

  • Audio

    • N/A

  • Bluetooth

    • L2CAP RX MTU is now controlled by CONFIG_BT_L2CAP_RX_MTU when CONFIG_BT_ACL_FLOW_CONTROL is disabled, previously this was controlled by CONFIG_BT_RX_BUF_LEN. If CONFIG_BT_RX_BUF_LEN has been changed from its default value then CONFIG_BT_L2CAP_RX_MTU should be set to CONFIG_BT_RX_BUF_LEN - 8.

  • CAN

    • Added chip select flags to SPI CAN drivers.

    • Fixed MCP2515 driver to wait to reset.

  • Clock Control

    • STM32: Various changes including Flash latency wait states computation, configuration option additions for H7 series, and fixes on F0/F3 PREDIV1 support

    • Added LPC11U6X driver.

  • Console

    • Added IPM driver.

  • Counter

    • STM32: Added support on F0/F2 series.

    • Added MCUX PIT counter driver for Kinetis K6x and K8x SoCs.

  • Crypto

    • N/A

  • DAC

    • STM32: Added support for F0/F2/G4/L1 series.

  • Debug

    • N/A

  • Display

    • Enhanced SSD16XX driver to support loading WS from OTP.

    • Added chip select flags to SPI display drivers.

  • DMA

    • STM32: Number of changes including k_malloc removal, driver priority init increase, get_status API addition and various cleanups.

    • Added MCUX EDMA driver for i.MX RT and Kinetis K6x SoCs.

    • Added MCUX LPC driver for LPC and i.MX RT6xx SoCs.

  • EEPROM

    • Added driver supporting the on-chip EEPROM found on NXP LPC11U6X MCUs.

    • Fixed at2x cs gpio flags extraction from DT.

  • Entropy

    • STM32: Added support for ISR mode. Added support on F7/H7/L0 series.

  • ESPI

    • Enhanced XEC driver to support KBC status operations, ACPI_EC1 interface, and slaves with long initializations.

    • Fixed XEC driver frequency override during IO selection.

  • Ethernet

    • Added VLAN support to Intel e1000 driver.

    • Added Ethernet support to stm32h7 based boards (with IT based TX).

    • Moved stm32 driver to device tree configuration.

    • Added support for setting fixed configuration and read from device tree for ENET ETH interface and PHY in mcux driver.

    • Added support for device that do not use SMI for PHY setup in mcux driver.

    • Added support for multiport gPTP in native_posix driver. This allows gPTP bridging testing.

    • Fixed MAC registers in enc28j60 driver to the latest Microchip reference manual.

  • Flash

    • The driver selected by CONFIG_SPI_FLASH_W25QXXDV has been removed as it is unmaintained and all its functionality is available through CONFIG_SPI_NOR. Out of tree uses should convert to the supported driver using the jedec,spi-nor compatible.

    • Enhanced nRF QSPI NOR flash driver (nrf_qspi_nor) so it supports unaligned read offset, read length and buffer offset.

    • Added SFDP support in spi_nor driver.

    • Fixed regression in nRF flash driver (soc_flash_nrf) with CONFIG_BT_CTLR_LOW_LAT option.

    • Introduced NRF radio scheduler interface in nRF flash driver (soc_flash_nrf).

    • STM32: Factorized support for F0/F1/F3. Added L0 support. Various fixes.

  • GPIO

    • Added driver for the Xilinx AXI GPIO IP.

    • Added LPC11U6X driver.

  • Hardware Info

    • Added Atmel SAM4L driver.

  • I2C

    • Introduced new driver for NXP LPC11U6x SoCs. See CONFIG_I2C_LPC11U6X.

    • Introduced new driver for emulated I2C devices, where I2C operations are forwarded to a module that emulates responses from hardware. This enables testing without hardware and allows unusual conditions to be synthesized to test driver behavior. See CONFIG_I2C_EMUL.

    • STM32: V1: Reset i2c device on read/write error.

    • STM32: V2: Added dts configurable Timing option.

    • Fixed MCUX LPI2C driver transfer status after NACK.

  • I2S

    • Added LiteX controller driver.

  • IEEE 802.15.4

  • Interrupt Controller

    • Enhanced GICV3 driver to support SGI API.

    • Added NPCX MIWU driver.

  • IPM

    • Added Intel ADSP driver.

  • Keyboard Scan

    • Enhanced FT5336 driver to support additional part number variants.

  • LED

    • Added TI LP503X controller driver.

    • Introduced led_set_color, let_get_info, and channel-dedicated syscalls

    • Added shell support.

  • LED Strip

    • Enhanced APA102 driver to support SPI chip select.

  • LoRa

    • Made various enhancements and fixes in SX1276 driver.

  • Modem

    • Added option to query the IMSI and ICCID from the SIM.

    • Added support for offloaded Sierra Wireless HL7800 modem.

  • PECI

    • N/A

  • Pinmux

    • Added LPC11U6X driver.

    • Added NPCX driver.

  • PS/2

    • N/A

  • PWM

    • STM32: Refactored using Cube LL API.

    • Added SAM9 TCC based driver.

  • Sensor

    • Added API function sensor_attr_get() for getting a sensor’s attribute.

    • Added support for wsen-itds accelerometer sensor.

    • Added chip select flags to SPI sensor drivers.

    • Added IIS2DH accelerometer driver.

    • Added MAX17055 fuel-gauge sensor driver.

    • Added SI7055 temperature sensor driver.

    • Enhanced FXOS8700 driver to support magnetic vector magnitude function.

    • Added SM351LT magnetoresistive sensor driver.

    • Added VCNL4040 proximity and light sensor driver.

    • Refactored LIS2DH and LSM6DSL drivers to support multiple instances.

  • Serial

    • Added driver for the Xilinx UART Lite IP.

    • Added NXP IUART driver for i.MX8M Mini.

    • Implemented uart_config_get API in MCUX UART driver.

    • Added LPC11U6X driver.

  • SPI

    • The SPI driver subsystem has been updated to use the flags specified in the cs-gpios devicetree properties rather than the SPI_CS_ACTIVE_LOW/HIGH configuration options. Devicetree files that specify 0 for this field will probably need to be updated to specify GPIO_ACTIVE_LOW. SPI_CS_ACTIVE_LOW/HIGH are still used for chip selects that are not specified by a cs-gpios property.

    • Added driver for the Xilinx AXI Quad SPI IP.

    • STM32: Various fixes around DMA mode.

    • Extended MCUX Flexcomm driver to support slave mode.

    • Added optional delays to MCUX DSPI and LPSPI drivers.

  • Timer

    • N/A

  • USB

    • The usb_enable() function, which, for some samples, was invoked automatically on system boot up, now needs to be explicitly called by the application in order to enable the USB subsystem. If your application relies on any of the following Kconfig options, then it shall also enable the USB subsystem:

    • USB device support has got its own work queue which is used by CDC ACM class by default.

    • CDC ACM Class was slightly reworked.

    • Suspend and resume support in CDC ACM and HID classes has been corrected.

    • Atmel SAM0 USB device driver (usb_dc_sam0) was revised. All drivers now use common macros for getting indexes and direction from an endpoint.

  • Video

    • N/A

  • Watchdog

    • Added MCUX WWDT driver for LPC SoCs.

    • Enhanced Gecko driver to support Gecko Series 2 SoC.

  • WiFi

    • Added IPv6 support to Simplelink driver.

    • Added DNS offloading support to eswifi driver.

    • Fixed esp driver offload protocol parsing.

    • Fixed esp driver GPIO reset control logic.

    • Fixed eswifi driver offloading packet parsing.

Networking

  • The new TCP stack is enabled by default. The legacy TCP stack is not yet removed and can be used if needed.

  • The network interface is made a kernel object. This allows better access control handling when usermode is enabled.

  • The kernel stacks are used in network related threads to save memory when usermode is enabled.

  • Network statistics collection can be enabled in key points of the network stack. This can be used to get information where time is spent in RX or TX.

  • The BSD socket sendmsg() can now be used with AF_PACKET type sockets.

  • Added support for enabling OpenThread reference device.

  • Added support for enabling MQTT persistent sessions.

  • Added “net tcp recv” command to net shell to enable TCP RX in manual testing.

  • Added ObjLnk resource type support to LWM2M.

  • Added userspace support to MQTT publisher, echo-server and echo-client sample applications.

  • Added support to rejecting received and unsupported PPP options.

  • Added support for select() when using socket offloading.

  • Added support for IPv6 multicast packet routing.

  • Added support to SOCK_DGRAM type sockets for AF_PACKET family.

  • Added support for using TLS sockets when using socket offloading.

  • Added additional checks in IPv6 to ensure that multicasts are only passed to the upper layer if the originating interface actually joined the destination multicast group.

  • Allow user to specify TCP port number in HTTP request.

  • Allow application to initialize the network config library instead of network stack calling initialization at startup. This enables better control of network resources but requires application to call net_config_init_app() manually.

  • Allow using wildcards in CoAP resource path description.

  • Allow user to specify used network interface in net-shell ping command.

  • Allow user to select a custom mbedtls library in OpenThread.

  • Removed dependency to CONFIG_NET_SOCKETS_POSIX_NAMES from offloaded WiFi device drivers.

  • Print more gPTP status information in gptp net shell.

  • Fixed the network traffic class statistics collection.

  • Fixed WiFi shell when doing a scan.

  • Fixed IPv6 routes when nexthop is link local address of the connected peer.

  • Fixed IPv6 Router Solicitation message handling.

  • Fixed BSD socket lib and set errno to EBADF if socket descriptor is invalid.

  • Fixed received DNS packet parsing.

  • Fixed DNS resolving by ignoring incoming queries while we are resolving a name.

  • Fixed CoAP zero length option parsing.

  • Fixed gPTP port numbering to start from 1.

  • Fixed gPTP BMCA priority vector calculation.

  • Fixed multiple interface bound socket recv() for AF_PACKET sockets.

  • Fixed PPP Term-Req and Term-Ack packet length when sending them.

  • Fixed PPP ipv6cp and ipcp Configure-Rej handling.

  • Fixed PPP option parsing and negotiation handling.

  • Fixed PPP ipcp option handling when the protocol goes down.

  • Fixed PPP ipv6cp and ipcp network address removal when connection goes down.

  • Added support to rejecting received and unsupported PPP options.

  • Added initial support for PAP authentication in PPP.

  • Fixed a race PPP when ppp_fsm_open() was called in CLOSED state.

  • Fixed LWM2M FOTA socket closing.

  • Fixed LWM2M block transfer retransmissions.

  • Fixed LWM2M opaque data transfer in block mode.

  • Fixed LWM2M Security and Server object instance matching.

  • Fixed LWM2M updating lifetime on Register Update event.

  • Fixed MQTT double CONNACK event notification on server reject.

Bluetooth

  • Host

    • Added basic support for Isochronous Channels (also known as LE Audio).

    • Added support for Periodic Advertising (both Advertising and Scanning procedures).

    • The application can now specify preferences for the PHY update procedure PHY choices.

    • A new “bond_deleted” callback has been introduced.

    • Added a new callback for GATT (un)subscription.

    • Added support for the application to provide subscription information to the stack prior to reconnection (bt_gatt_resubscribe).

    • The application can now request for the CCC descriptor to be discovered automatically by the stack when subscribing to a characteristic.

    • Fixed a regression introduced in 2.3 along the EATT feature, where the ATT throughput could not reach the expected values.

    • Fixed a deadlock in the RX thread that was observed multiple times in scenarios involving high throughput and a sudden disconnection.

    • Fixed a race condition upon advertising resume.

    • The GATT notify multiple feature is now disabled by default.

    • The advertiser can now be requested to restart even when a connection object is not available.

    • The L2CAP security level will now be elevated automatically when a connection is rejected for security reasons.

    • When LE Secure Connections are the only option enabled, the security level will now be elevated to Level 4 automatically.

    • Fixed CCC restoring when using settings lazy loading.

    • Fixed recombination of ACL L2CAP PDUs when the header itself is split across multiple HCI ACL packets.

    • GATT no longer assumes the position of the CCC descriptor and instead discovers it.

    • Multiple additional fixes.

  • Mesh

    • Added support for storage of model data in a key-value fashion.

    • Added support for a network loopback.

    • Multiple qualification-related fixes.

  • BLE split software Controller

    • The advanced scheduling algorithms that were supported in the legacy Controller have been ported to the split one.

    • Preliminary support for Advertising Extensions, restricted to non-connectable advertising for now.

    • Very early support for Periodic Advertising. This should be considered an early experimental draft at this stage.

    • Added full support for the Nordic nRF5340 IC, not just the engineering sample.

    • Added support for the Nordic nRF52805 IC.

    • Several fixes to scheduling and window calculation, some of which had an impact in the cooperation between the flash driver and the Controller.

    • Fixed an null pointer dereference in the ticker code.

  • HCI Driver

    • A new BT_QUIRK_NO_AUTO_DLE has been added for Controllers that do not follow the recommendation of auto-initating the data length update procedure. This is in fact the case of the split software Controller.

Build and Infrastructure

  • Improved support for additional toolchains:

    • Better toolchain abstractions.

    • Support for the ARC MetaWare toolchain.

  • Devicetree

    • Added new devicetree macros that provide a default value if the property or cell accessor doesn’t contain the requested data.

    • Added support for inferring bindings for /zephyr,user devicetree node to allow applications an easy way to specify application specific devicetree properties without having a binding.

  • Support for multiple SOC and ARCH roots. The SOC_ROOT and ARCH_ROOT variables used to specify support files for out of tree SoCs and architectures now accept multiple paths, separated by semicolons. As a result, the SOC_DIR Kconfig variable is no longer supported.

    Uses like source $(SOC_DIR)/<path> must be changed to rsource <relative>/<path> or similar.

  • BOARD, SOC, DTS, and ARCH roots can now be specified in each module’s zephyr/module.yml file; see Build settings.

Libraries / Subsystems

  • Disk

  • Management

    • MCUmgr

      • Moved mcumgr into its own directory.

      • UDP port switched to using kernel stack.

      • smp: added missing socket close in error path.

    • Added support for Open Supervised Device Protocol (OSDP), see CONFIG_OSDP.

    • updatehub

      • Added download block check.

      • Added support to flash integrity check using SHA-256 algorithm.

      • Moved updatehub from lib to subsys/mgmt directory.

      • Fixed out-of-bounds access and add flash_img_init return value check.

      • Fixed getaddrinfo resource leak.

  • Settings

    • If a setting read is attempted from a channel that doesn’t support reading return an error rather than faulting.

    • Disallow modifying the content of a static subtree name.

  • Random

  • POSIX subsystem

  • Power management

  • Logging

    • Fixed immediate logging with multiple backends.

    • Switched logging thread to use kernel stack.

    • Allow users to disable all shell backends at one using CONFIG_SHELL_LOG_BACKEND.

    • Added Spinel protocol logging backend.

    • Fixed timestamp calculation when using NEWLIB.

  • LVGL

    • Library has been updated to the new major release v7.0.2.

    • It is important to note that v7 introduces multiple API changes and new configuration settings, so applications developed on v6 or previous versions will likely require some porting work. Refer to LVGL 7 Release notes for more information.

    • LVGL Kconfig option names have been aligned with LVGL. All LVGL configuration options LV_[A-Z0-9_] have a matching Zephyr Kconfig option named as CONFIG_LVGL_[A-Z0-9_].

    • LVGL Kconfig constants have been aligned with upstream suggested defaults. If your application relies on any of the following Kconfig defaults consider checking if the new values are good or they need to be adjusted:

      • CONFIG_LVGL_HOR_RES_MAX

      • CONFIG_LVGL_VER_RES_MAX

      • CONFIG_LVGL_DPI

      • CONFIG_LVGL_DISP_DEF_REFR_PERIOD

      • CONFIG_LVGL_INDEV_DEF_READ_PERIOD

      • CONFIG_LVGL_INDEV_DEF_DRAG_THROW

      • CONFIG_LVGL_TXT_LINE_BREAK_LONG_LEN

      • CONFIG_LVGL_CHART_AXIS_TICK_LABEL_MAX_LEN

    • Note that ROM usage is significantly higher on v7 for minimal configurations. This is in part due to new features such as the new drawing system. LVGL maintainers are currently investigating ways for reducing the library footprint when some options are not enabled, so you should wait for future releases if higher ROM usage is a concern for your application.

  • Shell

    • Switched to use kernel stacks.

    • Fixed select command.

    • Fixed prompting dynamic commands.

    • Change behavior when more than CONFIG_SHELL_ARGC_MAX arguments are passed. Before 2.3 extra arguments were joined to the last argument. In 2.3 extra arguments caused a fault. Now the shell will report that the command cannot be processed.

  • Storage

    • Added flash SHA-256 integrity check.

  • Tracing

    • Tracing backed API now checks if init function exists prio to calling it.

  • Debug

    • Core Dump

      • Added the ability to do core dump when fatal error is encountered. This allows dumping the CPU registers and memory content for offline debugging.

      • Cortex-M, x86, and x86-64 are supported in this release.

      • A data output backend utilizing the logging subsystem is introduced in this release.

HALs

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

Documentation

Tests and Samples

  • nvs: Do full chip erase when flashing.

  • nrf: onoff_level_lighting_vnd_app: Fixed build with mcumgr.

  • drivers: flash_shell: new commands write_unaligned and write_pattern.

  • bluetooth: hci_spi: Fixed cmd_hdr and acl_hdr usage.

  • Removed zephyr nfc sample.

  • drivers: Fixed uninitialized spi_cfg in spi_fujitsu_fram sample.

  • Updated configuration for extended advertising in Bluetooth hci_uart and hci_rpmsg examples.