blob: dd3ca4b5b347004099fb465ea248f80d4226f52b [file] [log] [blame]
:orphan:
.. _zephyr_2.3:
Zephyr 2.3.0 (Working Draft)
############################
We are pleased to announce the release of Zephyr RTOS version 2.3.0.
Major enhancements with this release include:
* A new Zephyr CMake package has been introduced, reducing the need for
environment variables
* A new Devicetree API, based on hierarchical macros, has been introduced. This
new API allows the C code to access virtually all nodes and properties in a
clean, organized fashion
* The kernel timeout API has been overhauled to be flexible and configurable,
with future support for features like 64-bit and absolute timeouts in mind
* A new k_heap/sys_heap heap allocator has been introduced, with much better
performance than the existing k_mem_pool/sys_mem_pool
* 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
The following sections provide detailed lists of changes by component.
Security Vulnerability Related
******************************
The following CVEs are addressed by this release:
* CVE-2020-10022: UpdateHub Module Copies a Variable-Sized Hash String
into a fixed-size array.
* CVE-2020-10059: UpdateHub Module Explicitly Disables TLS
Verification
* CVE-2020-10062: Under embargo until 2020/05/25
* CVE-2020-10063: Under embargo until 2020/05/25
More detailed information can be found in:
https://docs.zephyrproject.org/latest/security/vulnerabilities.html
API Changes
***********
* HWINFO
* The identifier data structure for hwinfo drivers is clarified. Drivers are
responsible for ensuring that the identifier data structure is a sequence
of bytes. The returned ID value is not supposed to be interpreted based on
vendor-specific assumptions of byte order and should express the identifier
as a raw byte sequence.
The changes have an impact on users that use the hwinfo API to identify
their devices.
The sam0 driver byte swaps each 32 bit word of the 128 bit identifier to
big endian.
The nordic driver byte swaps the entire 64 bit word to big endian.
Deprecated in this release
==========================
* Kernel
* k_uptime_delta_32(), use k_uptime_delta()
* Timeout values
* All timeout values are now encapsulated k_timeout_t opaque structure when
passing them to the kernel. If you want to revert to the previous s32_t
type for the timeout parameter, please enable
:option:`CONFIG_LEGACY_TIMEOUT_API`
* Bluetooth
* BT_LE_SCAN_FILTER_DUPLICATE, use BT_LE_SCAN_OPT_FILTER_DUPLICATE instead
* BT_LE_SCAN_FILTER_WHITELIST, use BT_LE_SCAN_OPT_FILTER_WHITELIST instead
* bt_le_scan_param::filter_dup, use bt_le_scan_param::options instead
* bt_conn_create_le(), use bt_conn_le_create() instead
* bt_conn_create_auto_le(), use bt_conn_le_create_auto() instead
* bt_conn_create_slave_le(), use bt_le_adv_start() instead with
bt_le_adv_param::peer set to the remote peers address.
* BT_LE_ADV_* macros, use BT_GAP_ADV_* enums instead
* Boards
* nrf51_pca10028 has been renamed to nrf51dk_nrf51422
* nrf51_pca10031 has been renamed to nrf51dongle_nrf51422
* nrf52810_pca10040 has been renamed to nrf52dk_nrf52810
* nrf52_pca10040 has been renamed to nrf52dk_nrf52832
* nrf52833_pca10100 has been renamed to nrf52833dk_nrf52833
* nrf52811_pca10056 has been renamed to nrf52840dk_nrf52811
* nrf52840_pca10056 has been renamed to nrf52840dk_nrf52840
* nrf52840_pca10059 has been renamed to nrf52840dongle_nrf52840
* nrf9160_pca10090 has been renamed to nrf9160dk_nrf9160
* nrf52840_pca10090 has been renamed to nrf9160dk_nrf52840
* nrf52_pca20020 has been renamed to thingy52_nrf52832
* nrf5340_dk_nrf5340 has been renamed to nrf5340pdk_nrf5340
* efr32_slwstk6061a has been renamed to efr32_radio_brd4250b
* Devicetree
* The C macros generated from the devicetree in previous releases are now
deprecated in favor of a new ``<devicetree.h>`` API.
* See :ref:`dt-from-c` for a high-level guide to the new API, and
:ref:`devicetree_api` for an API reference.
* Use of the legacy macros now requires explicitly enabling
:option:`CONFIG_LEGACY_DEVICETREE_MACROS`. See :ref:`dt-legacy-macros` for
more information, including a link to a migration guide to the new API.
Removed APIs in this release
============================
Stable API changes in this release
==================================
* Bluetooth Mesh
* The net_idx parameter has been removed from the Health Client model
APIs since it can be derived (by the stack) from the app_idx parameter
* Networking
* The NET_DEVICE_INIT(), NET_DEVICE_INIT_INSTANCE(), NET_DEVICE_OFFLOAD_INIT()
and ETH_NET_DEVICE_INIT() macros changed and take a device power management
function pointer parameter. If networking PM is not implemented for the
specific network device, the device_pm_control_nop value can be used.
* Video
* The video_dequeue() API call now takes a k_timeout_t for the timeout
parameter. This reverts to s32_t if CONFIG_LEGACY_TIMEOUT_API is enabled.
* Floating Point Services
* FLOAT and FP_SHARING Kconfig options have been renamed to FPU and FPU_SHARING,
respectively.
Kernel
******
* A new general purpose memory allocator, sys_heap/k_heap, was added
to Zephyr with more conventional API/behavior, better space
efficiency and higher performance than the pre-existing mem_pool.
The older mem_pool APIs are, by default, wrappers around this new
heap backend and will be deprecated in an upcoming release. The
original implementation remains available for this release via
disabling CONFIG_MEM_POOL_HEAP_BACKEND.
* The timeout arguments to all kernel calls are now a "k_timeout_t"
type instead of a 32 bit millisecond count. These can be
initialized in arbitrary time units (ns/us/ms, ticks), be
interpreted relative to either current time or system start, and be
expressed in 64 bit quantities. This involves a minor change to the
API, so the original API is still available in a completely
source-compatible way via CONFIG_LEGACY_TIMEOUT_API.
Architectures
*************
* ARC:
* <TBD>
* ARM:
* CMSIS has been moved out of the main tree and now resides in its
own standalone module repository
* Updated CMSIS version to 5.7.0
* Added CMSIS-DSP library integration
* Added semihosting console support
* Cleanups and improvements to the Cortex-M exception vector table
* Fixed the behavior of Cortex-M spurious IRQ handler
* Fixed parsing of Cortex-M MemManage Stacking Errors
* Fixed the arch_cpu_idle() implementation for Cortex-M and Cortex-R
* Renamed Cortex-R architecture port to cortex_a_r in preparation for the
AArch32 Cortex-A architecture port
* Added processor exception handling and reporting framework for Cortex-R
* Added nested interrupt support on AArch32 Cortex-R and AArch64 Cortex-A
* Refactored Cortex-R interrupt system to remove fake multi-level interrupt
controller abstraction scheme
* POSIX:
* Added support for building on ARM hosts
* RISC-V:
* Add support for hard floating point for RISC-V
* Add march and mabi options to Kconfig
* Fix compilation warning for platforms without PLIC
* x86:
* <TBD>
Boards & SoC Support
********************
* Added support for these SoC series:
.. rst-class:: rst-columns
* Broadcom Viper BCM58402
* Infineon XMC4500 SoC
* Nordic nRF52820 SoC
* NXP LPC55S16 SoC
* SiLabs EFR32BG13P SoC
* STM32L5 series of Ultra-low-power MCUs
* Added support for these ARM boards:
.. rst-class:: rst-columns
* 96Boards AeroCore 2
* Adafruit Feather nRF52840 Express
* Adafruit Feather STM32F405 Express
* Black STM32 F407VE Development Board
* Black STM32 F407ZG Pro Development Board
* Broadcom BCM958402M2
* EFR32 BRD4104A (SLWRB4104A)
* Infineon XMC45-RELAX-KIT
* nRF52820 emulation on nRF52833 DK
* nrf9160 INNBLUE21
* nrf9160 INNBLUE22
* NXP LPCXpresso55S16
* SEGGER IP Switch Board
* ST Nucleo H743ZI
* ST Nucleo F303RE
* ST Nucleo L552ZE-Q
* Added support for these following shields:
.. rst-class:: rst-columns
* Espressif ESP-8266 Module
* MikroElektronika ADC Click
* MikroElectronica Eth Click
* ST X-NUCLEO-IKS02A1: MEMS Inertial and Environmental Multi sensor shield
Drivers and Sensors
*******************
* ADC
* Add support for STM32G4, STM32L1 and STM32H7 series
* Enable internal voltage reference source on stm32
* Bluetooth
* Add an RX thread on stm32wb hci wrapper
* Improve BLE support for rv32m1_vega:
- Add Resolvable Private Address support
- Enable power saving support
- Add 2 Mbps support
- Enable controller-based privacy
* CAN
* <TBD>
* Clock Control
* Enable MSI range config in PLL mode on stm32
* Fix AHB clock computation based on core on stm32h7
* Console
* <TBD>
* Counter
* Add support on stm32h7 and stm32l0
* Fix alarm tick count on stm32
* DAC
* Add stm32l0 series support
* Display
* <TBD>
* DMA
* Enable use of DMAMUX on stm32l4+ and stm32wb
* Various fixes on stm32 dma management
* EEPROM
* <TBD>
* Entropy
* <TBD>
* Ethernet
* Add SAM E54 max queue count referencing
* Add SAM0 family support to gmac driver
* Add sam4e support to queue in gmac
* Add network power management support to mcux
* Add VLAN support to enc28j60
* Add VLAN support to stm32
* Add Ethernet cable link status support to gmac
* Add support for i.MXRT1060 family to mcux
* Add support for getting manual MAC address from devicetree
* Add support for enabling random MAC address from devicetree
* Various fixes to setup and cache handling in gmac
* Fix how unique MAC address is determined in mcux
* Fix Ethernet cable link detection in gecko
* Fix stm32 when receiving data during initialization
* Flash
* Add logs on stm32
* Fix wrong bank erasing on stm32g4
* GPIO
* Add mcp23s17 driver
* Add STM32L5 support to stm32 driver
* Add interrupt support to sx1509b driver
* Fix interrupt handling in sifive, intel_apl, mchp_xec, mcux_igpio driver
* Hardware Info
* <TBD>
* I2C
* Add support to stm32h7
* I2S
* <TBD>
* IEEE 802.15.4
* Add Decawave DW1000 driver
* Add "no auto start" option and local MAC address support to rf2xx
* Add support for Frame Pending Bit (FPB) handling in nrf5
* Add CSMA CA transmit capability to nrf5
* Add PAN coordinator mode support to nrf5
* Add support for promiscuous mode to nrf5
* Add support for energy scan function to nrf5
* Fix RX timestamp handling in nrf5
* Various fixes to rf2xx
* Interrupt Controller
* Fix PLIC register space
* <TBD>
* IPM
* <TBD>
* Keyboard Scan
* <TBD>
* Modem
* Add support for GSM 07.10 muxing protocol to generic GSM modem
* Add support for modem commands that do not have a line ending
* Add automatic detection of ublox-sara-r4 modem type
* Add automatic setting of APN for ublox-sara-r4
* Add sendmsg() support to ublox-sara-r4
* Fix UDP socket closing in ublox-sara-r4
* Fix RSSI calculation for Sara U201
* Fix TCP context release and RX socket src/dst port assignment in wncm14a2a
* Change PPP driver connection to generic GSM modem
* Pinmux
* Fix compilation errors in rv32m1_vega pinmux
* <TBD>
* PS/2
* <TBD>
* PWM
* Add support to stm32h7
* Sensor
* Add support for Analog Devices ADXL345 3-axis I2C accelerometer
* <TBD>
* Serial
* Add uart_mux driver that is used in GSM 07.10 muxing protocol
* Add support for parity setting from dts on stm32
* Add support for stm32l5
* SPI
* Add support for DMA client on stm32
* Timer
* <TBD>
* USB
* Add experimental USB Audio implementation.
* Add support to stm32wb
* Fix PMA leak at reset on stm32
* Video
* <TBD>
* Watchdog
* Add support on stm32g0
* Disable iwdg at boot on stm32
* WiFi
* Add scan completion indication to eswifi
* Add support to ESP8266 and ESP32
Networking
**********
* Convert networking to use new k_timeout_t infrastructure
* Enhance new TCP stack support
* Add minimal support for TFTP client (RFC 1350)
* Add support for network device driver power management
* Add support for socketpair() BSD socket API
* Add support for QEMU user networking (SLIRP)
* Add support to disable automatic network attachment in OpenThread
* Add support for Frame Pending Bit handling in OpenThread
* Add support for RX frame handling in OpenThread
* Add support for TX started notification in OpenThread
* Add support for HW CSMA CA in OpenThread
* Add support for promiscuous mode in OpenThread
* Add support for reading OPAQUE resources with OMA TLV in LWM2M
* Add config to enable PAN coordinator mode in IEEE 802.15.4
* Add config to enable promiscuous mode in IEEE 802.15.4
* Add support for subscribe in Azure cloud sample
* Add support for queue mode in lwm2m_client sample
* Add support to allow change of the QEMU Ethernet interface name
* Add support for PPP IPCP to negotiate used DNS servers
* Add support for setting hostname in DHCPv4 request
* Fix binding AF_PACKET socket type multiple times
* Fix LLDPDU data in sent LLDP packets
* Fix and enhance Google IoT sample application documentation
* Fix MQTT cloud sample when polling incoming messages
* Fix LWM2M socket error handling, and pending and reply handling during start
* Fix LWM2M retransmission logic
* Fix LWM2M Cell ID resource initialization
* Fix COAP pending and reply handling
* Fix wpan_serial sample application and enable USB during initialization
* Fix HTTP client payload issue on HTTP upload
* Fix MQTT Websocket incoming data handling and accept packets only in RX
* Fix MQTT Publish message length validation
* Fix IEEE 802.15.4 received frame length validation
* Fix IEEE 802.15.4 and avoid ACK processing when not needed
* Fix IEEE 802.15.4 and allow energy detection scan unconditionally
Bluetooth
*********
* Host:
* Support for LE Advertising Extensions has been added.
* The Host is now 5.2 compliant, with support for EATT, L2CAP ECRED mode and
all new GATT PDUs.
* New application-controlled data length and PHY update APIs.
* Legacy OOB pairing support has been added.
* Multiple improvements to OOB data access and pairing.
* The Host now uses the new thread analyzer functionality.
* Multiple bug fixes and improvements
* BLE split software Controller:
* The Controller is now 5.2 compliant.
* A new HCI USB H4 driver has been added, which can interact with BlueZ's
counterpart Host driver.
* PHY support is now configurable.
* Only control procedures supported by the peer are now used.
* The Nordic nRF52820 IC is now supported
* OpenISA/RV32M1:
* 2Mbps PHY support.
* Radio deep sleep mode support.
* Controller-based privacy support.
* BLE legacy software Controller:
* The legacy Controller has been removed from the tree.
Build and Infrastructure
************************
* Zephyr CMake package
* The Zephyr main repository now includes a Zephyr CMake package.
This allows for registering Zephyr in the CMake user package registry and
allows for easier integration into Zephyr applications, by using the CMake
function, ``find_package(Zephyr ...)``.
Registering the Zephyr CMake package in the CMake user package registry
removes the need for setting of ``ZEPHYR_BASE``, sourcing ``zephyr-env.sh``,
or running ``zephyr-env.cmd``.
* A new ``west`` extension command, ``west zephyr-export`` is introduced for easy
registration of Zephyr CMake package in the CMake user package registry.
* Zephyr Build Configuration CMake package hook.
Zephyr offers the possibility of configuring the Zephyr build system through
a Zephyr Build Configuration package. A single Zephyr workspace
``ZephyrBuildConfig.cmake`` will be loaded if present in the Zephyr
workspace. This allows users to configure the Zephyr build system on a per
workspace setup, as an alternative to using a ``.zephyrrc`` system wide file.
* Devicetree
* A new :ref:`devicetree_api` was added. This API is not generated, but is
still included via ``<devicetree.h>``. The :ref:`dt-legacy-macros` are now
deprecated; users should replace the generated macros with new API. The
:ref:`dt-howtos` page has been extended for the new API, and a new
:ref:`dt-from-c` API usage guide was also added.
Libraries / Subsystems
**********************
* Disk
* Add stm32 sdmmc disk access driver, supports stm32f7 and stm32l4
* Random
* <TBD>
* POSIX subsystem:
* socketpair() function implemented.
* eventfd() function (Linux-like extension) implemented.
* Power management:
* Add system and device power management support on TI CC13x2/CC26x2.
HALs
****
* HALs are now moved out of the main tree as external modules and reside in
their own standalone repositories.
Documentation
*************
* New API overview page added.
* Reference pages have been cleaned up and organized.
* The Devicetree documentation has been expanded significally.
* The project roles have been overhauled in the Contribution Guidelines pages.
* The documentation on driver-specific APIs has been simplified.
* Documentation for new APIs, boards and samples.
Tests and Samples
*****************
* Added samples for USB Audio Class.
* Added sample for using POSIX read()/write() with network sockets.
Issue Related Items
*******************
These GitHub issues were addressed since the previous 2.2.0 tagged
release:
.. comment List derived from GitHub Issue query: ...
* :github:`issuenumber` - issue title