doc/releases/migration-guide-3.6.rst
:orphan:
.. _migration_3.6:
Migration guide to Zephyr v3.6.0 ################################
This document describes the changes required when migrating your application from Zephyr v3.5.0 to Zephyr v3.6.0.
Any other changes (not directly related to migrating applications) can be found in
the :ref:release notes<zephyr_3.6>.
.. contents:: :local: :depth: 2
Build System
The deprecated prj_<board>.conf Kconfig file support has been removed, projects that use
this should switch to using board Kconfig fragments instead (boards/<board>.conf).
Until now _POSIX_C_SOURCE, _XOPEN_SOURCE, and _XOPEN_SOURCE_EXTENDED were defined
globally when building for the native (ARCH_POSIX) targets, and _POSIX_C_SOURCE when
building with PicolibC. Since this release, these are set only for the files that need them.
If your library or application needed this, you may start getting an "implicit declaration"
warning for functions whose prototypes are only exposed if one of these is defined.
If so, you can fix it by defining the corresponding macro in your C source file before any
include, or by adding the equivalent of
target_compile_definitions(app PRIVATE _POSIX_C_SOURCE=200809L) to your application
or zephyr_library_compile_definitions(_POSIX_C_SOURCE=200809L) to your library.
Build type by setting CONF_FILE to prj_<build>.conf is now deprecated, users should
instead use the new -DFILE_SUFFIX feature :ref:application-file-suffixes.
Kernel
The system heap size and its availability is now determined by a K_HEAP_MEM_POOL_SIZE
define instead of the :kconfig:option:CONFIG_HEAP_MEM_POOL_SIZE Kconfig option. Subsystems
can specify their own custom system heap size requirements by specifying Kconfig options with
the prefix CONFIG_HEAP_MEM_POOL_ADD_SIZE_. The old Kconfig option still exists, but will be
overridden if the custom requirements are larger. To force the old Kconfig option to be used,
even when its value is less than the indicated custom requirements, a new
:kconfig:option:CONFIG_HEAP_MEM_POOL_IGNORE_MIN option has been introduced (which defaults
being disabled).
STM32H7 and STM32F7 should now activate the cache (Icache and Dcache) by setting explicitly
the CONFIG_CACHE_MANAGEMENT to y.
Boards
NRF_STORE_REBOOT_TYPE_GPREGRET has been removed,
applications that use this should switch to using the :ref:boot_mode_api instead.linkserver<linkserver-debug-host-tools> to be the default runner on the
following NXP boards: mimxrt685_evk_cm33, frdm_k64f, mimxrt1050_evk, frdm_kl25z,
mimxrt1020_evk, mimxrt1015_evkModules
The following modules have been made optional and are not downloaded with west update by default
anymore:
canopennode (:github:64139)To enable them again use the west config manifest.project-filter -- +<module name> command, or west config manifest.group-filter -- +optional to
enable all optional modules, and then run west update again.
CONFIG_ZEPHYR_TRY_MASS_ERASE Kconfig option has been removed. If an
erase is needed when flashing MCUboot, this should now be provided directly to the west
command e.g. west flash --erase. (:github:64703)If you have zcbor-generated code that relies on the zcbor libraries through Zephyr, you must regenerate the files using zcbor 0.8.1. Note that the names of generated types and members has been overhauled, so the code using the generated code must likely be changed. For example:
_m or _l for disambiguation._c suffix, so the enum name no longer matches
the corresponding member name exactly (because this broke C++ namespace rules).The function :c:func:zcbor_new_state, :c:func:zcbor_new_decode_state and the macro
:c:macro:ZCBOR_STATE_D have gained new parameters related to decoding of unordered maps.
Unless you are using that new functionality, these can all be set to NULL or 0.
The functions :c:func:zcbor_bstr_put_term and :c:func:zcbor_tstr_put_term have gained a new
parameter maxlen, referring to the maximum length of the parameter str.
This parameter is passed directly to :c:func:strnlen under the hood.
The function :c:func:zcbor_tag_encode has been renamed to :c:func:zcbor_tag_put.
Printing has been changed significantly, e.g. :c:func:zcbor_print is now called
:c:func:zcbor_log, and :c:func:zcbor_trace with no parameters is gone, and in its place are
:c:func:zcbor_trace_file and :c:func:zcbor_trace, both of which take a state parameter.
Device Drivers and Devicetree
Various deprecated macros related to the deprecated devicetree label property were removed. These are listed in the following table. The table also provides replacements.
However, if you are still using code like
device_get_binding(DT_LABEL(node_id)), consider replacing it with
something like DEVICE_DT_GET(node_id) instead. The DEVICE_DT_GET()
macro avoids run-time string comparisons, and is also safer because it will
fail the build if the device does not exist.
.. list-table:: :header-rows: 1
DT_GPIO_LABEL(node_id, gpio_pha)DT_PROP(DT_GPIO_CTLR(node_id, gpio_pha), label)DT_GPIO_LABEL_BY_IDX(node_id, gpio_pha, idx)DT_PROP(DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, idx), label)DT_INST_GPIO_LABEL(inst, gpio_pha)DT_PROP(DT_GPIO_CTLR(DT_DRV_INST(inst), gpio_pha), label)DT_INST_GPIO_LABEL_BY_IDX(inst, gpio_pha, idx)DT_PROP(DT_GPIO_CTLR_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx), label)DT_SPI_DEV_CS_GPIOS_LABEL(spi_dev)DT_PROP(DT_SPI_DEV_CS_GPIOS_CTLR(spi_dev), label)DT_INST_SPI_DEV_CS_GPIOS_LABEL(inst)DT_PROP(DT_SPI_DEV_CS_GPIOS_CTLR(DT_DRV_INST(inst)), label)DT_LABEL(node_id)DT_PROP(node_id, label)DT_BUS_LABEL(node_id)DT_PROP(DT_BUS(node_id), label)DT_INST_LABEL(inst)DT_INST_PROP(inst, label)DT_INST_BUS_LABEL(inst)DT_PROP(DT_BUS(DT_DRV_INST(inst)), label)For platforms that enabled :kconfig:option:CONFIG_MULTI_LEVEL_INTERRUPTS, the IRQ variant
of the Devicetree macros now return the as-seen value in the devicetree instead of the Zephyr
multilevel-encoded IRQ number. To get the IRQ number in Zephyr multilevel-encoded format, use
IRQN variant instead. For example, consider the following devicetree:
.. code-block:: devicetree
plic: interrupt-controller@c000000 { riscv,max-priority = <7>; riscv,ndev = <1024>; reg = <0x0c000000 0x04000000>; interrupts-extended = <&hlic0 11>; interrupt-controller; compatible = "sifive,plic-1.0.0"; #address-cells = <0x0>; #interrupt-cells = <0x2>; };
uart0: uart@10000000 { interrupts = <10 1>; interrupt-parent = <&plic>; clock-frequency = <0x384000>; reg = <0x10000000 0x100>; compatible = "ns16550"; reg-shift = <0>; };
plic is a second level interrupt aggregator and uart0 is a child of plic.
DT_IRQ_BY_IDX(DT_NODELABEL(uart0), 0, irq) will return 10
(as-seen value in the devicetree), while DT_IRQN_BY_IDX(DT_NODELABEL(uart0), 0) will return
(((10 + 1) << CONFIG_1ST_LEVEL_INTERRUPT_BITS) | 11).
Drivers and applications that are supposed to work in multilevel-interrupt configurations should
be updated to use the IRQN variant, i.e.:
DT_IRQ(node_id, irq) -> DT_IRQN(node_id)DT_IRQ_BY_IDX(node_id, idx, irq) -> DT_IRQN_BY_IDX(node_id, idx)DT_IRQ_BY_NAME(node_id, name, irq) -> DT_IRQN_BY_NAME(node_id, name)DT_INST_IRQ(inst, irq) -> DT_INST_IRQN(inst)DT_INST_IRQ_BY_IDX(inst, idx, irq) -> DT_INST_IRQN_BY_IDX(inst, idx)DT_INST_IRQ_BY_NAME(inst, name, irq) -> DT_INST_IRQN_BY_NAME(inst, name)The io-channel cells of the following devicetree bindings were reduced from 2 (positive and
negative) to the common input, making it possible to use the various ADC DT macros with TI
LMP90xxx ADC devices:
ti,lmp90077ti,lmp90078ti,lmp90079ti,lmp90080ti,lmp90097ti,lmp90098ti,lmp90099ti,lmp90100The io-channel cells of the :dtcompatible:microchip,mcp3204 and
:dtcompatible:microchip,mcp3208 devicetree bindings were renamed from channel to the common
input, making it possible to use the various ADC DT macros with Microchip MCP320x ADC devices.
The optional :c:func:setup() function in the Bluetooth HCI driver API (enabled through
:kconfig:option:CONFIG_BT_HCI_SETUP) has gained a function parameter of type
:c:struct:bt_hci_setup_params. By default, the struct is empty, but drivers can opt-in to
:kconfig:option:CONFIG_BT_HCI_SET_PUBLIC_ADDR if they support setting the controller's public
identity address, which will then be passed in the public_addr field.
(:github:62994)
The :dtcompatible:st,hci-spi-v1 should be used instead of :dtcompatible:zephyr,bt-hci-spi
for the boards which are based on ST BlueNRG-MS.
The native Linux SocketCAN driver, which can now be used in both native_posix
and :zephyr:board:native_sim<native_sim> with or without an embedded C-library, has been renamed to
reflect this:
zephyr,native-posix-linux-can to
:dtcompatible:zephyr,native-linux-can.CONFIG_CAN_NATIVE_POSIX_LINUX to
:kconfig:option:CONFIG_CAN_NATIVE_LINUX.Two new structures for holding common CAN controller driver configuration (struct can_driver_config) and data (struct can_driver_data) fields were introduced. Out-of-tree CAN
controller drivers need to be updated to use these new, common configuration and data structures
along with their initializer macros.
The optional can_get_max_bitrate_t CAN controller driver callback was removed in favor of a
common accessor function. Out-of-tree CAN controller drivers need to be updated to no longer
supply this callback.
The CAN transceiver API function :c:func:can_transceiver_enable now takes a :c:type:can_mode_t
argument for propagating the CAN controller operational mode to the CAN transceiver. Out-of-tree
CAN controller and CAN transceiver drivers need to be updated to match this new API function
signature.
The CAN_FILTER_FDF flag for filtering classic CAN/CAN FD frames was removed since no known CAN
controllers implement support for this. Applications can still filter on classic CAN/CAN FD frames
in their receive callback functions as needed.
The CAN_FILTER_DATA and CAN_FILTER_RTR flags for filtering between Data and Remote
Transmission Request (RTR) frames were removed since not all CAN controllers implement support for
individual RX filtering based on the RTR bit. Applications can now use
:kconfig:option:CONFIG_CAN_ACCEPT_RTR to either accept incoming RTR frames matching CAN filters
or reject all incoming CAN RTR frames (the default). When :kconfig:option:CONFIG_CAN_ACCEPT_RTR
is enabled, applications can still filter between Data and RTR frames in their receive callback
functions as needed.
The :dtcompatible:st,stm32h7-fdcan CAN controller driver now supports configuring the
domain/kernel clock via devicetree. Previously, the driver only supported using the PLL1_Q clock
for kernel clock, but now it defaults to the HSE clock, which is the chip default. Boards that
use the PLL1_Q clock for FDCAN will need to override the clocks property as follows:
.. code-block:: devicetree
&fdcan1 { clocks = <&rcc STM32_CLOCK_BUS_APB1_2 0x00000100>, <&rcc STM32_SRC_PLL1_Q FDCAN_SEL(1)>; };
ILI9XXX based displays now use the MIPI DBI driver class. These displays
must now be declared within a MIPI DBI driver wrapper device, which will
manage interfacing with the display. Note that the cmd-data-gpios pin has
changed polarity with this update, to align better with the new
dc-gpios name. For an example, see below:
.. code-block:: devicetree
/* Legacy ILI9XXX display definition */ &spi2 { ili9340: ili9340@0 { compatible = "ilitek,ili9340"; reg = <0>; spi-max-frequency = <32000000>; reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>; rotation = <270>; width = <320>; height = <240>; }; };
/* New display definition with MIPI DBI device */
mipi_dbi { compatible = "zephyr,mipi-dbi-spi"; reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>; dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>; spi-dev = <&spi2>; #address-cells = <1>; #size-cells = <0>;
ili9340: ili9340@0 {
compatible = "ilitek,ili9340";
reg = <0>;
mipi-max-frequency = <32000000>;
rotation = <270>;
width = <320>;
height = <240>;
};
};
The :dtcompatible:st,stm32-ospi-nor and :dtcompatible:st,stm32-qspi-nor give the nor flash
base address and size (in Bytes) with the reg property as follows.
The <size> property is not used anymore.
.. code-block:: devicetree
mx25lm51245: ospi-nor-flash@70000000 { compatible = "st,stm32-ospi-nor"; reg = <0x70000000 DT_SIZE_M(64)>; /* 512 Mbits*/ };
The :dtcompatible:nxp,pcf8574 driver has been renamed to
:dtcompatible:nxp,pcf857x. (:github:67054) to support pcf8574 and pcf8575.
The Kconfig option has been renamed from :kconfig:option:CONFIG_GPIO_PCF8574 to
:kconfig:option:CONFIG_GPIO_PCF857X.
The Device Tree can be configured as follows:
.. code-block:: devicetree
&i2c { status = "okay"; pcf8574: pcf857x@20 { compatible = "nxp,pcf857x"; status = "okay"; reg = <0x20>; gpio-controller; #gpio-cells = <2>; ngpios = <8>; };
pcf8575: pcf857x@21 {
compatible = "nxp,pcf857x";
status = "okay";
reg = <0x21>;
gpio-controller;
#gpio-cells = <2>;
ngpios = <16>;
};
};
focaltech,ft5336 and
:dtcompatible:goodix,gt911 were using the incorrect polarity for the
respective reset-gpios. This has been fixed so those signals now have to
be flagged as :c:macro:GPIO_ACTIVE_LOW in the devicetree. (:github:64800)The function signature of the isr_t callback function passed to the shared_irq
interrupt controller driver API via :c:func:shared_irq_isr_register() has changed.
The callback now takes an additional irq_number parameter. Out-of-tree users of
this API will need to be updated.
(:github:66427)
Several Renesas RA series drivers Kconfig options have been renamed:
CONFIG_CLOCK_CONTROL_RA -> :kconfig:option:CONFIG_CLOCK_CONTROL_RENESAS_RACONFIG_GPIO_RA -> :kconfig:option:CONFIG_GPIO_RENESAS_RACONFIG_PINCTRL_RA -> :kconfig:option:CONFIG_PINCTRL_RENESAS_RACONFIG_UART_RA -> :kconfig:option:CONFIG_UART_RENESAS_RAThe :dtcompatible:st,lsm6dsv16x sensor driver has been changed to support
configuration of both int1 and int2 pins. The DT attribute irq-gpios has been
removed and substituted by two new attributes, int1-gpios and int2-gpios.
These attributes must be configured in the Device Tree similarly to the following
example:
.. code-block:: devicetree
/ { lsm6dsv16x@0 { compatible = "st,lsm6dsv16x";
int1-gpios = <&gpioa 4 GPIO_ACTIVE_HIGH>;
int2-gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;
drdy-pin = <2>;
};
};
The :dtcompatible:st,stm32-lptim lptim which is selected for counting ticks during
low power modes is identified by stm32_lp_tick_source in the device tree as follows.
The stm32_lptim_timer driver has been changed to support this.
.. code-block:: devicetree
stm32_lp_tick_source: &lptim1 { status = "okay"; };
Bluetooth
CONFIG_BT_L2CAP_TX_BUF_COUNT,
they now instead should be configured through :kconfig:option:CONFIG_BT_ATT_TX_COUNT.CONFIG_BT_RPMSG Kconfig option is now
:kconfig:option:CONFIG_BT_HCI_IPC, and the zephyr,bt-hci-rpmsg-ipc
Devicetree chosen is now zephyr,bt-hci-ipc. The existing sample has also
been renamed, from samples/bluetooth/hci_rpmsg to
samples/bluetooth/hci_ipc. (:github:64391)bt_gatt_cb_register, is no longer
cleared on :c:func:bt_enable. Callbacks can now be registered before the initial
call to :c:func:bt_enable, and should no longer be re-registered after a :c:func:bt_disable
:c:func:bt_enable cycle. (:github:63693)BT_UUID_DECLARE_16, BT_UUID_DECLARE_32
and BT_UUID_DECLARE_128 as the return value has been changed to const.
Any pointer to a UUID must be prefixed with const, otherwise there will be a compilation
warning. For example change struct bt_uuid *uuid = BT_UUID_DECLARE_16(xx) to
const struct bt_uuid *uuid = BT_UUID_DECLARE_16(xx). (:github:66136)bt_l2cap_chan_send API no longer allocates buffers from the same pool as its buf
parameter when segmenting SDUs into PDUs. In order to reproduce the previous behavior, the
application should register the alloc_seg channel callback and allocate from the same pool as
buf.bt_l2cap_chan_send API now requires the application to reserve
enough bytes for the L2CAP headers. Call net_buf_reserve(buf, BT_L2CAP_SDU_CHAN_SEND_RESERVE); at buffer allocation time to do so.BT_ISO_TIMESTAMP_NONE has been removed and the ts parameter of :c:func:bt_iso_chan_send has
as well. :c:func:bt_iso_chan_send now always sends without timestamp. To send with a timestamp,
:c:func:bt_iso_chan_send_ts can be used.CONFIG_BT_HCI_RESERVE and CONFIG_BT_HCI_RAW_RESERVE Kconfig options were removed. All
buffers get by default one byte of headroom now, which HCI transport implementations can rely on
(whether they need it or not).model declaration has been changed to add prefix const.
The model->user_data, model->elem_idx and model->mod_idx field has been changed to
the new runtime structure, replaced by model->rt->user_data, model->rt->elem_idx and
model->rt->mod_idx separately. (:github:65152)element declaration has been changed to add prefix const.
The elem->addr field has been changed to the new runtime structure, replaced by
elem->rt->addr. (:github:65388)CONFIG_BT_MESH_PROV_DEVICE. This option is
replaced by new option :kconfig:option:CONFIG_BT_MESH_PROVISIONEE to
be aligned with Mesh Protocol Specification v1.1, section 5.4. (:github:64252)CONFIG_BT_MESH_V1d1 Kconfig option.CONFIG_BT_MESH_TX_SEG_RETRANS_COUNT,
CONFIG_BT_MESH_TX_SEG_RETRANS_TIMEOUT_UNICAST,
CONFIG_BT_MESH_TX_SEG_RETRANS_TIMEOUT_GROUP, CONFIG_BT_MESH_SEG_ACK_BASE_TIMEOUT,
CONFIG_BT_MESH_SEG_ACK_PER_HOP_TIMEOUT, BT_MESH_SEG_ACK_PER_SEGMENT_TIMEOUT
Kconfig options. They are superseded by the
:kconfig:option:CONFIG_BT_MESH_SAR_TX_SEG_INT_STEP,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_COUNT,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_WITHOUT_PROG_COUNT,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_INT_STEP,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_UNICAST_RETRANS_INT_INC,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_MULTICAST_RETRANS_COUNT,
:kconfig:option:CONFIG_BT_MESH_SAR_TX_MULTICAST_RETRANS_INT,
:kconfig:option:CONFIG_BT_MESH_SAR_RX_SEG_THRESHOLD,
:kconfig:option:CONFIG_BT_MESH_SAR_RX_ACK_DELAY_INC,
:kconfig:option:CONFIG_BT_MESH_SAR_RX_SEG_INT_STEP,
:kconfig:option:CONFIG_BT_MESH_SAR_RX_DISCARD_TIMEOUT,
:kconfig:option:CONFIG_BT_MESH_SAR_RX_ACK_RETRANS_COUNT Kconfig options.BT_AUDIO_CODEC_LC3_* values from <zephyr/bluetooth/audio/lc3.h> have moved to
<zephyr/bluetooth/audio/audio.h> and have the LC3 part of their names replaced by a
more semantically correct name: e.g.
BT_AUDIO_CODEC_LC3_CHAN_COUNT is now BT_AUDIO_CODEC_CAP_TYPE_CHAN_COUNT,
BT_AUDIO_CODEC_LC3_FREQ is now BT_AUDIO_CODEC_CAP_TYPE_FREQ, and
BT_AUDIO_CODEC_CONFIG_LC3_FREQ is now BT_AUDIO_CODEC_CFG_FREQ, etc.
Similarly the enumerations have also been renamed.
E.g. bt_audio_codec_config_freq is now bt_audio_codec_cfg_freq,
bt_audio_codec_capability_type is now bt_audio_codec_cap_type,
bt_audio_codec_config_type is now bt_audio_codec_cfg_type, etc. (:github:67024)ts parameter of :c:func:bt_bap_stream_send has been removed.
:c:func:bt_bap_stream_send now always sends without timestamp.
To send with a timestamp, :c:func:bt_bap_stream_send_ts can be used.ts parameter of :c:func:bt_cap_stream_send has been removed.
:c:func:bt_cap_stream_send now always sends without timestamp.
To send with a timestamp, :c:func:bt_cap_stream_send_ts can be used.Networking
The CoAP public API has some minor changes to take into account. The
:c:func:coap_remove_observer now returns a result if the observer was removed. This
change is used by the newly introduced :ref:coap_server_interface subsystem. Also, the
request argument for :c:func:coap_well_known_core_get is made const.
(:github:64265)
CoAP observer events have moved from a callback function in a CoAP resource to the Network Events
subsystem. The CONFIG_COAP_OBSERVER_EVENTS configuration option has been removed.
(:github:65936)
The CoAP public API function :c:func:coap_pending_init has changed. The parameter
retries is replaced with a pointer to :c:struct:coap_transmission_parameters. This allows to
specify retransmission parameters of the confirmable message. It is safe to pass a NULL pointer to
use default values.
(:github:66482)
The CoAP public API functions :c:func:coap_service_send and :c:func:coap_resource_send have
changed. An additional parameter pointer to :c:struct:coap_transmission_parameters has been
added. It is safe to pass a NULL pointer to use default values. (:github:66540)
The IGMP multicast library now supports IGMPv3. This results in a minor change to the existing
api. The :c:func:net_ipv4_igmp_join now takes an additional argument of the type
const struct igmp_param *param. This allows IGMPv3 to exclude/include certain groups of
addresses. If this functionality is not used or available (when using IGMPv2), you can safely pass
a NULL pointer. IGMPv3 can be enabled using the Kconfig CONFIG_NET_IPV4_IGMPV3.
(:github:65293)
The network stack now uses a separate IPv4 TTL (time-to-live) value for multicast packets.
Before, the same TTL value was used for unicast and multicast packets.
The IPv6 hop limit value is also changed so that unicast and multicast packets can have a
different one. (:github:65886)
The Ethernet phy APIs defined in <zephyr/net/phy.h> are removed from syscall list.
The APIs were marked as callable from usermode but in practice this does not work as the device
cannot be accessed from usermode thread. This means that the API calls will need to made
from supervisor mode thread.
The zperf ratio between mbps and kbps, kbps and bps is changed to 1000, instead of 1024, to align with iperf ratios.
For network buffer pools maximum allocation size was added to a common structure
struct net_buf_data_alloc as a new field max_alloc_size. Similar member data_size of
struct net_buf_pool_fixed that was specific only for buffer pools with a fixed size was
removed.
Other Subsystems
lorawan_set_battery_level_callback to
:c:func:lorawan_register_battery_level_callback and the return type is now void. This
is more consistent with similar functions for downlink and data rate changed callbacks.
(:github:65103)CONFIG_CRC, this was previously erroneously selected if MCUmgr was enabled,
when for non-serial transports it was not needed. (:github:64078)The following subsystem and driver shell modules are now disabled by default. Each required shell
module must now be explicitly enabled via Kconfig (:github:65307):
CONFIG_ACPI_SHELLCONFIG_ADC_SHELLCONFIG_AUDIO_CODEC_SHELLCONFIG_CAN_SHELLCONFIG_CLOCK_CONTROL_NRF_SHELLCONFIG_DAC_SHELLCONFIG_DEBUG_COREDUMP_SHELLCONFIG_EDAC_SHELLCONFIG_EEPROM_SHELLCONFIG_FLASH_SHELLCONFIG_HWINFO_SHELLCONFIG_I2C_SHELLCONFIG_LOG_CMDSCONFIG_LORA_SHELLCONFIG_MCUBOOT_SHELLCONFIG_MDIO_SHELLCONFIG_OPENTHREAD_SHELLCONFIG_PCIE_SHELLCONFIG_PSCI_SHELLCONFIG_PWM_SHELLCONFIG_REGULATOR_SHELLCONFIG_SENSOR_SHELLCONFIG_SMBUS_SHELLCONFIG_STATS_SHELLCONFIG_USBD_SHELLCONFIG_USBH_SHELLCONFIG_W1_SHELLCONFIG_WDT_SHELLThe SHELL_UART_DEFINE macro now only requires a _name argument. In the meantime, the
macro accepts additional arguments (ring buffer TX & RX size arguments) for compatibility with
previous Zephyr version, but they are ignored, and will be removed in future release.
:kconfig:option:CONFIG_SHELL_BACKEND_SERIAL_API now does not automatically default to
:kconfig:option:CONFIG_SHELL_BACKEND_SERIAL_API_ASYNC when
:kconfig:option:CONFIG_UART_ASYNC_API is enabled, :kconfig:option:CONFIG_SHELL_ASYNC_API
also has to be enabled in order to use the asynchronous serial shell (:github:68475).
The CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_DYNAMIC and
CONFIG_ZBUS_MSG_SUBSCRIBER_NET_BUF_STATIC zbus options are renamed. Instead, the new
:kconfig:option:CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_DYNAMIC and
:kconfig:option:CONFIG_ZBUS_MSG_SUBSCRIBER_BUF_ALLOC_STATIC options should be used.
(:github:65632)
To enable the zbus HLP priority boost, the developer must call the
:c:func:zbus_obs_attach_to_thread inside the attaching thread. The observer will then assume the
attached thread priority which will be used by zbus to calculate HLP priority. (:github:63183)
Userspace
A number of userspace related functions have been moved out of the z_ namespace
and into the kernel namespace.
Z_OOPS to :c:macro:K_OOPSZ_SYSCALL_MEMORY to :c:macro:K_SYSCALL_MEMORYZ_SYSCALL_MEMORY_READ to :c:macro:K_SYSCALL_MEMORY_READZ_SYSCALL_MEMORY_WRITE to :c:macro:K_SYSCALL_MEMORY_WRITEZ_SYSCALL_DRIVER_OP to :c:macro:K_SYSCALL_DRIVER_OPZ_SYSCALL_SPECIFIC_DRIVER to :c:macro:K_SYSCALL_SPECIFIC_DRIVERZ_SYSCALL_OBJ to :c:macro:K_SYSCALL_OBJZ_SYSCALL_OBJ_INIT to :c:macro:K_SYSCALL_OBJ_INITZ_SYSCALL_OBJ_NEVER_INIT to :c:macro:K_SYSCALL_OBJ_NEVER_INITz_user_from_copy to :c:func:k_usermode_from_copyz_user_to_copy to :c:func:k_usermode_to_copyz_user_string_copy to :c:func:k_usermode_string_copyz_user_string_alloc_copy to :c:func:k_usermode_string_alloc_copyz_user_alloc_from_copy to :c:func:k_usermode_alloc_from_copyz_user_string_nlen to :c:func:k_usermode_string_nlenz_dump_object_error to :c:func:k_object_dump_errorz_object_validate to :c:func:k_object_validatez_object_find to :c:func:k_object_findz_object_wordlist_foreach to :c:func:k_object_wordlist_foreachz_thread_perms_inherit to :c:func:k_thread_perms_inheritz_thread_perms_set to :c:func:k_thread_perms_setz_thread_perms_clear to :c:func:k_thread_perms_clearz_thread_perms_all_clear to :c:func:k_thread_perms_all_clearz_object_uninit to :c:func:k_object_uninitz_object_recycle to :c:func:k_object_recyclez_obj_validation_check to :c:func:k_object_validation_checkZ_SYSCALL_VERIFY_MSG to :c:macro:K_SYSCALL_VERIFY_MSGz_object to :c:struct:k_objectz_object_init to :c:func:k_object_initz_dynamic_object_aligned_create to :c:func:k_object_create_dynamic_alignedArchitectures
:kconfig:option:CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC no longer has a default in
the architecture layer. Instead, SoCs or boards will need to define it.
Scratch registers ZSR_ALLOCA has been renamed to ZSR_A0SAVE.
Renamed files with hyhphens to underscores:
xtensa-asm2-context.h to xtensa_asm2_context.h
xtensa-asm2-s.h to xtensa_asm2_s.h
xtensa_asm2.h has been removed. Use xtensa_asm2_context.h instead for
stack frame structs.
Renamed functions out of z_ namespace into xtensa_ namespace.
z_xtensa_irq_enable to :c:func:xtensa_irq_enable
z_xtensa_irq_disable to :c:func:xtensa_irq_disable
z_xtensa_irq_is_enabled to :c:func:xtensa_irq_is_enabled