| .. SPDX-License-Identifier: CC-BY-SA-2.0-UK |
| |
| .. |yocto-codename| replace:: whinlatter |
| .. |yocto-ver| replace:: 5.3 |
| .. Note: anchors id below cannot contain substitutions so replace them with the |
| value of |yocto-ver| above. |
| |
| Release |yocto-ver| (|yocto-codename|) |
| ====================================== |
| |
| Migration notes for |yocto-ver| (|yocto-codename|) |
| -------------------------------------------------- |
| |
| This section provides migration information for moving to the Yocto |
| Project |yocto-ver| Release (codename "|yocto-codename|") from the prior release. |
| |
| The Poky repository master branch is no longer updated |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The master branch of the :yocto_git:`Poky </poky>` repository is no longer being |
| updated. This does *not* mean that the :term:`Poky` distribution is deprecated, |
| but that the way to clone the base layers and setup the environment for building |
| :term:`Poky` has changed. |
| |
| You can either: |
| |
| - Switch to individual clones of :oe_git:`bitbake </bitbake>`, |
| :oe_git:`openembedded-core </openembedded-core>`, :yocto_git:`meta-yocto |
| </meta-yocto>` and :yocto_git:`yocto-docs </yocto-docs>` by following the |
| :doc:`/dev-manual/poky-manual-setup` section of the Yocto Project Development |
| Tasks Manual. |
| |
| - Use the new ``bitbake-setup`` tool by following the |
| :doc:`/brief-yoctoprojectqs/index` document. |
| |
| See the :doc:`bitbake:bitbake-user-manual/bitbake-user-manual-environment-setup` |
| of the BitBake User Manual for reference documentation on ``bitbake-setup``. |
| |
| Releases older than Whinlatter will still have their branch on the Poky |
| repository updated until they reach end-of-life. |
| |
| Some further information on the background of this change can be found |
| in: https://lists.openembedded.org/g/openembedded-architecture/message/2179 |
| |
| :term:`WORKDIR` changes |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| ``S = ${WORKDIR}/something`` no longer supported |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| If a recipe has :term:`S` set to be ``${``\ :term:`WORKDIR`\ ``}/something``, |
| this is no longer supported, and an error will be issued. The recipe should be |
| changed to:: |
| |
| S = "${UNPACKDIR}/something" |
| |
| .. _ref-migration-5-3-s-workdir-git: |
| |
| ``S = ${WORKDIR}/git`` and ``S = ${UNPACKDIR}/git`` should be removed |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The Git fetcher now unpacks into the :term:`BB_GIT_DEFAULT_DESTSUFFIX` directory |
| rather than the ``git/`` directory under :term:`UNPACKDIR`. |
| :term:`BB_GIT_DEFAULT_DESTSUFFIX` is set in :term:`OpenEmbedded-Core |
| (OE-Core)`'s :oe_git:`bitbake.conf |
| </openembedded-core/tree/meta/conf/bitbake.conf>` to :term:`BP`. |
| |
| This location matches the default value of :term:`S` set by bitbake.conf, so :term:`S` |
| setting in recipes can and should be removed. |
| |
| Note that when :term:`S` is set to a subdirectory of the git checkout, then it |
| should be instead adjusted according to the previous point:: |
| |
| S = "${UNPACKDIR}/${BP}/something" |
| |
| Note that "git" as the source checkout location can be hardcoded |
| in other places in recipes; when it's in :term:`SRC_URI`, replace with |
| :term:`BB_GIT_DEFAULT_DESTSUFFIX`, otherwise replace with :term:`BP`. |
| |
| How to make those adjustments without tedious manual editing |
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
| |
| The following sed command can be used to remove S = "${WORKDIR}/git |
| across a whole layer:: |
| |
| sed -i "/^S = \"\${WORKDIR}\/git\"/d" `find . -name '*.bb' -o -name '*.inc' -o -name '*.bbclass'` |
| |
| Then, the following command can tweak the remaining :term:`S` assignments to |
| refer to :term:`UNPACKDIR` instead of :term:`WORKDIR`:: |
| |
| sed -i "s/^S = \"\${WORKDIR}\//S = \"\${UNPACKDIR}\//g" `find . -name '*.bb' -o -name '*.inc' -o -name '*.bbclass'` |
| |
| The first change can introduce a lot of consecutive empty lines, so those can be removed with:: |
| |
| sed -i -z -E 's/([ \t\f\v\r]*\n){3,}/\n\n/g' `find . -name '*.bb' -o -name '*.inc'` |
| |
| |
| BitBake Git fetcher ``tag`` parameter |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The ``tag=`` parameter of the Git fetcher (``git://``) was updated. The tag |
| commit SHA will be compared against the value supplied by the :term:`SRCREV` |
| variable or the ``rev=`` parameter in the URI in :term:`SRC_URI`. This is |
| strongly recommended to add to the URIs when using the Git fetcher for |
| repositories using tag releases. |
| |
| Space around equal assignment |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| A new warning is now printed when there are no whitespaces around an ``=`` |
| assignment in recipes:: |
| |
| <filename>:<line number> has a lack of whitespace around the assignment: '<assignment>' |
| |
| For example, the following assignments would print a warning:: |
| |
| FOO="bar" |
| FOO= "bar" |
| FOO ="bar" |
| |
| These should be replaced by:: |
| |
| FOO = "bar" |
| |
| Wic plugins containing dashes should be renamed |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| After a Python upgrade, :ref:`Wic <dev-manual/wic:creating partitioned images |
| using wic>` plugins containing dashes (``-``) for their filenames are **no |
| longer supported**. One must rename the plugin file and convert the dashes to |
| underscores (``_``). |
| |
| It is also recommended to update any WKS file to convert dashes to underscores. |
| For example, the ``bootimg-partition.py`` plugin was renamed to |
| ``bootimg_partition.py``. This means that any WKS file using this plugin must |
| change each ``--source bootimg-partition`` to ``--source bootimg_partition``. |
| |
| However, the current WIC code automatically converts dashes to underscore for |
| any ``--source`` call, so existing WKS files will not break if they use upstream |
| plugins from :term:`OpenEmbedded-Core (OE-Core)`. |
| |
| ``fitImage`` no longer supported for :term:`KERNEL_IMAGETYPE` |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The ``fitImage`` type for :term:`KERNEL_IMAGETYPE` is no longer supported. The |
| logic for creating a FIT image was moved out of the :ref:`ref-classes-kernel` |
| class. Instead, one should create a new recipe to build this FIT image, as |
| described in the :ref:`Removed Classes <migration-guides/migration-5.3:Removed |
| Classes>` section of the Migration notes for |yocto-ver| (|yocto-codename|). |
| |
| systemd Predictable Interface Names no longer MAC policy by default |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :oe_git:`systemd recipe </openembedded-core/tree/meta/recipes-core/systemd>` |
| used to forcibly set the "mac" policy by default when the ``pni-names`` |
| :term:`distro feature <DISTRO_FEATURES>` is enabled. |
| |
| This is no longer the case as this was not following upstream changes. Now when |
| the ``pni-names`` :term:`distro feature <DISTRO_FEATURES>` is enabled, the |
| default policy from systemd is selected (from |
| https://github.com/systemd/systemd/blob/v257.8/network/99-default.link). |
| |
| To set back the "mac" policy in systemd (version 257.8 at the time of writing |
| this note), you should set the ``NamePolicy`` and ``AlternativeNamesPolicy`` as |
| detailed in :manpage:`systemd.link(5)`. |
| |
| Removal of unlicensed Linux kernel firmware |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| By default, the ``linux-firmware`` recipe now excludes firmware that do not |
| provide any license information. The recipe holds an internal list of firmware |
| to exclude via a variable named ``REMOVE_UNLICENSED``, this variable may be |
| overridden if unlicensed firmware is needed. See :oe_git:`the recipe |
| </openembedded-core/tree/meta/recipes-kernel/linux-firmware>` for a complete |
| overview of the removed firmware. |
| |
| ``*FLAGS`` variables behavior change for :ref:`ref-classes-native` and :ref:`ref-classes-nativesdk` classes |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :term:`CPPFLAGS`, :term:`CFLAGS`, :term:`CXXFLAGS` and :term:`LDFLAGS` |
| variables used to have hard assignments in the :ref:`ref-classes-native` and |
| :ref:`ref-classes-nativesdk` classes, respectively:: |
| |
| CPPFLAGS = "${BUILD_CPPFLAGS}" |
| CFLAGS = "${BUILD_CFLAGS}" |
| CXXFLAGS = "${BUILD_CXXFLAGS}" |
| LDFLAGS = "${BUILD_LDFLAGS}" |
| |
| and:: |
| |
| CPPFLAGS = "${BUILDSDK_CPPFLAGS}" |
| CFLAGS = "${BUILDSDK_CFLAGS}" |
| CXXFLAGS = "${BUILDSDK_CXXFLAGS}" |
| LDFLAGS = "${BUILDSDK_LDFLAGS}" |
| |
| This caused races when recipes tried to append to any of these variables using |
| the ``+=`` operator, so recipes could use ``:append`` instead if they wanted the |
| change to apply to the target, :ref:`ref-classes-native` and |
| :ref:`ref-classes-nativesdk` contexts. |
| |
| Recipes can now safely use the ``+=`` operator to achieve this. |
| |
| What this change also means is that previous assignments using the ``+=`` |
| operator, which only used to apply to the target context, **now apply to all |
| three**: target, :ref:`ref-classes-native` and :ref:`ref-classes-nativesdk` |
| contexts. |
| |
| Recipes that unknowingly relied on this behavior should change these assignments |
| to use ``TARGET_`` variables instead, for example:: |
| |
| CFLAGS += "something" |
| |
| to:: |
| |
| TARGET_CFLAGS += "something" |
| |
| See :oe_git:`/openembedded-core/commit/?id=a157b2f9d93428ca21265cc860a3b58b3698b3aa`. |
| |
| Supported kernel versions |
| ~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| The :term:`OLDEST_KERNEL` setting is 5.15 in this release, meaning that |
| out the box, older kernels are not supported. See :ref:`4.3 migration notes |
| <migration-4.3-supported-kernel-versions>` for details. |
| |
| Supported distributions |
| ~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| Compared to the previous releases, running BitBake is supported on new |
| GNU/Linux distributions: |
| |
| - Debian 13 (Trixie) |
| - Fedora 42 |
| - Ubuntu 25.04 |
| - Ubuntu 25.10 |
| |
| See :ref:`all supported distributions <system-requirements-supported-distros>`. |
| |
| Removed variables |
| ~~~~~~~~~~~~~~~~~ |
| |
| The following variables have been removed: |
| |
| - ``BUILDHISTORY_RESET``: Setting this to non-empty used to remove the old |
| content of the :ref:`ref-classes-buildhistory` as part of the current |
| :term:`BitBake` invocation and replace it with information about what was |
| built during the build. This was partly broken and hard to maintain. |
| |
| - ``GPE_MIRROR``: this variable used to contain the |
| "http://gpe.linuxtogo.org/download/source" URL, but was not used by any |
| recipe in OE-Core. |
| |
| Removed recipes |
| ~~~~~~~~~~~~~~~ |
| |
| The following recipes have been removed in this release: |
| |
| - ``libsoup-2.4``: The last user in :term:`OpenEmbedded-Core (OE-Core)` was |
| ``gst-examples``, which has been upgraded with its ``libsoup-2.4`` dependency |
| dropped. The recipe has been moved to ``meta-oe``. |
| |
| - ``glibc-y2038-tests``: removed as the recipe only provides tests which are |
| now provided by ``glibc-testsuite``. |
| |
| - ``python3-ndg-httpsclient``: The last dependency in core on this recipe was |
| removed in May 2024 with dfa482f1998 ("python3-requests: cleanup RDEPENDS"), |
| and there is no other user of this variable. |
| |
| - ``xf86-input-mouse``: The project has stopped supporting Linux. |
| |
| - ``xf86-input-vmmouse``: It has a runtime dependency on ``xf86-input-mouse``, |
| which stopped supporting Linux. |
| |
| - ``babeltrace``: Removed in favour of ``babeltrace2``. |
| |
| - ``cwautomacros``: A long-obsolete set of custom :ref:`ref-classes-autotools` |
| macros, not used by any other recipe. |
| |
| - ``rust-llvm``: removed after the Rust and LLVM recipes were reworked to |
| depend on the ``llvm`` recipe instead. |
| |
| Removed :term:`PACKAGECONFIG` entries |
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ |
| |
| - ``dropbear``: ``enable-x11-forwarding`` (renamed to ``x11``) |
| |
| - ``libxml2``: ``ipv6`` |
| |
| - ``squashfs-tools``: ``reproducible`` |
| |
| - ``mesa``: ``kmsro``, ``osmesa``, ``xa`` |
| |
| - ``systemd``: ``dbus`` |
| |
| Removed classes |
| ~~~~~~~~~~~~~~~ |
| |
| The following classes have been removed in this release: |
| |
| - ``kernel-fitimage.bbclass``: the class has been replaced by the |
| :ref:`ref-classes-kernel-fit-image` class. The new implementation resolves |
| the long-standing :yocto_bugs:`bug 12912</show_bug.cgi?id=12912>`. |
| |
| If you are using the kernel FIT image support, you will need to: |
| |
| #. Make sure to include ``kernel-fit-extra-artifacts`` in your :term:`KERNEL_CLASSES` |
| variable to ensure the required files are exposed to the :term:`DEPLOY_DIR_IMAGE` |
| directory:: |
| |
| KERNEL_CLASSES += "kernel-fit-extra-artifacts" |
| |
| #. Use the specific FIT image recipe rather than the base kernel recipe. |
| For example, instead of:: |
| |
| bitbake linux-yocto |
| |
| the FIT image is now build by:: |
| |
| bitbake linux-yocto-fitimage |
| |
| For custom kernel recipes, creating a corresponding custom FIT image recipe |
| is usually a good approach. |
| |
| #. If a FIT image is used as a replacement for the kernel image in the root |
| filesystem, add the following configuration to your machine configuration |
| file:: |
| |
| # Create and deploy the vmlinux artifact which gets included into the FIT image |
| KERNEL_CLASSES += "kernel-fit-extra-artifacts" |
| |
| # Do not install the kernel image package |
| RRECOMMENDS:${KERNEL_PACKAGE_NAME}-base = "" |
| # Install the FIT image package |
| MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "linux-yocto-fitimage" |
| |
| # Configure the image.bbclass to depend on the FIT image instead of only |
| # the kernel to ensure the FIT image is built and deployed with the image |
| KERNEL_DEPLOY_DEPEND = "linux-yocto-fitimage:do_deploy" |
| |
| See the :ref:`ref-classes-kernel-fit-image` section for more information. |
| |
| - ``icecc.bbclass``: Reports show that this class has been broken since Yocto |
| Mickledore which suggests there are limited numbers of users. It doesn't have |
| any automated testing and it would be hard to setup and maintain a testing |
| environment for it. The original users/maintainers aren't using it now. |
| |
| Miscellaneous changes |
| ~~~~~~~~~~~~~~~~~~~~~ |
| |
| - ``xserver-xorg``: remove sub-package ``${PN}-xwayland``, as ``xwayland`` is |
| now its own recipe. |
| |
| - ``gdk-pixbuf``: drop the ``GDK_PIXBUF_LOADERS`` variable, which was part of |
| the recipe's :term:`PACKAGECONFIG`. Instead the :term:`PACKAGECONFIG` can be |
| modified directly to achieve the same result. |
| |
| - Remove the ``meta/conf/distro/include/distro_alias.inc`` include file, |
| which associated a recipe name to one or more Distribution package name. |
| This file is not used and maintained anymore. |
| |
| - Remove the ``nghttp2-proxy`` package from the ``nghttp2`` recipe as the |
| ``nghttp2-proxy`` package became empty after an upgrade that makes it a |
| library recipe only (due to |
| :term:`EXTRA_OEMAKE` containing ``-DENABLE_APP=OFF`` by default in the |
| recipe). |
| |
| - Remove the ``util-linux-fcntl-lock`` package (in the ``util-linux`` recipe) as |
| ``util-linux`` now supports the ``--fcntl`` flag for the ``flock`` command. |
| |
| Recipes currently using the ``fcntl-lock`` command should replace these by |
| ``flock --fcntl``. |
| |
| - ``barebox`` has been updated from v2025.02.0 to v2025.09.0. Refer to the |
| `upstream migration guides <https://barebox.org/doc/latest/migration-guides/>`__ |
| for migration advice. |