blob: d43044bfd205a7d15b014230cc56c99d58dd32da [file] [log] [blame]
:orphan:
.. _zephyr_2.4:
Zephyr 2.4.0 (Working Draft)
############################
We are pleased to announce the release of Zephyr RTOS version 2.4.0.
Major enhancements with this release include:
* 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.
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
***********
* 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
:ref:`experimental stability <api_lifecycle>`. See :ref:`util_api` for an API
reference.
* The :c:func:`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.
:c:type:`uart_callback_t` and :c:type:`uart_irq_callback_user_data_t`
had their signature changed to add a struct device pointer as first parameter.
:c:type:`uart_irq_callback_t` has been removed. :c:func:`uart_callback_set`,
:c:func:`uart_irq_callback_user_data_set` and :c:func:`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 throuh 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.
:c:type:`ipm_callback_t` had its signature changed to add a struct device
pointer as first parameter. :c:func:`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 :c:func:`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
paremeter 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 :c:func:`bt_gatt_attr_func_t` used by
:c:func:`bt_gatt_foreach_attr` and :c:func:`bt_gatt_foreach_attr_type` has
been changed to always pass the original pointer of attributes along with its
resolved handle.
Deprecated in this release
==========================
Removed APIs in this release
============================
* Other
* The deprecated ``MACRO_MAP`` macro has been removed from the
:ref:`util_api`. 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.
Kernel
******
Architectures
*************
* ARC:
* ARM:
* Interrupt vector relaying feature support is extended to Cortex-M Mainline
architecture variants
* POSIX:
* RISC-V:
* x86:
Boards & SoC Support
********************
* Added support for these SoC series:
* Added support for these ARM boards:
* Made these changes in other boards
* Added support for these following shields:
Drivers and Sensors
*******************
* ADC
* Audio
* 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
* Clock Control
* Console
* Counter
* Crypto
* DAC
* Debug
* Display
* DMA
* EEPROM
* Added driver supporting the on-chip EEPROM found on NXP LPC11U6X MCUs.
* Entropy
* ESPI
* Ethernet
* 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.
* GPIO
* Hardware Info
* I2C
* I2S
* IEEE 802.15.4
* Interrupt Controller
* IPM
* Keyboard Scan
* LED
* LED Strip
* LoRa
* Modem
* PECI
* Pinmux
* PS/2
* PWM
* Sensor
* Serial
* 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.
* Timer
* 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:
* :option:`CONFIG_OPENTHREAD_NCP_SPINEL_ON_UART_ACM`
* :option:`CONFIG_USB_DEVICE_NETWORK_ECM`
* :option:`CONFIG_USB_DEVICE_NETWORK_EEM`
* :option:`CONFIG_USB_DEVICE_NETWORK_RNDIS`
* :option:`CONFIG_TRACING_BACKEND_USB`
* :option:`CONFIG_USB_UART_CONSOLE`
* Video
* Watchdog
* WiFi
Networking
**********
Bluetooth
*********
* Host:
* BLE split software Controller:
* 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().
Build and Infrastructure
************************
* Devicetree
* Support for multiple SOC and ARCH roots.
The :ref:`SOC_ROOT <application>` 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
:file:`zephyr/module.yml` file; see :ref:`modules_build_settings`.
Libraries / Subsystems
**********************
* Disk
* Random
* POSIX subsystem:
* Power management:
* 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
<https://github.com/lvgl/lvgl/releases/tag/v7.0.0>`_ 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:
* :option:`CONFIG_LVGL_HOR_RES_MAX`
* :option:`CONFIG_LVGL_VER_RES_MAX`
* :option:`CONFIG_LVGL_DPI`
* :option:`CONFIG_LVGL_DISP_DEF_REFR_PERIOD`
* :option:`CONFIG_LVGL_INDEV_DEF_READ_PERIOD`
* :option:`CONFIG_LVGL_INDEV_DEF_DRAG_THROW`
* :option:`CONFIG_LVGL_TXT_LINE_BREAK_LONG_LEN`
* :option:`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.
* Tracing:
* Tracing backed API now checks if init function exists prio to calling it.
HALs
****
* HALs are now moved out of the main tree as external modules and reside in
their own standalone repositories.
Documentation
*************
Tests and Samples
*****************
Issue Related Items
*******************
These GitHub issues were addressed since the previous 2.3.0 tagged
release: