releases/migration-guide-3.7.html · releases/migration-guide-3.7.rst 공식 원문 ↗

Zephyr 3.7.0 · Releases

Zephyr v3.7.0 Migration Guide

Hardware model v2와 generated include부터 MIPI DBI, 새 Bluetooth HCI driver model, POSIX·network·SMF migration까지 실제 수정 지점을 연결합니다.

Official pathreleases/migration-guide-3.7.html
Source filereleases/migration-guide-3.7.rst
Source versionZephyr 3.7.0
TranslationFull · reviewed

본문 기준: Zephyr 3.7.0 LTS3 · 이후 유지보수 패치는 별도입니다.

Part 1

요약·해설

1,000줄 원문, generated header 19개 표와 exact code example 13개, 9개 대단원·31개 하위 절의 migration action을 모두 보존합니다.

Build · Kernel

HW model v2 · arch_esf

Drivers · DT

PIT · ENET · MIPI DBI

Subsystem

Bluetooth · net · POSIX

Part 2

접을 수 있는 영어 원문 전체

영어 원문 전체 펼치기
원문 SHA-256 F6C6511ECA057E75279D5C2A5E10823A0BE55CB1E593550AE7DC4B72F3C628B6
:orphan:

.. _migration_3.7:

Migration guide to Zephyr v3.7.0
################################

This document describes the changes required when migrating your application from Zephyr v3.6.0 to
Zephyr v3.7.0.

Any other changes (not directly related to migrating applications) can be found in
the :ref:`release notes<zephyr_3.7>`.

.. contents::
    :local:
    :depth: 2

Build System
************

* Completely overhauled the way SoCs and boards are defined. This requires all
  out-of-tree SoCs and boards to be ported to the new model. See the
  :ref:`hw_model_v2` for more detailed information. (:github:`69607`)

* The following build-time generated headers:

  .. list-table::
     :header-rows: 1

     * - Affected header files
     * - ``app_version.h``
     * - ``autoconf.h``
     * - ``cmake_intdef.h``
     * - ``core-isa-dM.h``
     * - ``devicetree_generated.h``
     * - ``driver-validation.h``
     * - ``kobj-types-enum.h``
     * - ``linker-kobject-prebuilt-data.h``
     * - ``linker-kobject-prebuilt-priv-stacks.h``
     * - ``linker-kobject-prebuilt-rodata.h``
     * - ``mcuboot_version.h``
     * - ``offsets.h``
     * - ``otype-to-size.h``
     * - ``otype-to-str.h``
     * - ``strerror_table.h``
     * - ``strsignal_table.h``
     * - ``syscall_list.h``
     * - ``version.h``
     * - ``zsr.h``

  as well as syscall headers & sources are now namespaced into the ``zephyr/`` folder. The change is largely
  automated, and the script can be found in :github:`63973`.
  For the time being, the compatibility Kconfig (:kconfig:option:`CONFIG_LEGACY_GENERATED_INCLUDE_PATH`)
  is enabled by default so that downstream applications will continue to compile, a warning message
  will be generated during CMake configuration time.
  This Kconfig will be deprecated and eventually removed in the future, developers are advised to
  update the include paths of these affected headers as soon as possible.

Kernel
******

* All architectures are now required to define the new ``struct arch_esf``, which describes the members
  of a stack frame. This new struct replaces the named struct ``z_arch_esf_t``. (:github:`73593`)

* The named struct ``z_arch_esf_t`` is now deprecated. Use ``struct arch_esf`` instead. (:github:`73593`)

* The header file :zephyr_file:`include/zephyr/arch/arch_interface.h` has been moved from
  ``include/zephyr/sys/`` into ``include/zephyr/arch/``. Out-of-tree source files will need to
  update the include path. (:github:`64987`)

Boards
******

* Reordered D1 and D0 in the ``pro_micro`` connector gpio-map for SparkFun Pro Micro RP2040 to match
  original Pro Micro definition. Out-of-tree shields must be updated to reflect this change. (:github:`69994`)
* ITE: Rename all SoC variant Kconfig options, e.g., ``CONFIG_SOC_IT82202_AX`` is renamed to
  :kconfig:option:`CONFIG_SOC_IT82202AX`.
  All symbols are renamed as follows: ``SOC_IT81202BX``, ``SOC_IT81202CX``, ``SOC_IT81302BX``,
  ``SOC_IT81302CX``, ``SOC_IT82002AW``, ``SOC_IT82202AX``, ``SOC_IT82302AX``.
  And, rename the ``SOC_SERIES_ITE_IT8XXX2`` to ``SOC_SERIES_IT8XXX2``. (:github:`71680`)
* For native_sim/posix: :kconfig:option:`CONFIG_EMUL` is no longer enabled by default when
  :kconfig:option:`CONFIG_I2C` is set. Users who need this setting enabled should set it in
  their project config file. (:github:`73067`)

* LiteX: Renamed the ``compatible`` of the LiteX VexRiscV interrupt controller node from
  ``vexriscv-intc0`` to :dtcompatible:`litex,vexriscv-intc0`. (:github:`73211`)

* ``lairdconnect`` boards are now ``ezurio`` boards. Laird Connectivity has rebranded to `Ezurio <https://www.ezurio.com/laird-connectivity>`_.

Modules
*******

Mbed TLS
========

* TLS 1.2, RSA, AES, DES, and all the hash algorithms except SHA-256
  (SHA-224, SHA-384, SHA-512, MD5 and SHA-1) are not enabled by default anymore.
  Their respective Kconfig options now need to be explicitly enabled to be able to use them.
  (:github:`72078`)
* The Kconfig options previously named ``CONFIG_MBEDTLS_MAC_*_ENABLED`` have been renamed.
  The ``_MAC`` and ``_ENABLED`` parts have been removed from their names. (:github:`73267`)
* The :kconfig:option:`CONFIG_MBEDTLS_HASH_ALL_ENABLED` Kconfig option has been fixed to actually
  enable all the available hash algorithms. Previously, it used to only enable the SHA-2 ones.
  (:github:`73267`)
* The ``CONFIG_MBEDTLS_HASH_SHA*_ENABLED`` Kconfig options have been removed. They were duplicates
  of other Kconfig options which are now named ``CONFIG_MBEDTLS_SHA*``. (:github:`73267`)
* The ``CONFIG_MBEDTLS_MAC_ALL_ENABLED`` Kconfig option has been removed. Its equivalent is the
  combination of :kconfig:option:`CONFIG_MBEDTLS_HASH_ALL_ENABLED` and :kconfig:option:`CONFIG_MBEDTLS_CMAC`.
  (:github:`73267`)
* The Kconfig options ``CONFIG_MBEDTLS_MAC_MD4_ENABLED``, ``CONFIG_MBEDTLS_CIPHER_ARC4_ENABLED``
  and ``CONFIG_MBEDTLS_CIPHER_BLOWFISH_ENABLED`` were removed because they are no more supported
  in Mbed TLS. (:github:`73222`)
* When there is any PSA crypto provider available in the system
  (i.e. :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT` is set), desired PSA crypto
  features must be explicitly enabled using proper ``CONFIG_PSA_WANT_*``. (:github:`72243`)
* TLS/X509/PK/MD modules will use PSA crypto APIs instead of legacy ones as soon
  as there is any PSA crypto provider available in the system
  (i.e. :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT` is set). (:github:`72243`)

Trusted Firmware-M
==================

* The default MCUboot signature type has been changed from RSA-3072 to EC-P256.
  This affects builds that have MCUboot enabled in TF-M (:kconfig:option:`CONFIG_TFM_BL2`).
  If you wish to keep using RSA-3072, you need to set :kconfig:option:`CONFIG_TFM_MCUBOOT_SIGNATURE_TYPE`
  to ``"RSA-3072"``. Otherwise, make sure to have your own signing keys of the signature type in use.

LVGL
====

* :kconfig:option:`CONFIG_LV_Z_POINTER_KSCAN` was removed, you need to convert your kscan based
  driver to the input subsystem and use a :dtcompatible:`zephyr,lvgl-pointer-input` in your
  devicetree instead. (:github:`73800`)


Device Drivers and Devicetree
*****************************

