Release 4.3 (nanbield)
Migration notes for 4.3 (nanbield)
This section provides migration information for moving to the Yocto Project 4.3 Release (codename “nanbield”) from the prior release.
Supported kernel versions
The OLDEST_KERNEL setting has been changed to “5.15” in this release, meaning that out the box, older kernels are not supported. There were two reasons for this. Firstly it allows glibc optimisations that improve the performance of the system by removing compatibility code and using modern kernel APIs exclusively. The second issue was this allows 64 bit time support even on 32 bit platforms and resolves Y2038 issues.
It is still possible to override this value and build for older kernels, this is just no longer the default supported configuration. This setting does not affect which kernel versions SDKs will run against and does not affect which versions of the kernel can be used to run builds.
Layername override implications
Code can now know which layer a recipe is coming from through the newly added
FILE_LAYERNAME variable and the layer-<layername> override
. This is being used
for enabling QA checks on a per layer basis. For existing code this has the
side effect that the QA checks will apply to recipes being bbappended
from other layers - for example, patches added through such bbappends will now
need to have the “Upstream-Status” specified in the patch header.
Compiling changes
Code on 32 bit platforms is now compiled with largefile support and 64 bit
time_t
, to avoid the Y2038 time overflow issue. This breaks the ABI and could break existing programs in untested layers.
Supported distributions
This release supports running BitBake on new GNU/Linux distributions:
Ubuntu 22.10
Fedora 38
Debian 12
CentOS Stream 8
AlmaLinux 8.8
AlmaLinux 9.2
On the other hand, some earlier distributions are no longer supported:
Fedora 36
AlmaLinux 8.7
AlmaLinux 9.1
edgerouter machine removed
The edgerouter
reference BSP for the MIPS architecture in meta-yocto-bsp
has been removed as the hardware has been unavailable for some time. There is no
suitable reference MIPS hardware to replace it with, but the MIPS architecture
will continue to get coverage via QEMU build/boot testing.
Go language changes
Support for the Glide package manager has been removed, as
go mod
has become the standard.
systemd changes
Upstream systemd is now more strict on filesystem layout and the usrmerge
feature is therefore required alongside systemd. The Poky test configurations
have been updated accordingly for systemd.
Recipe changes
Runtime testing of ptest now fails if no test results are returned by any given ptest.
Deprecated variables
The following variables have been deprecated:
CVE_CHECK_IGNORE: use CVE_STATUS instead.
Removed variables
The following variables have been removed:
AUTHOR
PERLARCH
PERLVERSION
QEMU_USE_SLIRP
- addslirp
toTEST_RUNQEMUPARAMS
instead.SERIAL_CONSOLES_CHECK
- no longer necessary because all consoles listed in SERIAL_CONSOLES are checked for their existence before agetty
is started.
Removed recipes
The following recipes have been removed in this release:
apmd
: obsolete (apm
in MACHINE_FEATURES also removed).cve-update-db-native
: functionally replaced bycve-update-nvd2-native
gcr3
: no longer needed by core recipes, moved to meta-gnome (gcr, i.e. version 4.x, is still provided).glide
: as explained in Go language changes.libdmx
: obsoletelinux-yocto
version 5.15 (versions 6.1 and 6.5 provided instead).python3-async
: obsolete - no longer needed bypython3-gitdb
or any other core reciperust-hello-world
: there are sufficient other Rust recipes and test cases such that this is no longer needed.
Removed classes
The following classes have been removed in this release:
glide
: as explained in Go language changes.
Output file naming changes
In 4.3 there are some minor differences in image and SDK output file names. If you rely on the existing naming (e.g. in external scripts) you may need to either modify configuration or adapt to the new naming. Further details:
IMAGE_NAME and IMAGE_LINK_NAME now include the IMAGE_NAME_SUFFIX value directly. In practical terms, this means that
.rootfs
will now appear in image output file names. If you do not wish to have the.rootfs
suffix used, you can just set IMAGE_NAME_SUFFIX to “” and this will now be consistently respected in both the image file and image file symlink names. As part of this change, support for theimgsuffix
task varflag has been dropped (mostly an internal implementation detail, but if you were implementing a custom image construction with a task in a similar manner todo_bootimg
you may have been using this).SDK_NAME now includes the values of IMAGE_BASENAME and MACHINE so that they are unique when building SDKs for different images and machines.
Versioning changes
PR values have been removed from all core recipes - distro maintainers who make use of PR values would need to curate these already so the sparsely set base values would not be that useful anymore. If you have been relying on these (i.e. you are maintaining a binary package feed where package versions should only ever increase), double-check the output (perhaps with the help of the buildhistory class) to ensure that package versions are consistent.
The PR value can no longer be set from the recipe file name - this was rarely used, but in any case is no longer supported.
PE and PR are no longer included in the work directory path (WORKDIR). This may break some tool assumptions about directory paths, but those should really be querying paths from the build system (or not poking into WORKDIR externally).
Source revision information has been moved from PV to PKGV. The user visible effect of this change is that PV will no longer have revision information in it and this will now be appended to the PV value through PKGV when the packages are written out (as long as “+” is present in the PKGV value). Since PV is used in STAMP and WORKDIR, you may notice small directory naming and stamp naming changes.
The SRCPV variable is no longer needed in PV, but since the default SRCPV value is now “”, using it is effectively now just a null operation - you can remove it (leaving behind the “+”) , but it is not yet required to do so.
QEMU changes
The
runqemu
script no longer systematically adds two serial ports (--serial null
and-serial mon:stdio
) to the QEMU emulated machine if the user already adds such ports through theQB_OPT_APPEND
setting.If the user adds one port, only
--serial null
is added, and-serial mon:stdio
is no longer passed. If the user adds more than one port,--serial null
is no longer added either. This can break some existing QEMU based configurations expecting such serial ports to be added whenrunqemu
is executed.This change was made to avoid exceeding two serial ports, which interferes with automated testing.
runqemu
now uses theip tuntap
command instead oftunctl
, and thustunctl
is no longer built by theqemu-helper-native
recipe; if for some reason you were callingtunctl
directly from your own scripts you should switch to callingip tuntap
instead.
Miscellaneous changes
The
-crosssdk
suffix and any MLPREFIX were removed fromvirtual/XXX
provider/dependencies where aPREFIX
was used as well, as we don’t need both and it made automated dependency rewriting unnecessarily complex. In general this only affects internal toolchain dependencies so isn’t end user visible, but if for some reason you have custom classes or recipes that rely upon the old providers then you will need to update those.