Migration guide to Zephyr v3.6.0 (Working Draft)

This document describes the changes required or recommended 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 release notes.

Required changes

Kernel

C Library

Optional Modules

The following modules have been made optional and are not downloaded with west update by default anymore:

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.

Device Drivers and Device Tree

  • The 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:

    / {
        lsm6dsv16x@0 {
            compatible = "st,lsm6dsv16x";
    
            int1-gpios = <&gpioa 4 GPIO_ACTIVE_HIGH>;
            int2-gpios = <&gpiod 11 GPIO_ACTIVE_HIGH>;
            drdy-pin = <2>;
        };
    };
    

    (GitHub #62994)

  • Runtime configuration is now disabled by default for Nordic UART drivers. The motivation for the change is that this feature is rarely used and disabling it significantly reduces the memory footprint.

Power Management

Shell

Bootloader

  • MCUboot’s deprecated 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)

Bluetooth

LoRaWAN

  • The API to register a callback to provide battery level information to the LoRaWAN stack has been renamed from lorawan_set_battery_level_callback to 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)

Networking

  • The CoAP public API has some minor changes to take into account. The coap_remove_observer() now returns a result if the observer was removed. This change is used by the newly introduced CoAP server subsystem. Also, the request argument for 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 coap_pending_init() has changed. The parameter retries is replaced with a pointer to 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 coap_service_send() and coap_resource_send() have changed. An additional parameter pointer to 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 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)

Other Subsystems

  • MCUmgr applications that make use of serial transports (shell or UART) must now select CONFIG_CRC, this was previously erroneously selected if MCUmgr was enabled, when for non-serial transports it was not needed. (GitHub #64078)

  • Touchscreen drivers focaltech,ft5336 and 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 GPIO_ACTIVE_LOW in the devicetree. (GitHub #64800)