* The :dtcompatible:`nxp,kinetis-pit` pit driver has changed its compatible
  to :dtcompatible:`nxp,pit` and has been updated to support multiple channels.
  To configure the individual channels, you must add a child node with the
  compatible :dtcompatible:`nxp,pit-channel` and configure as below.
  The :kconfig:option:`CONFIG_COUNTER_MCUX_PIT` has also been renamed to
  :kconfig:option:`CONFIG_COUNTER_NXP_PIT` with regards to the renaming
  of the binding for the pit. (:github:`66336`)
  example:

  .. code-block:: devicetree

    / {
        pit0: pit@40037000 {
            /* Other Pit DT Attributes */
            compatible = "nxp,pit";
            status = "disabled";
            num-channels = <1>;
            #address-cells = <1>;
            #size-cells = <0>;

            pit0_channel0: pit0_channel@0 {
                compatible = "nxp,pit-channel";
                reg = <0>;
                status = "disabled";
            };
    };

* The :dtcompatible:`nxp,kinetis-ethernet` has been deprecated in favor of
  :dtcompatible:`nxp,enet`. All in tree SOCs were converted to use this new schema.
  Thus, all boards using NXP's ENET peripheral will need to align to this binding
  in DT, which also comes with a different version driver. Alternatively,
  the Ethernet node can be deleted and redefined as the old binding to use
  the deprecated legacy driver. The primary advantage of the new binding
  is to be able to abstract an arbitrary phy through the mdio API. (:github:`70400`)
  Example of a basic board level ENET DT definition:

  .. code-block:: devicetree

    &enet_mac {
        status = "okay";
        pinctrl-0 = <&pinmux_enet>;
        pinctrl-names = "default";
        phy-handle = <&phy>;
        zephyr,random-mac-address;
        phy-connection-type = "rmii";
    };

    &enet_mdio {
        status = "okay";
        pinctrl-0 = <&pinmux_enet_mdio>;
        pinctrl-names = "default";
        phy: phy@3 {
            compatible = "ethernet-phy";
            reg = <3>;
            status = "okay";
        };
    };

* The :dtcompatible:`nxp,kinetis-lptmr` compatible string has been changed to
  :dtcompatible:`nxp,lptmr`. The old string will be usable for a short time, but
  should be replaced for it will be removed in the future.

* Some of the driver API structs have been rename to have the required ``_driver_api`` suffix. (:github:`72182`)
  The following types have been renamed:

  * ``emul_sensor_backend_api`` to :c:struct:`emul_sensor_driver_api`
  * ``emul_bbram_backend_api`` to :c:struct:`emul_bbram_driver_api`
  * ``usbc_ppc_drv`` to :c:struct:`usbc_ppc_driver_api`

* The driver for :dtcompatible:`maxim,max31790` got split up into a MFD and an
  actual PWM driver. (:github:`68433`)
  Previously, an instance of this device could have been defined like this:

  .. code-block:: devicetree

    max31790_max31790: max31790@20 {
        compatible = "maxim,max31790";
        status = "okay";
        reg = <0x20>;
        pwm-controller;
        #pwm-cells = <2>;
    };

  This can be converted to:

  .. code-block:: devicetree

    max31790_max31790: max31790@20 {
        compatible = "maxim,max31790";
        status = "okay";
        reg = <0x20>;

        max31790_max31790_pwm: max31790_max31790_pwm {
            compatible = "maxim,max31790-pwm";
            status = "okay";
            pwm-controller;
            #pwm-cells = <2>;
        };
    };

* The driver for :dtcompatible:`invensense,icm42688` now correctly supports device
  tree configuration(:github:`74267`). Prior devicetrees may have tried to use
  the bindings to set sample rate and scale for the accel/gyro without any
  effect. The devicetree usage should now use the provided defines and include
  file along with new bindings which take these values.

  For example:

  .. code-block:: devicetree

    #include <zephyr/dt-bindings/sensor/icm42688.h>

    icm42688: icm42688@0 {
        accel-pwr-mode = <ICM42688_ACCEL_LN>;
        accel-fs = <ICM42688_ACCEL_FS_16G>;
        accel-odr = <ICM42688_ACCEL_ODR_2000>;
        gyro-pwr-mode= <ICM42688_GYRO_LN>;
        gyro-fs = <ICM42688_GYRO_FS_2000>;
        gyro-odr = <ICM42688_GYRO_ODR_2000>;
    };

* :dtcompatible:`st,lis2mdl` property ``spi-full-duplex`` changed to ``duplex =
  SPI_FULL_DUPLEX``. Full duplex is now the default.

* The DT property ``nxp,reference-supply`` of :dtcompatible:`nxp,lpc-lpadc` driver has
  been removed, users should remove this property from their devicetree if it is present.
  Added new phandle-array type DT property ``nxp,references``, the user can use this
  property to specify the reference voltage and reference voltage value to be used by
  the lpadc. (:github:`75005`)

 * The DT properties ``mc,interface-type``, ``mc,reset-gpio``, and ``mc,interrupt-gpio`` of
   the :dtcompatible:`microchip,ksz8081` phy binding have changed to
   ``microchip,interface-type``, ``reset-gpios``, and ``int-gpios``, respectively (:github:`73725`)

Charger
=======

* Dropped ``constant-charge-current-max-microamp`` property in ``charger_max20335`` driver because
  it did not reflect real chip functionality. (:github:`69910`)

* Added enum key to ``constant-charge-voltage-max-microvolt`` property in ``maxim,max20335-charger``
  binding to indicate invalid devicetree values at build time. (:github:`69910`)

Controller Area Network (CAN)
=============================

* Removed the following deprecated CAN controller devicetree properties. Out-of-tree boards using
  these properties can switch to using the ``bitrate``, ``sample-point``, ``bitrate-data``, and
  ``sample-point-data`` devicetree properties (or rely on
  :kconfig:option:`CONFIG_CAN_DEFAULT_BITRATE` and
  :kconfig:option:`CONFIG_CAN_DEFAULT_BITRATE_DATA`) for specifying the initial CAN bitrate:

  * ``sjw``
  * ``prop-seg``
  * ``phase-seg1``
  * ``phase-seg2``
  * ``sjw-data``
  * ``prop-seg-data``
  * ``phase-seg1-data``
  * ``phase-seg2-data``

  The ``bus-speed`` and ``bus-speed-data`` CAN controller devicetree properties have been
  deprecated.

  (:github:`68714`)

* Support for manual bus-off recovery was reworked (:github:`69460`):

  * Automatic bus recovery will always be enabled upon driver initialization regardless of Kconfig
    options. Since CAN controllers are initialized in "stopped" state, no unwanted bus-off recovery
    will be started at this point.
  * The Kconfig ``CONFIG_CAN_AUTO_BUS_OFF_RECOVERY`` was renamed (and inverted) to
    :kconfig:option:`CONFIG_CAN_MANUAL_RECOVERY_MODE`, which is disabled by default. This Kconfig
    option enables support for the :c:func:`can_recover()` API function and a new manual recovery mode
    (see the next bullet).
  * A new CAN controller operational mode :c:macro:`CAN_MODE_MANUAL_RECOVERY` was added. Support for
    this is only enabled if :kconfig:option:`CONFIG_CAN_MANUAL_RECOVERY_MODE` is enabled. Having
    this as a mode allows applications to inquire whether the CAN controller supports manual
    recovery mode via the :c:func:`can_get_capabilities` API function. The application can then
    either fail initialization or rely on automatic bus-off recovery. Having this as a mode
    furthermore allows CAN controller drivers not supporting manual recovery mode to fail early in
    :c:func:`can_set_mode` during application startup instead of failing when :c:func:`can_recover`
    is called at a later point in time.

Crypto
======

* The CSS driver has been deprecated on NXP lpc55s36 (:github:`71173`).

Display
=======

* GC9X01 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. (:github:`73686`)
  For an example, see below:

  .. code-block:: devicetree

    /* Legacy GC9X01 display definition */
    &spi0 {
        gc9a01: gc9a01@0 {
            status = "okay";
            compatible = "galaxycore,gc9x01x";
            reg = <0>;
            spi-max-frequency = <100000000>;
            cmd-data-gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
            reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
            ...
        };
    };

    /* New display definition with MIPI DBI device */

    #include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

    ...

    mipi_dbi {
        compatible = "zephyr,mipi-dbi-spi";
        dc-gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
        reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
        spi-dev = <&spi0>;
        #address-cells = <1>;
        #size-cells = <0>;

        gc9a01: gc9a01@0 {
            status = "okay";
            compatible = "galaxycore,gc9x01x";
            reg = <0>;
            mipi-max-frequency = <100000000>;
            ...
        };
    };


* ST7735R 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 ST7735R display definition */
    &spi0 {
        st7735r: st7735r@0 {
            compatible = "sitronix,st7735r";
            reg = <0>;
            spi-max-frequency = <32000000>;
            reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
            cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
            ...
        };
    };

    /* New display definition with MIPI DBI device */

    #include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

    ...

    mipi_dbi {
        compatible = "zephyr,mipi-dbi-spi";
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
        spi-dev = <&spi0>;
        #address-cells = <1>;
        #size-cells = <0>;

        st7735r: st7735r@0 {
            compatible = "sitronix,st7735r";
            reg = <0>;
            mipi-max-frequency = <32000000>;
            mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>;
            ...
        };
    };

* UC81XX 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. (:github:`73812`) Note that the ``dc-gpios``
  pin has changed polarity with this update, for an example, see below:

  .. code-block:: devicetree

    /* Legacy UC81XX display definition */
    &spi0 {
        uc8179: uc8179@0 {
            compatible = "ultrachip,uc8179";
            reg = <0>;
            spi-max-frequency = <4000000>;
            reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
            dc-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
            ...
        };
    };

    /* New display definition with MIPI DBI device */

    #include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

    ...

    mipi_dbi {
        compatible = "zephyr,mipi-dbi-spi";
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
        spi-dev = <&spi0>;
        #address-cells = <1>;
        #size-cells = <0>;
        uc8179: uc8179@0 {
            compatible = "ultrachip,uc8179";
            reg = <0>;
            mipi-max-frequency = <4000000>;
            ...
        };
    };

* ST7789V 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. (:github:`73750`) 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 ST7789V display definition */
    &spi0 {
        st7789: st7789@0 {
            compatible = "sitronix,st7789v";
            reg = <0>;
            spi-max-frequency = <32000000>;
            reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
            cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
            ...
        };
    };

    /* New display definition with MIPI DBI device */

    #include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

    ...

    mipi_dbi {
        compatible = "zephyr,mipi-dbi-spi";
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
        spi-dev = <&spi0>;
        #address-cells = <1>;
        #size-cells = <0>;

        st7789: st7789@0 {
            compatible = "sitronix,st7789v";
            reg = <0>;
            mipi-max-frequency = <32000000>;
            mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>;
            ...
        };
    };

* SSD16XX based displays now use the MIPI DBI driver class (:github:`73946`).
  These displays must now be declared within a MIPI DBI driver wrapper device,
  which will manage interfacing with the display. Note that the ``dc-gpios``
  pin has changed polarity with this update. For an example, see below:

  .. code-block:: devicetree

    /* Legacy SSD16XX display definition */
    &spi0 {
        ssd1680: ssd1680@0 {
            compatible = "solomon,ssd1680";
            reg = <0>;
            spi-max-frequency = <4000000>;
            reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
            dc-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
            ...
        };
    };

    /* New display definition with MIPI DBI device */

    #include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

    ...

    mipi_dbi {
        compatible = "zephyr,mipi-dbi-spi";
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
        spi-dev = <&spi0>;
        #address-cells = <1>;
        #size-cells = <0>;

        ssd1680: ssd1680@0 {
            compatible = "solomon,ssd1680";
            reg = <0>;
            mipi-max-frequency = <4000000>;
            ...
        };
    };

* The ``orientation-flipped`` property has been removed from the SSD16XX
  display driver, as the driver now supports display rotation. Users should
  drop this property from their devicetree, and set orientation at runtime
  via :c:func:`display_set_orientation` (:github:`73360`)

Enhanced Serial Peripheral Interface (eSPI)
===========================================

* The macros ``ESPI_SLAVE_TO_MASTER`` and ``ESPI_MASTER_TO_SLAVE`` were renamed to
  ``ESPI_TARGET_TO_CONTROLLER`` and ``ESPI_CONTROLLER_TO_TARGET`` respectively to reflect
  the new terminology in eSPI 1.5 specification.
  The enum values ``ESPI_VWIRE_SIGNAL_SLV_BOOT_STS``, ``ESPI_VWIRE_SIGNAL_SLV_BOOT_DONE`` and
  all ``ESPI_VWIRE_SIGNAL_SLV_GPIO_<NUMBER>`` signals were renamed to
  ``ESPI_VWIRE_SIGNAL_TARGET_BOOT_STS``, ``ESPI_VWIRE_SIGNAL_TARGET_BOOT_DONE`` and
  ``ESPI_VWIRE_SIGNAL_TARGET_GPIO_<NUMBER>`` respectively to reflect the new terminology
  in eSPI 1.5 specification. (:github:`68492`)
  The Kconfig ``CONFIG_ESPI_SLAVE`` was renamed to  :kconfig:option:`CONFIG_ESPI_TARGET`, similarly
  ``CONFIG_ESPI_SAF`` was renamed as :kconfig:option:`CONFIG_ESPI_TAF` (:github:`73887`)

GNSS
====

* Basic power management support has been added to the ``gnss-nmea-generic`` driver.
  If ``CONFIG_PM_DEVICE=y`` the driver is now initialized in suspended mode and the
  application needs to call :c:func:`pm_device_action_run` with :c:macro:`PM_DEVICE_ACTION_RESUME`
  to start up the driver. (:github:`71774`)

Input
=====

* The ``analog-axis`` deadzone calibration value has been changed to be
  relative to the raw ADC values, similarly to min and max. The data structures
  and properties have been renamed to reflect that (from ``out-deadzone`` to
  ``in-deadzone``) and when migrating to the new definition the value should be
  scaled accordingly. (:github:`70377`)

* The ``holtek,ht16k33-keyscan`` driver has been converted to use the
  :ref:`input` subsystem, callbacks have to be migrated to use the input APIs,
  :dtcompatible:`zephyr,kscan-input` can be used for backward compatibility. (:github:`69875`)

Interrupt Controller
====================

* The static auto-generation of the multilevel interrupt controller lookup table has been
  deprecated, and will be compiled only when the new compatibility Kconfig:
  :kconfig:option:`CONFIG_LEGACY_MULTI_LEVEL_TABLE_GENERATION` is enabled, which will eventually
  be removed in the coming releases.

  Multi-level interrupt controller drivers should be updated to use the newly created
  ``IRQ_PARENT_ENTRY_DEFINE`` macro to register itself with the new multi-level interrupt
  architecture. To make the macro easier to use, ``INTC_INST_ISR_TBL_OFFSET`` macro is made to
  deduce the software ISR table offset for a given driver instance, for pseudo interrupt controller
  child, use the ``INTC_CHILD_ISR_TBL_OFFSET`` macro instead. New devicetree macros
  (``DT_INTC_GET_AGGREGATOR_LEVEL`` & ``DT_INST_INTC_GET_AGGREGATOR_LEVEL``) have been added
  for an interrupt controller driver instance to pass its aggregator level into the
  ``IRQ_PARENT_ENTRY_DEFINE`` macro.

LED Strip
=========

* The property ``in-gpios`` defined in :dtcompatible:`worldsemi,ws2812-gpio` has been
  renamed to ``gpios``. (:github:`68514`)

* The ``chain-length`` and ``color-mapping`` properties have been added to all LED strip bindings
  and are now mandatory.

* Added a new mandatory ``length`` function which returns the length (number of pixels) of an LED
  strip device.

* Made ``update_channels`` function optional and removed unimplemented functions.

* The ``CONFIG_WS2812_STRIP_DRIVER`` kconfig option has been removed.
  Previously, when using :kconfig:option:`CONFIG_WS2812_STRIP_SPI`,
  :kconfig:option:`CONFIG_WS2812_STRIP_I2S`, :kconfig:option:`CONFIG_WS2812_STRIP_GPIO`,
  or :kconfig:option:`CONFIG_WS2812_STRIP_RPI_PICO_PIO`, one of them had to be selected with
  ``CONFIG_WS2812_STRIP_DRIVER``, but this is no longer necessary. Please set each option directly.

MDIO
====

* :kconfig:option:`CONFIG_MDIO_NXP_ENET_TIMEOUT` is now in units of
  microseconds instead of milliseconds. (:github:`75625`)

Sensors
=======

* The ``chip`` devicetree property from the :dtcompatible:`sensirion,shtcx` sensor driver has been
  removed. Chip variants are now selected using the matching compatible property (:github:`74033`).
  For an example of the new shtc3 configuration, see below:

  .. code-block:: devicetree

    &i2c0 {
        status = "okay";

        shtc3: shtc3@70 {
            compatible = "sensirion,shtc3", "sensirion,shtcx";
            reg = <0x70>;
            measure-mode = "normal";
            clock-stretching;
        };
    };

Serial
======

* The Raspberry Pi UART driver ``uart_rpi_pico`` has been removed.
  Use ``uart_pl011`` (:dtcompatible:`arm,pl011`) instead. (:github:`71074`)

Regulator
=========

* The :dtcompatible:`nxp,vref` driver no longer supports the ground selection function,
  as this setting should not be modified by the user. The DT property ``nxp,ground-select``
  has been removed, users should remove this property from their devicetree if it is present.
  (:github:`70642`)

W1
==

* The :dtcompatible:`zephyr,w1-gpio` 1-Wire master driver no longer defaults to enabling the
  internal pull-up resistor of the GPIO pin. The configuration is now taken from the pin's
  configuration flags specified in devicetree. (:github:`71789`)

Watchdog
========

* The ``nuvoton,npcx-watchdog`` driver has been changed to extend the max timeout period.
  The time of one watchdog count varies with the different pre-scalar settings.
  Removed :kconfig:option:`CONFIG_WDT_NPCX_DELAY_CYCLES` because it is no longer suitable to
  set the leading warning time.
  Instead, added the :kconfig:option:`CONFIG_WDT_NPCX_WARNING_LEADING_TIME_MS` to set
  the leading warning time in milliseconds.

Bluetooth
*********

Bluetooth HCI
=============

 * A new HCI driver API was introduced (:github:`72323`) and the old one deprecated. The new API
   follows the normal Zephyr driver model, with devicetree nodes, etc. The host now
   selects which driver instance to use as the controller by looking for a ``zephyr,bt-hci``
   chosen property. The devicetree bindings for all HCI drivers derive from a common
   ``bt-hci.yaml`` base binding.

  * As part of the new HCI driver API, the ``zephyr,bt-uart`` chosen property is no longer used,
    rather the UART HCI drivers select their UART by looking for the parent devicetree node of the
    HCI driver instance node.
  * As part of the new HCI driver API, the ``zephyr,bt-hci-ipc`` chosen property is only used for
    the controller side, whereas the HCI driver now relies on nodes with the compatible string
    ``zephyr,bt-hci-ipc``.
  * The ``BT_NO_DRIVER`` Kconfig option was removed. HCI drivers are no-longer behind a Kconfig
    choice, rather they can now be enabled and disabled independently, mostly based on their
    respective devicetree node being enabled or not.
  * The ``BT_HCI_VS_EXT`` Kconfig option was deleted and the feature is now included in the
    :kconfig:option:`CONFIG_BT_HCI_VS` Kconfig option.
  * The ``BT_HCI_VS_EVT`` Kconfig option was removed, since vendor event support is implicit if
    the :kconfig:option:`CONFIG_BT_HCI_VS` option is enabled.
  * The bt_read_static_addr() API was removed. This wasn't really a completely public API, but
    since it was exposed by the public hci_driver.h header file the removal is mentioned here.
    Enable the :kconfig:option:`CONFIG_BT_HCI_VS` Kconfig option instead, and use vendor specific
    HCI commands API to get the Controller's Bluetooth static address when available.

Bluetooth Mesh
==============

* The model metadata pointer declaration of :c:struct:`bt_mesh_model` has been changed
  to add ``const`` qualifiers. The data pointer of :c:struct:`bt_mesh_models_metadata_entry`
  got ``const`` qualifier too. The model's metadata structure and metadata raw value
  can be declared as permanent constants in the non-volatile memory. (:github:`69679`)

* The model metadata pointer declaration of :c:struct:`bt_mesh_model` has been changed
  to a single ``const *`` and redundant metadata pointer from :c:struct:`bt_mesh_health_srv`
  is removed. Consequently, :code:`BT_MESH_MODEL_HEALTH_SRV` definition is changed
  to use variable argument notation. Now, when your implementation
  supports :kconfig:option:`CONFIG_BT_MESH_LARGE_COMP_DATA_SRV` and when you need to
  specify metadata for Health Server model, simply pass metadata as the last argument
  to the :code:`BT_MESH_MODEL_HEALTH_SRV` macro, otherwise omit the last argument. (:github:`71281`)

Bluetooth Audio
===============

* :kconfig:option:`CONFIG_BT_ASCS`, :kconfig:option:`CONFIG_BT_PERIPHERAL` and
  :kconfig:option:`CONFIG_BT_ISO_PERIPHERAL` are no longer enabled automatically when
  enabling :kconfig:option:`CONFIG_BT_BAP_UNICAST_SERVER`, and these must now be set explicitly
  in the project configuration file. (:github:`71993`)

* The discover callback functions :code:`bt_cap_initiator_cb.unicast_discovery_complete` and
  :code:`bt_cap_commander_cb.discovery_complete` for CAP now contain an additional parameter for
  the set member.
  This needs to be added to all instances of CAP discovery callback functions defined.
  (:github:`72797`)

* :c:func:`bt_bap_stream_start` no longer connects the CIS. To connect the CIS,
  the :c:func:`bt_bap_stream_connect` shall now be called before :c:func:`bt_bap_stream_start`.
  (:github:`73032`)

* Renamed ``stream_lang`` to just ``lang`` to better fit with the assigned numbers document.
  This affects the ``BT_AUDIO_METADATA_TYPE_LANG`` macro and the following functions:

  * :c:func:`bt_audio_codec_cap_meta_set_lang`
  * :c:func:`bt_audio_codec_cap_meta_get_lang`
  * :c:func:`bt_audio_codec_cfg_meta_set_lang`
  * :c:func:`bt_audio_codec_cfg_meta_get_lang`

  (:github:`72584`)

* Changed ``lang`` from ``uint32_t`` to ``uint8_t [3]``. This modifies the following functions:

  * :c:func:`bt_audio_codec_cap_meta_set_lang`
  * :c:func:`bt_audio_codec_cap_meta_get_lang`
  * :c:func:`bt_audio_codec_cfg_meta_set_lang`
  * :c:func:`bt_audio_codec_cfg_meta_get_lang`

  The result of this is that string values such as ``"eng"`` and ``"deu"`` can now be used to set
  new values, and to prevent unnecessary copies of data when getting the values. (:github:`72584`)

* All occurrences of ``set_sirk`` have been changed to just ``sirk`` as the ``s`` in ``sirk`` stands
  for set. (:github:`73413`)

* Added ``fallback_to_default`` parameter to :c:func:`bt_audio_codec_cfg_get_chan_allocation`.
  To maintain existing behavior set the parameter to ``false``. (:github:`72090`)

* Added ``fallback_to_default`` parameter to
  :c:func:`bt_audio_codec_cap_get_supported_audio_chan_counts`.
  To maintain existing behavior set the parameter to ``false``. (:github:`72090`)

* Added ``fallback_to_default`` parameter to
  :c:func:`bt_audio_codec_cap_get_max_codec_frames_per_sdu`.
  To maintain existing behavior set the parameter to ``false``. (:github:`72090`)

* Added ``fallback_to_default`` parameter to
  :c:func:`bt_audio_codec_cfg_meta_get_pref_context`.
  To maintain existing behavior set the parameter to ``false``. (:github:`72090`)

Bluetooth Classic
=================

* The source files of Host BR/EDR have been moved to ``subsys/bluetooth/host/classic``.
  The Header files of Host BR/EDR have been moved to ``include/zephyr/bluetooth/classic``.
  Removed the :kconfig:option:`CONFIG_BT_BREDR`. It is replaced by new option
  :kconfig:option:`CONFIG_BT_CLASSIC`. (:github:`69651`)

Bluetooth Host
==============

* The advertiser options :code:`BT_LE_ADV_OPT_USE_NAME` and :code:`BT_LE_ADV_OPT_FORCE_NAME_IN_AD`
  are deprecated in this release. The application need to include the device name explicitly. One
  way to do it is by adding the following to the advertising data or scan response data passed to
  the host:

  .. code-block:: c

   BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1)

  (:github:`71686`)

* The field :code:`init_credits` in :c:type:`bt_l2cap_le_endpoint` has been removed as it was no
  longer used in Zephyr 3.4.0 and later. Any references to this field should be removed. No further
  action is needed.

* :c:macro:`BT_LE_ADV_PARAM` now returns a :code:`const` pointer.
  Any place where the result is stored in a local variable such as
  :code:`struct bt_le_adv_param *param = BT_LE_ADV_CONN;` will need to
  be updated to :code:`const struct bt_le_adv_param *param = BT_LE_ADV_CONN;` or use it for
  initialization like :code:`struct bt_le_adv_param param = *BT_LE_ADV_CONN;`

  The change to :c:macro:`BT_LE_ADV_PARAM` also affects all of its derivatives, including but not
  limited to:

  * :c:macro:`BT_LE_ADV_CONN`
  * :c:macro:`BT_LE_ADV_NCONN`
  * :c:macro:`BT_LE_EXT_ADV_SCAN`
  * :c:macro:`BT_LE_EXT_ADV_CODED_NCONN_NAME`

  (:github:`75065`)

* :kconfig:option:`CONFIG_BT_BUF_ACL_RX_COUNT` now needs to be larger than
  :kconfig:option:`CONFIG_BT_MAX_CONN`. This was always the case due to the design of the HCI
  interface. It is now being enforced through a build-time assertion.

  (:github:`75592`)

Bluetooth Crypto
================

* :kconfig:option:`CONFIG_BT_USE_PSA_API` was added to explicitly request use
  of PSA APIs instead of TinyCrypt for crypto operations. Of course, this is
  possible only a PSA crypto provider available in the system, i.e.
  :kconfig:option:`CONFIG_PSA_CRYPTO_CLIENT` is set. (:github:`73378`)

Networking
**********

* Deprecate the :kconfig:option:`CONFIG_NET_SOCKETS_POSIX_NAMES` option. It is a legacy option
  and was used to allow user to call BSD socket API while not enabling POSIX API.
  This could cause complications when building applications that wanted to enable the
  :kconfig:option:`CONFIG_POSIX_API` option. This means that if the application wants to use
  normal BSD socket interface, then it needs to enable :kconfig:option:`CONFIG_POSIX_API`.
  If the application does not want or is not able to enable that option, then the socket API
  calls need to be prefixed by a ``zsock_`` string.
  All the sample applications that use BSD socket interface are changed to enable
  :kconfig:option:`CONFIG_POSIX_API`. Internally the network stack will not enable POSIX API
  option which means that various network libraries that use sockets, are converted to
  use the ``zsock_*`` API calls. (:github:`69950`)

* The zperf zperf_results struct is changed to support 64 bits transferred bytes (total_len)
  and test duration (time_in_us and client_time_in_us), instead of 32 bits. This will make
  the long-duration zperf test show with correct throughput result. (:github:`69500`)

* Each IPv4 address assigned to a network interface has an IPv4 netmask
  tied to it instead of being set for the whole interface.
  If there is only one IPv4 address specified for a network interface,
  nothing changes from the user point of view. But, if there is more than
  one IPv4 address / network interface, the netmask must be specified
  for each IPv4 address separately. (:github:`68419`)

* Virtual network interface API no longer has the ``input`` callback. The input callback was
  used to read the inner IPv4/IPv6 packets in an IP tunnel. This incoming tunnel read is now
  implemented in the ``recv`` callback. (:github:`70549`)

* Virtual LAN (VLAN) implementation is changed to use the Virtual network interfaces.
  There are no API changes, but the type of a VLAN network interface is changed from ``ETHERNET``
  to ``VIRTUAL``. This could require changes to the code that sets the VLAN tags to a network
  interface. For example in the :c:func:`net_eth_is_vlan_enabled()` API, the 2nd interface parameter
  must point to the main Ethernet interface, and not to the VLAN interface. (:github:`70345`)

* Modified the ``wifi connect`` command to use key-value format for the arguments. In the
  previous implementation, we were identifying an option using its position in the argument string.
  This made it difficult to deal with optional arguments or extending the support
  for other options. Having this key-value format makes it easier to extend the options that
  can be passed to the connect command.
  ``wifi -h`` will give more information about the usage of connect command.
  (:github:`70024`)

* The Kconfig :kconfig:option:`CONFIG_NET_TCP_ACK_TIMEOUT` has been deprecated. Its usage was
  limited to TCP handshake only, and in such case the total timeout should depend
  on the total retransmission timeout (as in other cases) making the config
  redundant and confusing. Use :kconfig:option:`CONFIG_NET_TCP_INIT_RETRANSMISSION_TIMEOUT` and
  :kconfig:option:`CONFIG_NET_TCP_RETRY_COUNT` instead to control the total timeout at the
  TCP level. (:github:`70731`)

* In LwM2M API, the callback type :c:type:`lwm2m_engine_set_data_cb_t` has now an additional
  parameter ``offset``. This parameter is used to indicate the offset of the data
  during a Coap Block-wise transfer. Any post write, validate or some firmware callbacks
  should be updated to include this parameter. (:github:`72590`)

* The DNS resolver and mDNS/LLMNR responders are converted to use socket service API.
  This means that the number of pollable sockets in the system might need to be increased.
  Please check that the values of :kconfig:option:`CONFIG_NET_SOCKETS_POLL_MAX` and
  :kconfig:option:`CONFIG_POSIX_MAX_FDS` are high enough. Unfortunately no exact values
  for these can be given as it depends on application needs and usage. (:github:`72834`)

* The packet socket (type ``AF_PACKET``) protocol field in ``socket`` API call has changed.
  The protocol field should be in network byte order so that we are compatible with Linux
  socket calls. Linux expects the protocol field to be ``htons(ETH_P_ALL)`` if it is desired
  to receive all the network packets. See details in
  https://www.man7.org/linux/man-pages/man7/packet.7.html documentation. (:github:`73338`)

* TCP now uses SHA-256 instead of MD5 for ISN generation. The crypto support for
  this hash computation was also changed from Mbed TLS to PSA APIs. This was achieved
  by making :kconfig:option:`CONFIG_NET_TCP_ISN_RFC6528` depend on
  :kconfig:option:`PSA_WANT_ALG_SHA_256` instead of legacy ``CONFIG_MBEDTLS_*``
  features. (:github:`71827`)

Other Subsystems
****************

Flash map
=========

* The crypto backend for the flash check functions (:kconfig:option:`CONFIG_FLASH_AREA_CHECK_INTEGRITY_BACKEND`),
  previously provided through either TinyCrypt or Mbed TLS, is now provided through either PSA or Mbed TLS.
  The updated Mbed TLS implementation has a slightly smaller footprint than the previous TinyCrypt one,
  and the PSA implementation offers an even greater footprint reduction for devices built with TF-M.
  PSA is the supported way forward, however as of now you may still use Mbed TLS if you cannot afford the
  one-time cost of enabling the PSA API (:kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_C` for devices without TF-M).
  :github:`73511`

hawkBit
=======

* :kconfig:option:`CONFIG_HAWKBIT_PORT` is now an int instead of a string.
  :kconfig:option:`CONFIG_SETTINGS` needs to be enabled to use hawkBit, as it now uses the
  settings subsystem to store the hawkBit configuration. (:github:`68806`)

MCUmgr
======

* The support for SHA-256 (when using checksum/hash functions), previously provided
  by either TinyCrypt or Mbed TLS, is now provided by either PSA or Mbed TLS.
  PSA is the recommended API going forward, however, if it is not already enabled
  (:kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT`) and you have tight code size
  constraints, you may be able to save 1.3 KB by using Mbed TLS instead.

Modem
=====

* The ``CONFIG_MODEM_CHAT_LOG_BUFFER`` Kconfig option was
  renamed to :kconfig:option:`CONFIG_MODEM_CHAT_LOG_BUFFER_SIZE`. (:github:`70405`)

.. _zephyr_3.7_posix_api_migration:

POSIX API
=========

* The :ref:`POSIX API Kconfig deprecations <zephyr_3.7_posix_api_deprecations>` may require
  changes to Kconfig files (``prj.conf``, etc), as outlined in the release notes. A more automated
  approach is available via the provided migration script. Simply run the following:

  .. code-block:: bash

    $ python ${ZEPHYR_BASE}/scripts/utils/migrate_posix_kconfigs.py -r root_path

State Machine Framework
=======================

* The :c:macro:`SMF_CREATE_STATE` macro now always takes 5 arguments. The amount of arguments is
  now independent of the values of :kconfig:option:`CONFIG_SMF_ANCESTOR_SUPPORT` and
  :kconfig:option:`CONFIG_SMF_INITIAL_TRANSITION`. If the additional arguments are not used, they
  have to be set to ``NULL``. (:github:`71250`)
* SMF now follows a more UML-like transition flow when the transition source is a parent of the
  state called by :c:func:`smf_run_state`. Exit actions up to (but not including) the Least Common
  Ancestor of the transition source and target state will be executed, as will entry actions from
  (but not including) the LCA down to the target state. (:github:`71675`)
* Previously, calling :c:func:`smf_set_state` with a ``new_state`` set to NULL would execute all
  exit actions from the current state to the topmost parent, with the expectation the topmost exit
  action would terminate the state machine. Passing ``NULL`` is now not allowed. Instead create a
  'terminate' state at the top level, and call :c:func:`smf_set_terminate` from its entry action.

UpdateHub
=========

* The SHA-256 implementation used to perform integrity checks is not chosen with
  :kconfig:option:`CONFIG_FLASH_AREA_CHECK_INTEGRITY_BACKEND` anymore. Instead, the implementation
  used (now either Mbed TLS or PSA) is chosen based on :kconfig:option:`CONFIG_PSA_CRYPTO_CLIENT`.
  It still defaults to using Mbed TLS (with a smaller footprint than previously) unless the
  board is built with TF-M or :kconfig:option:`CONFIG_MBEDTLS_PSA_CRYPTO_C` is enabled. (:github:`73511`)

Architectures
*************

* Function :c:func:`arch_start_cpu` has been renamed to :c:func:`arch_cpu_start`. (:github:`64987`)

* ``CONFIG_ARM64_ENABLE_FRAME_POINTER`` is deprecated. Use :kconfig:option:`CONFIG_FRAME_POINTER`
  instead. (:github:`72646`)

* x86

  * Kconfigs ``CONFIG_DISABLE_SSBD`` and ``CONFIG_ENABLE_EXTENDED_IBRS``
    are deprecated. Use :kconfig:option:`CONFIG_X86_DISABLE_SSBD` and
    :kconfig:option:`CONFIG_X86_ENABLE_EXTENDED_IBRS` instead. (:github:`69690`)

* POSIX arch:

  * LLVM fuzzing support has been refactored. A test application now needs to provide its own
    ``LLVMFuzzerTestOneInput()`` hook instead of relying on a board provided one. Check
    ``samples/subsys/debug/fuzz/`` for an example. (:github:`71378`)

Part 3

한국어 전문 번역

이 문서는 application을 Zephyr v3.6.0에서 v3.7.0으로 옮길 때 필요한 변경을 설명합니다. Application migration과 직접 관련 없는 변경은 Zephyr 3.7 release note에서 확인합니다.

Build System

  • SoC와 board를 정의하는 방식이 완전히 개편됐습니다. Tree 밖에서 관리하는 모든 SoC와 board는 새 hardware model v2로 port해야 합니다.
  • 아래 build-time generated header와 syscall header·source가 zephyr/ folder namespace 아래로 이동했습니다. 대부분은 제공된 script로 자동 변경할 수 있습니다. Downstream application이 당분간 계속 compile되도록 compatibility Kconfig CONFIG_LEGACY_GENERATED_INCLUDE_PATH가 기본 활성화되지만, CMake configuration 때 warning이 출력됩니다. 이 option은 향후 deprecated 후 제거되므로 affected include path를 가능한 빨리 갱신해야 합니다.
zephyr/ namespace로 이동한 build-time generated header
영향받는 header file
app_version.h
autoconf.h
cmake_intdef.h
core-isa-dM.h
devicetree_generated.h
driver-validation.h
kobj-types-enum.h
linker-kobject-prebuilt-data.h
linker-kobject-prebuilt-priv-stacks.h
linker-kobject-prebuilt-rodata.h
mcuboot_version.h
offsets.h
otype-to-size.h
otype-to-str.h
strerror_table.h
strsignal_table.h
syscall_list.h
version.h
zsr.h

Kernel

  • 모든 architecture는 stack frame member를 설명하는 새 struct arch_esf를 정의해야 합니다. 이 struct가 named struct z_arch_esf_t를 대체합니다.
  • Named struct z_arch_esf_t는 deprecated됐으므로 struct arch_esf를 사용합니다.
  • Header include/zephyr/arch/arch_interface.h가 include/zephyr/sys/에서 include/zephyr/arch/로 이동했습니다. Out-of-tree source의 include path를 수정해야 합니다.

Boards

  • SparkFun Pro Micro RP2040의 pro_micro connector gpio-map에서 D1과 D0 순서가 original Pro Micro definition과 일치하도록 바뀌었습니다. Out-of-tree shield도 이를 반영해야 합니다.
  • ITE SoC variant Kconfig option 이름에서 underscore가 제거됐습니다. 예를 들어 CONFIG_SOC_IT82202_AX는 CONFIG_SOC_IT82202AX가 됩니다. 대상 symbol은 SOC_IT81202BX, SOC_IT81202CX, SOC_IT81302BX, SOC_IT81302CX, SOC_IT82002AW, SOC_IT82202AX, SOC_IT82302AX이며, SOC_SERIES_ITE_IT8XXX2도 SOC_SERIES_IT8XXX2로 바뀌었습니다.
  • native_sim/posix에서는 CONFIG_I2C를 설정해도 CONFIG_EMUL이 더 이상 자동 활성화되지 않습니다. 필요한 project는 config file에서 직접 켭니다.
  • LiteX VexRiscV interrupt-controller node의 compatible이 vexriscv-intc0에서 litex,vexriscv-intc0로 바뀌었습니다.
  • Laird Connectivity의 brand 변경에 따라 lairdconnect board가 ezurio board로 바뀌었습니다.

Modules

Mbed TLS

  • TLS 1.2, RSA, AES, DES와 SHA-256을 제외한 hash algorithm(SHA-224·SHA-384·SHA-512·MD5·SHA-1)은 더 이상 기본 활성화되지 않습니다. 필요한 Kconfig option을 명시적으로 켭니다.
  • 기존 CONFIG_MBEDTLS_MAC_*_ENABLED option은 이름에서 _MAC과 _ENABLED가 제거됐습니다.
  • CONFIG_MBEDTLS_HASH_ALL_ENABLED가 실제로 사용 가능한 모든 hash algorithm을 활성화하도록 수정됐습니다. 이전에는 SHA-2 계열만 켰습니다.
  • 중복이던 CONFIG_MBEDTLS_HASH_SHA*_ENABLED option은 제거됐습니다. 이제 CONFIG_MBEDTLS_SHA* 이름의 option을 사용합니다.
  • CONFIG_MBEDTLS_MAC_ALL_ENABLED가 제거됐습니다. 같은 효과는 CONFIG_MBEDTLS_HASH_ALL_ENABLED와 CONFIG_MBEDTLS_CMAC 조합으로 얻습니다.
  • Mbed TLS가 더 이상 지원하지 않는 CONFIG_MBEDTLS_MAC_MD4_ENABLED, CONFIG_MBEDTLS_CIPHER_ARC4_ENABLED, CONFIG_MBEDTLS_CIPHER_BLOWFISH_ENABLED가 제거됐습니다.
  • System에 PSA crypto provider가 하나라도 있어 CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT가 설정되면 필요한 PSA crypto feature를 적절한 CONFIG_PSA_WANT_* option으로 명시적으로 켜야 합니다.
  • 같은 조건에서 TLS/X509/PK/MD module은 legacy API 대신 PSA crypto API를 사용합니다.

Trusted Firmware-M

  • TF-M에서 MCUboot를 켠 build(CONFIG_TFM_BL2)의 default signature type이 RSA-3072에서 EC-P256으로 바뀌었습니다. RSA-3072를 유지하려면 CONFIG_TFM_MCUBOOT_SIGNATURE_TYPE을 "RSA-3072"로 설정하고, 그렇지 않으면 실제 사용 signature type에 맞는 signing key를 준비합니다.

LVGL

  • CONFIG_LV_Z_POINTER_KSCAN이 제거됐습니다. Kscan 기반 driver를 input subsystem으로 바꾸고 Devicetree에서 zephyr,lvgl-pointer-input을 사용합니다.

Device Drivers and Devicetree

  • nxp,kinetis-pit PIT driver compatible이 nxp,pit으로 바뀌고 multiple channel을 지원합니다. 각 channel은 nxp,pit-channel compatible child node로 구성합니다. Binding 이름에 맞춰 CONFIG_COUNTER_MCUX_PIT도 CONFIG_COUNTER_NXP_PIT으로 바뀌었습니다.
/ {
    pit0: pit@40037000 {
        /* Other Pit DT Attributes */
        compatible = "nxp,pit";
        status = "disabled";
        num-channels = <1>;
        #address-cells = <1>;
        #size-cells = <0>;

        pit0_channel0: pit0_channel@0 {
            compatible = "nxp,pit-channel";
            reg = <0>;
            status = "disabled";
        };
};
  • nxp,kinetis-ethernet은 nxp,enet을 위해 deprecated됐습니다. Tree 내 SoC는 모두 새 schema로 변환됐으므로 NXP ENET peripheral을 쓰는 board도 새 binding과 driver에 맞춰야 합니다. 구 legacy driver가 꼭 필요하면 Ethernet node를 지우고 old binding으로 다시 정의할 수 있습니다. 새 binding은 MDIO API를 통해 임의 PHY를 추상화할 수 있다는 장점이 있습니다.
&enet_mac {
    status = "okay";
    pinctrl-0 = <&pinmux_enet>;
    pinctrl-names = "default";
    phy-handle = <&phy>;
    zephyr,random-mac-address;
    phy-connection-type = "rmii";
};

&enet_mdio {
    status = "okay";
    pinctrl-0 = <&pinmux_enet_mdio>;
    pinctrl-names = "default";
    phy: phy@3 {
        compatible = "ethernet-phy";
        reg = <3>;
        status = "okay";
    };
};
  • nxp,kinetis-lptmr compatible string이 nxp,lptmr로 바뀌었습니다. Old string은 잠시 사용할 수 있지만 향후 제거되므로 교체합니다.
  • 필수 _driver_api suffix를 갖도록 driver API struct 일부가 rename됐습니다. emul_sensor_backend_api → emul_sensor_driver_api, emul_bbram_backend_api → emul_bbram_driver_api, usbc_ppc_drv → usbc_ppc_driver_api입니다.
  • maxim,max31790 driver가 MFD와 실제 PWM driver로 분리됐습니다. 기존 단일 node를 다음 두 단계 구조로 변환합니다.
max31790_max31790: max31790@20 {
    compatible = "maxim,max31790";
    status = "okay";
    reg = <0x20>;
    pwm-controller;
    #pwm-cells = <2>;
};
max31790_max31790: max31790@20 {
    compatible = "maxim,max31790";
    status = "okay";
    reg = <0x20>;

    max31790_max31790_pwm: max31790_max31790_pwm {
        compatible = "maxim,max31790-pwm";
        status = "okay";
        pwm-controller;
        #pwm-cells = <2>;
    };
};
  • invensense,icm42688가 이제 Devicetree configuration을 실제로 적용합니다. 이전 accel/gyro sample rate·scale binding 값은 효과가 없었을 수 있습니다. 새 binding과 제공된 define·include file을 사용합니다.
#include <zephyr/dt-bindings/sensor/icm42688.h>

icm42688: icm42688@0 {
    accel-pwr-mode = <ICM42688_ACCEL_LN>;
    accel-fs = <ICM42688_ACCEL_FS_16G>;
    accel-odr = <ICM42688_ACCEL_ODR_2000>;
    gyro-pwr-mode= <ICM42688_GYRO_LN>;
    gyro-fs = <ICM42688_GYRO_FS_2000>;
    gyro-odr = <ICM42688_GYRO_ODR_2000>;
};
  • st,lis2mdl의 spi-full-duplex property는 duplex = SPI_FULL_DUPLEX로 바뀌었고 full duplex가 default입니다.
  • nxp,lpc-lpadc의 nxp,reference-supply property가 제거됐습니다. 해당 property를 지우고, reference voltage source와 값을 지정하려면 새 phandle-array nxp,references를 사용합니다.
  • microchip,ksz8081 PHY binding의 mc,interface-type, mc,reset-gpio, mc,interrupt-gpio가 각각 microchip,interface-type, reset-gpios, int-gpios로 바뀌었습니다.

Charger

  • 실제 chip 기능을 반영하지 않던 charger_max20335의 constant-charge-current-max-microamp property가 제거됐습니다.
  • maxim,max20335-charger binding의 constant-charge-voltage-max-microvolt에 enum key가 추가되어 잘못된 Devicetree 값을 build 때 검출합니다.

Controller Area Network (CAN)

  • Deprecated CAN controller property sjw, prop-seg, phase-seg1, phase-seg2, sjw-data, prop-seg-data, phase-seg1-data, phase-seg2-data가 제거됐습니다. Out-of-tree board는 bitrate, sample-point, bitrate-data, sample-point-data를 쓰거나 CONFIG_CAN_DEFAULT_BITRATE와 CONFIG_CAN_DEFAULT_BITRATE_DATA에 의존합니다. bus-speed와 bus-speed-data도 deprecated됐습니다.
  • Manual bus-off recovery가 재설계됐습니다. Driver 초기화 때 Kconfig와 무관하게 automatic recovery가 항상 활성화되며, controller가 stopped state로 시작하므로 이 시점에 원치 않는 recovery는 발생하지 않습니다.
  • CONFIG_CAN_AUTO_BUS_OFF_RECOVERY는 의미를 반전해 default-disabled CONFIG_CAN_MANUAL_RECOVERY_MODE로 바뀌었습니다. 이 option이 can_recover()와 새 manual recovery mode를 활성화합니다.
  • 새 operational mode CAN_MODE_MANUAL_RECOVERY는 위 Kconfig를 켰을 때만 지원됩니다. Application은 can_get_capabilities()로 지원 여부를 확인해 초기화를 실패시키거나 automatic recovery에 의존할 수 있습니다. 지원하지 않는 driver는 뒤늦은 can_recover() 호출이 아니라 startup의 can_set_mode()에서 일찍 실패합니다.

Crypto

  • NXP LPC55S36의 CSS driver가 deprecated됐습니다.

Display

  • GC9X01 display는 MIPI DBI driver class를 사용합니다. Display node를 interface를 관리하는 MIPI DBI wrapper device 안에 선언합니다.
/* Legacy GC9X01 display definition */
&spi0 {
    gc9a01: gc9a01@0 {
        status = "okay";
        compatible = "galaxycore,gc9x01x";
        reg = <0>;
        spi-max-frequency = <100000000>;
        cmd-data-gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
        reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
        ...
    };
};

/* New display definition with MIPI DBI device */

#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

...

mipi_dbi {
    compatible = "zephyr,mipi-dbi-spi";
    dc-gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;
    reset-gpios = <&gpio0 14 GPIO_ACTIVE_LOW>;
    spi-dev = <&spi0>;
    #address-cells = <1>;
    #size-cells = <0>;

    gc9a01: gc9a01@0 {
        status = "okay";
        compatible = "galaxycore,gc9x01x";
        reg = <0>;
        mipi-max-frequency = <100000000>;
        ...
    };
};
  • ST7735R display도 MIPI DBI wrapper 아래로 옮깁니다. cmd-data-gpios가 dc-gpios 이름에 맞춰 polarity까지 바뀌므로 예제처럼 GPIO_ACTIVE_LOW에서 GPIO_ACTIVE_HIGH로 조정합니다.
/* Legacy ST7735R display definition */
&spi0 {
    st7735r: st7735r@0 {
        compatible = "sitronix,st7735r";
        reg = <0>;
        spi-max-frequency = <32000000>;
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
        ...
    };
};

/* New display definition with MIPI DBI device */

#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

...

mipi_dbi {
    compatible = "zephyr,mipi-dbi-spi";
    reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
    dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
    spi-dev = <&spi0>;
    #address-cells = <1>;
    #size-cells = <0>;

    st7735r: st7735r@0 {
        compatible = "sitronix,st7735r";
        reg = <0>;
        mipi-max-frequency = <32000000>;
        mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>;
        ...
    };
};
  • UC81XX display도 MIPI DBI wrapper 아래로 옮기며 dc-gpios polarity가 바뀝니다.
/* Legacy UC81XX display definition */
&spi0 {
    uc8179: uc8179@0 {
        compatible = "ultrachip,uc8179";
        reg = <0>;
        spi-max-frequency = <4000000>;
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
        ...
    };
};

/* New display definition with MIPI DBI device */

#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

...

mipi_dbi {
    compatible = "zephyr,mipi-dbi-spi";
    reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
    dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
    spi-dev = <&spi0>;
    #address-cells = <1>;
    #size-cells = <0>;
    uc8179: uc8179@0 {
        compatible = "ultrachip,uc8179";
        reg = <0>;
        mipi-max-frequency = <4000000>;
        ...
    };
};
  • ST7789V display도 MIPI DBI wrapper 아래로 옮깁니다. cmd-data-gpios가 dc-gpios로 바뀌면서 polarity가 반전됩니다.
/* Legacy ST7789V display definition */
&spi0 {
    st7789: st7789@0 {
        compatible = "sitronix,st7789v";
        reg = <0>;
        spi-max-frequency = <32000000>;
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        cmd-data-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
        ...
    };
};

/* New display definition with MIPI DBI device */

#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

...

mipi_dbi {
    compatible = "zephyr,mipi-dbi-spi";
    reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
    dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
    spi-dev = <&spi0>;
    #address-cells = <1>;
    #size-cells = <0>;

    st7789: st7789@0 {
        compatible = "sitronix,st7789v";
        reg = <0>;
        mipi-max-frequency = <32000000>;
        mipi-mode = <MIPI_DBI_MODE_SPI_4WIRE>;
        ...
    };
};
  • SSD16XX display도 MIPI DBI wrapper 아래로 옮기며 dc-gpios polarity가 바뀝니다.
/* Legacy SSD16XX display definition */
&spi0 {
    ssd1680: ssd1680@0 {
        compatible = "solomon,ssd1680";
        reg = <0>;
        spi-max-frequency = <4000000>;
        reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
        dc-gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
        ...
    };
};

/* New display definition with MIPI DBI device */

#include <zephyr/dt-bindings/mipi_dbi/mipi_dbi.h>

...

mipi_dbi {
    compatible = "zephyr,mipi-dbi-spi";
    reset-gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
    dc-gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
    spi-dev = <&spi0>;
    #address-cells = <1>;
    #size-cells = <0>;

    ssd1680: ssd1680@0 {
        compatible = "solomon,ssd1680";
        reg = <0>;
        mipi-max-frequency = <4000000>;
        ...
    };
};
  • SSD16XX driver의 orientation-flipped property가 제거됐습니다. Devicetree에서 지우고 runtime에 display_set_orientation()을 호출해 방향을 설정합니다.

Enhanced Serial Peripheral Interface (eSPI)

  • eSPI 1.5 terminology에 맞춰 ESPI_SLAVE_TO_MASTER와 ESPI_MASTER_TO_SLAVE가 각각 ESPI_TARGET_TO_CONTROLLER, ESPI_CONTROLLER_TO_TARGET으로 바뀌었습니다.
  • ESPI_VWIRE_SIGNAL_SLV_BOOT_STS, ESPI_VWIRE_SIGNAL_SLV_BOOT_DONE, 모든 ESPI_VWIRE_SIGNAL_SLV_GPIO_<NUMBER>는 각각 ESPI_VWIRE_SIGNAL_TARGET_BOOT_STS, ESPI_VWIRE_SIGNAL_TARGET_BOOT_DONE, ESPI_VWIRE_SIGNAL_TARGET_GPIO_<NUMBER>로 바뀌었습니다.
  • Kconfig CONFIG_ESPI_SLAVE는 CONFIG_ESPI_TARGET으로, CONFIG_ESPI_SAF는 CONFIG_ESPI_TAF로 바뀌었습니다.

GNSS

  • gnss-nmea-generic driver에 기본 power management가 추가됐습니다. CONFIG_PM_DEVICE=y이면 suspended mode로 초기화되므로 application이 pm_device_action_run(..., PM_DEVICE_ACTION_RESUME)을 호출해 시작해야 합니다.

Input

  • analog-axis deadzone calibration 값이 min·max처럼 raw ADC value 기준 상대값으로 바뀌었습니다. Data structure와 property가 out-deadzone에서 in-deadzone으로 rename됐고 새 정의로 옮길 때 값도 비례 조정해야 합니다.
  • holtek,ht16k33-keyscan driver가 input subsystem으로 전환됐습니다. Callback을 input API로 migration하며, backward compatibility에는 zephyr,kscan-input을 사용할 수 있습니다.

Interrupt Controller

  • Multilevel interrupt-controller lookup table의 static auto-generation이 deprecated됐습니다. 새 compatibility option CONFIG_LEGACY_MULTI_LEVEL_TABLE_GENERATION을 켠 경우에만 compile되며 향후 제거됩니다.
  • Multi-level interrupt-controller driver는 새 IRQ_PARENT_ENTRY_DEFINE macro로 자신을 등록해야 합니다. Driver instance의 software ISR table offset은 INTC_INST_ISR_TBL_OFFSET, pseudo interrupt-controller child는 INTC_CHILD_ISR_TBL_OFFSET으로 구합니다. DT_INTC_GET_AGGREGATOR_LEVEL과 DT_INST_INTC_GET_AGGREGATOR_LEVEL은 aggregator level을 구해 등록 macro에 전달합니다.

LED Strip

  • worldsemi,ws2812-gpio의 in-gpios property가 gpios로 바뀌었습니다.
  • 모든 LED strip binding에 chain-length와 color-mapping이 추가됐고 mandatory가 됐습니다.
  • LED strip device의 길이(pixel 수)를 반환하는 mandatory length function이 추가됐습니다.
  • update_channels function은 optional이 됐고 구현되지 않은 function은 제거됐습니다.
  • CONFIG_WS2812_STRIP_DRIVER가 제거됐습니다. 이제 CONFIG_WS2812_STRIP_SPI, CONFIG_WS2812_STRIP_I2S, CONFIG_WS2812_STRIP_GPIO, CONFIG_WS2812_STRIP_RPI_PICO_PIO 중 필요한 option을 직접 설정합니다.

MDIO

  • CONFIG_MDIO_NXP_ENET_TIMEOUT 단위가 millisecond에서 microsecond로 바뀌었습니다.

Sensors

  • sensirion,shtcx driver의 chip property가 제거됐습니다. Chip variant는 일치하는 compatible property로 선택합니다. SHTC3는 다음처럼 선언합니다.
&i2c0 {
    status = "okay";

    shtc3: shtc3@70 {
        compatible = "sensirion,shtc3", "sensirion,shtcx";
        reg = <0x70>;
        measure-mode = "normal";
        clock-stretching;
    };
};

Serial

  • Raspberry Pi UART driver uart_rpi_pico가 제거됐습니다. 대신 uart_pl011(arm,pl011)을 사용합니다.

Regulator

  • nxp,vref driver는 사용자가 바꾸면 안 되는 ground selection을 더 이상 지원하지 않습니다. Devicetree에서 nxp,ground-select를 제거합니다.

W1

  • zephyr,w1-gpio 1-Wire master driver는 GPIO pin의 internal pull-up resistor를 기본 활성화하지 않습니다. 이제 Devicetree pin configuration flag를 따릅니다.

Watchdog

  • nuvoton,npcx-watchdog가 maximum timeout을 늘리도록 바뀌었습니다. Watchdog count 시간은 prescaler에 따라 달라집니다. Leading warning time 설정에 맞지 않던 CONFIG_WDT_NPCX_DELAY_CYCLES가 제거되고 millisecond 단위 CONFIG_WDT_NPCX_WARNING_LEADING_TIME_MS가 추가됐습니다.

Bluetooth

Bluetooth HCI

  • 새 HCI driver API가 도입되고 old API는 deprecated됐습니다. 새 API는 Devicetree node를 포함한 일반 Zephyr driver model을 따릅니다. Host는 zephyr,bt-hci chosen property를 보고 controller로 사용할 driver instance를 고릅니다. 모든 HCI driver binding은 공통 bt-hci.yaml base binding에서 파생됩니다.
  • 새 API에서는 zephyr,bt-uart chosen property를 쓰지 않습니다. UART HCI driver는 HCI driver instance node의 parent Devicetree node에서 UART를 찾습니다.
  • zephyr,bt-hci-ipc chosen property는 controller side에서만 쓰고, HCI driver는 zephyr,bt-hci-ipc compatible node를 사용합니다.
  • BT_NO_DRIVER가 제거됐습니다. HCI driver는 Kconfig choice 뒤에 있지 않고, 주로 해당 Devicetree node 활성 여부에 따라 서로 독립적으로 enable·disable됩니다.
  • BT_HCI_VS_EXT가 제거되고 기능은 CONFIG_BT_HCI_VS에 포함됐습니다. BT_HCI_VS_EVT도 제거됐으며 vendor event 지원은 CONFIG_BT_HCI_VS를 켜면 암묵적으로 활성화됩니다.
  • Public hci_driver.h에 노출돼 있던 bt_read_static_addr()가 제거됐습니다. CONFIG_BT_HCI_VS를 켜고 가능한 경우 vendor-specific HCI command API로 controller static address를 얻습니다.

Bluetooth Mesh

  • bt_mesh_model의 model metadata pointer와 bt_mesh_models_metadata_entry data pointer에 const qualifier가 추가됐습니다. Model metadata structure와 raw value를 non-volatile memory의 permanent constant로 선언할 수 있습니다.
  • bt_mesh_model metadata pointer가 단일 const *로 바뀌고 bt_mesh_health_srv의 중복 metadata pointer는 제거됐습니다. BT_MESH_MODEL_HEALTH_SRV는 variable argument notation을 씁니다. CONFIG_BT_MESH_LARGE_COMP_DATA_SRV를 지원하고 Health Server metadata가 필요하면 마지막 argument로 넘기고, 아니면 생략합니다.

Bluetooth Audio

  • CONFIG_BT_BAP_UNICAST_SERVER를 켜도 CONFIG_BT_ASCS, CONFIG_BT_PERIPHERAL, CONFIG_BT_ISO_PERIPHERAL이 자동 활성화되지 않습니다. Project configuration에서 명시적으로 설정합니다.
  • CAP discover callback bt_cap_initiator_cb.unicast_discovery_complete와 bt_cap_commander_cb.discovery_complete에 set member parameter가 추가됐습니다. 모든 callback definition에 이를 추가합니다.
  • bt_bap_stream_start()가 더 이상 CIS를 connect하지 않습니다. 먼저 bt_bap_stream_connect()를 호출한 다음 stream을 시작합니다.
  • Assigned Numbers 문서에 맞춰 stream_lang이 lang으로 줄었습니다. BT_AUDIO_METADATA_TYPE_LANG과 bt_audio_codec_cap_meta_set_lang(), bt_audio_codec_cap_meta_get_lang(), bt_audio_codec_cfg_meta_set_lang(), bt_audio_codec_cfg_meta_get_lang()에 영향을 줍니다.
  • lang type이 uint32_t에서 uint8_t [3]로 바뀌었습니다. 같은 네 function에서 "eng", "deu" 같은 string을 직접 설정하고 get 때 불필요한 copy를 피할 수 있습니다.
  • sirk의 s 자체가 set을 뜻하므로 모든 set_sirk 이름이 sirk로 바뀌었습니다.
  • bt_audio_codec_cfg_get_chan_allocation(), bt_audio_codec_cap_get_supported_audio_chan_counts(), bt_audio_codec_cap_get_max_codec_frames_per_sdu(), bt_audio_codec_cfg_meta_get_pref_context()에 fallback_to_default parameter가 추가됐습니다. 기존 동작을 유지하려면 false를 전달합니다.

Bluetooth Classic

  • Host BR/EDR source는 subsys/bluetooth/host/classic으로, header는 include/zephyr/bluetooth/classic으로 이동했습니다. CONFIG_BT_BREDR가 제거되고 CONFIG_BT_CLASSIC으로 대체됐습니다.

Bluetooth Host

  • Advertiser option BT_LE_ADV_OPT_USE_NAME과 BT_LE_ADV_OPT_FORCE_NAME_IN_AD가 deprecated됐습니다. Application이 host에 전달하는 advertising data 또는 scan-response data에 device name을 명시적으로 넣습니다.
BT_DATA(BT_DATA_NAME_COMPLETE, CONFIG_BT_DEVICE_NAME, sizeof(CONFIG_BT_DEVICE_NAME) - 1)
  • Zephyr 3.4.0 이후 사용되지 않던 bt_l2cap_le_endpoint.init_credits field가 제거됐습니다. 참조만 지우면 됩니다.
  • BT_LE_ADV_PARAM이 이제 const pointer를 반환합니다. struct bt_le_adv_param *param = BT_LE_ADV_CONN; 같은 code는 const struct bt_le_adv_param *param = BT_LE_ADV_CONN; 또는 struct bt_le_adv_param param = *BT_LE_ADV_CONN;처럼 고칩니다. BT_LE_ADV_CONN, BT_LE_ADV_NCONN, BT_LE_EXT_ADV_SCAN, BT_LE_EXT_ADV_CODED_NCONN_NAME 등 derivative macro에도 적용됩니다.
  • CONFIG_BT_BUF_ACL_RX_COUNT는 CONFIG_BT_MAX_CONN보다 커야 합니다. HCI design상 원래 필요하던 조건을 build-time assertion으로 강제합니다.

Bluetooth Crypto

  • Crypto operation에 TinyCrypt 대신 PSA API 사용을 명시적으로 요청하는 CONFIG_BT_USE_PSA_API가 추가됐습니다. System에 PSA provider가 있고 CONFIG_PSA_CRYPTO_CLIENT가 설정된 경우에만 가능합니다.

Networking

  • Legacy CONFIG_NET_SOCKETS_POSIX_NAMES가 deprecated됐습니다. 일반 BSD socket interface를 쓰려면 CONFIG_POSIX_API를 켜야 합니다. 이를 켜지 못하면 socket call에 zsock_ prefix를 붙입니다. BSD interface sample은 POSIX API를 활성화하고, network stack 내부 library는 zsock_* API로 전환됐습니다.
  • zperf_results의 transferred byte total_len과 duration time_in_us·client_time_in_us가 32-bit에서 64-bit로 바뀌어 long-duration test throughput을 정확히 표시합니다.
  • IPv4 netmask가 interface 전체가 아니라 각 assigned IPv4 address에 연결됩니다. Interface당 address가 하나면 사용자 관점 변화가 없지만, 둘 이상이면 address별 netmask를 지정해야 합니다.
  • Virtual network-interface API에서 input callback이 제거됐습니다. IP tunnel 내부 IPv4/IPv6 packet 수신은 이제 recv callback에서 처리합니다.
  • VLAN implementation이 virtual network interface를 사용합니다. API는 같지만 VLAN interface type이 ETHERNET에서 VIRTUAL로 바뀌었습니다. 예를 들어 net_eth_is_vlan_enabled()의 두 번째 interface parameter는 VLAN interface가 아니라 main Ethernet interface를 가리켜야 합니다.
  • wifi connect argument가 position 기반에서 key-value format으로 바뀌었습니다. Optional argument와 향후 option 확장이 쉬워졌으며 wifi -h에서 사용법을 확인합니다.
  • CONFIG_NET_TCP_ACK_TIMEOUT이 deprecated됐습니다. Handshake total timeout은 다른 경우처럼 retransmission timeout에 따라야 하므로 CONFIG_NET_TCP_INIT_RETRANSMISSION_TIMEOUT과 CONFIG_NET_TCP_RETRY_COUNT를 사용합니다.
  • LwM2M callback type lwm2m_engine_set_data_cb_t에 CoAP block-wise transfer의 data offset을 나타내는 offset parameter가 추가됐습니다. Post-write·validate·일부 firmware callback을 수정합니다.
  • DNS resolver와 mDNS/LLMNR responder가 socket-service API를 사용합니다. Poll 가능한 socket 수가 더 필요할 수 있으므로 application 사용량에 맞춰 CONFIG_NET_SOCKETS_POLL_MAX와 CONFIG_POSIX_MAX_FDS를 확인합니다.
  • Packet socket(AF_PACKET)의 socket() protocol field가 Linux 호환을 위해 network byte order를 사용합니다. 모든 packet을 받으려면 Linux처럼 htons(ETH_P_ALL)을 전달합니다.
  • TCP ISN generation hash가 MD5에서 SHA-256으로 바뀌고 crypto backend도 Mbed TLS에서 PSA API로 전환됐습니다. CONFIG_NET_TCP_ISN_RFC6528은 legacy CONFIG_MBEDTLS_* 대신 PSA_WANT_ALG_SHA_256에 의존합니다.

Other Subsystems

Flash map

  • Flash integrity-check backend CONFIG_FLASH_AREA_CHECK_INTEGRITY_BACKEND는 TinyCrypt 또는 Mbed TLS 대신 PSA 또는 Mbed TLS로 제공됩니다. 갱신된 Mbed TLS는 이전 TinyCrypt보다 footprint가 조금 작고, PSA는 TF-M device에서 더 많이 줄어듭니다. PSA가 권장 경로지만 TF-M 없이 PSA API를 켜는 일회성 비용을 감당할 수 없으면 현재는 Mbed TLS를 쓸 수 있습니다. TF-M 없는 device의 PSA option은 CONFIG_MBEDTLS_PSA_CRYPTO_C입니다.

hawkBit

  • CONFIG_HAWKBIT_PORT가 string에서 int로 바뀌었습니다. hawkBit configuration을 settings subsystem에 저장하므로 hawkBit 사용 시 CONFIG_SETTINGS를 켜야 합니다.

MCUmgr

  • Checksum/hash SHA-256 backend가 TinyCrypt 또는 Mbed TLS에서 PSA 또는 Mbed TLS로 바뀌었습니다. PSA가 권장되지만 CONFIG_MBEDTLS_PSA_CRYPTO_CLIENT가 아직 꺼져 있고 code size가 빠듯하면 Mbed TLS로 약 1.3KB를 절약할 수 있습니다.

Modem

  • CONFIG_MODEM_CHAT_LOG_BUFFER가 CONFIG_MODEM_CHAT_LOG_BUFFER_SIZE로 바뀌었습니다.

POSIX API

  • POSIX API Kconfig deprecation 때문에 prj.conf 같은 Kconfig file을 수정해야 할 수 있습니다. 제공된 migration script를 root path에 실행하면 더 자동화할 수 있습니다.
$ python ${ZEPHYR_BASE}/scripts/utils/migrate_posix_kconfigs.py -r root_path

State Machine Framework

  • SMF_CREATE_STATE는 CONFIG_SMF_ANCESTOR_SUPPORT와 CONFIG_SMF_INITIAL_TRANSITION 값과 무관하게 항상 argument 5개를 받습니다. 추가 argument를 쓰지 않으면 NULL을 전달합니다.
  • SMF transition flow가 UML에 더 가깝게 바뀌었습니다. Transition source가 smf_run_state()를 호출한 state의 parent이면 source에서 source·target의 Least Common Ancestor 직전까지 exit action을 실행하고, LCA 직후부터 target까지 entry action을 실행합니다.
  • 이전에는 smf_set_state(..., NULL)이 current state에서 topmost parent까지 exit action을 실행해 topmost exit action이 state machine을 종료할 것으로 기대했습니다. 이제 NULL은 허용되지 않습니다. Top level에 terminate state를 만들고 그 entry action에서 smf_set_terminate()를 호출합니다.

UpdateHub

  • Integrity check용 SHA-256 implementation을 더 이상 CONFIG_FLASH_AREA_CHECK_INTEGRITY_BACKEND으로 고르지 않습니다. Mbed TLS 또는 PSA 중 어느 것을 쓸지는 CONFIG_PSA_CRYPTO_CLIENT를 기준으로 정합니다. TF-M board이거나 CONFIG_MBEDTLS_PSA_CRYPTO_C를 켜지 않으면 더 작은 footprint의 Mbed TLS가 기본입니다.

Architectures

  • arch_start_cpu()가 arch_cpu_start()로 바뀌었습니다.
  • CONFIG_ARM64_ENABLE_FRAME_POINTER가 deprecated됐습니다. CONFIG_FRAME_POINTER를 사용합니다.
  • x86의 CONFIG_DISABLE_SSBD와 CONFIG_ENABLE_EXTENDED_IBRS가 deprecated됐습니다. 각각 CONFIG_X86_DISABLE_SSBD, CONFIG_X86_ENABLE_EXTENDED_IBRS를 사용합니다.
  • POSIX architecture의 LLVM fuzzing 지원이 refactor됐습니다. Test application이 board 제공 hook에 의존하지 않고 자체 LLVMFuzzerTestOneInput() hook을 제공해야 합니다. samples/subsys/debug/fuzz/를 참고합니다.

Source

출처

영어 원문에는 문단, 문서 지시문, 표, 코드, 코드 심벌, 경로를 그대로 보존했습니다.