blob: 70e85f7a20e085ee10cf002321e2736fd0a7502b [file] [log] [blame]
Andrew Geisslerf0343792020-11-18 10:42:21 -06001.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
Andrew Geisslerc9f78652020-09-18 14:11:35 -05002
3********
4Features
5********
6
7This chapter provides a reference of shipped machine and distro features
8you can include as part of your image, a reference on image features you
Andrew Geisslerfc113ea2023-03-31 09:59:46 -05009can select, and a reference on :ref:`ref-features-backfill`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -050010
11Features provide a mechanism for working out which packages should be
12included in the generated images. Distributions can select which
Andrew Geissler09036742021-06-25 14:25:14 -050013features they want to support through the :term:`DISTRO_FEATURES` variable,
Andrew Geisslerc9f78652020-09-18 14:11:35 -050014which is set or appended to in a distribution's configuration file such
15as ``poky.conf``, ``poky-tiny.conf``, ``poky-lsb.conf`` and so forth.
Andrew Geissler09036742021-06-25 14:25:14 -050016Machine features are set in the :term:`MACHINE_FEATURES` variable, which is
Andrew Geisslerc9f78652020-09-18 14:11:35 -050017set in the machine configuration file and specifies the hardware
18features for a given machine.
19
20These two variables combine to work out which kernel modules, utilities,
21and other packages to include. A given distribution can support a
22selected subset of features so some machine features might not be
23included if the distribution itself does not support them.
24
25One method you can use to determine which recipes are checking to see if
26a particular feature is contained or not is to ``grep`` through the
27:term:`Metadata` for the feature. Here is an example that
28discovers the recipes whose build is potentially changed based on a
Andrew Geisslerc926e172021-05-07 16:11:35 -050029given feature::
Andrew Geisslerc9f78652020-09-18 14:11:35 -050030
31 $ cd poky
32 $ git grep 'contains.*MACHINE_FEATURES.*feature'
33
34.. _ref-features-machine:
35
36Machine Features
37================
38
39The items below are features you can use with
40:term:`MACHINE_FEATURES`. Features do not have a
41one-to-one correspondence to packages, and they can go beyond simply
42controlling the installation of a package or packages. Sometimes a
43feature can influence how certain recipes are built. For example, a
44feature might determine whether a particular configure option is
45specified within the :ref:`ref-tasks-configure` task
46for a particular recipe.
47
48This feature list only represents features as shipped with the Yocto
49Project metadata:
50
51- *acpi:* Hardware has ACPI (x86/x86_64 only)
52
53- *alsa:* Hardware has ALSA audio drivers
54
Andrew Geisslerc9f78652020-09-18 14:11:35 -050055- *bluetooth:* Hardware has integrated BT
56
57- *efi:* Support for booting through EFI
58
59- *ext2:* Hardware HDD or Microdrive
60
61- *keyboard:* Hardware has a keyboard
62
Patrick Williams92b42cb2022-09-03 06:53:57 -050063- *numa:* Hardware has non-uniform memory access
64
Andrew Geisslerc9f78652020-09-18 14:11:35 -050065- *pcbios:* Support for booting through BIOS
66
67- *pci:* Hardware has a PCI bus
68
69- *pcmcia:* Hardware has PCMCIA or CompactFlash sockets
70
71- *phone:* Mobile phone (voice) support
72
Patrick Williams975a06f2022-10-21 14:42:47 -050073- *qemu-usermode:* QEMU can support user-mode emulation for this machine
74
Andrew Geisslerc9f78652020-09-18 14:11:35 -050075- *qvga:* Machine has a QVGA (320x240) display
76
77- *rtc:* Machine has a Real-Time Clock
78
79- *screen:* Hardware has a screen
80
81- *serial:* Hardware has serial support (usually RS232)
82
83- *touchscreen:* Hardware has a touchscreen
84
85- *usbgadget:* Hardware is USB gadget device capable
86
87- *usbhost:* Hardware is USB Host capable
88
89- *vfat:* FAT file system support
90
91- *wifi:* Hardware has integrated WiFi
92
93.. _ref-features-distro:
94
95Distro Features
96===============
97
98The items below are features you can use with
99:term:`DISTRO_FEATURES` to enable features across
100your distribution. Features do not have a one-to-one correspondence to
101packages, and they can go beyond simply controlling the installation of
102a package or packages. In most cases, the presence or absence of a
103feature translates to the appropriate option supplied to the configure
104script during the :ref:`ref-tasks-configure` task for
Andrew Geissler615f2f12022-07-15 14:00:58 -0500105the recipes that optionally support the feature. Appropriate options
106must be supplied, and enabling/disabling :term:`PACKAGECONFIG` for the
107concerned packages is one way of supplying such options.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500108
109Some distro features are also machine features. These select features
110make sense to be controlled both at the machine and distribution
111configuration level. See the
112:term:`COMBINED_FEATURES` variable for more
113information.
114
Patrick Williams975a06f2022-10-21 14:42:47 -0500115.. note::
116
117 :term:`DISTRO_FEATURES` is normally independent of kernel configuration,
118 so if a feature specified in :term:`DISTRO_FEATURES` also relies on
119 support in the kernel, you will also need to ensure that support is
120 enabled in the kernel configuration.
121
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500122This list only represents features as shipped with the Yocto Project
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500123metadata, as extra layers can define their own:
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500124
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500125- *3g:* Include support for cellular data.
126
Patrick Williams7784c422022-11-17 07:29:11 -0600127- *acl:* Include :wikipedia:`Access Control List <Access-control_list>` support.
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500128
Patrick Williams7784c422022-11-17 07:29:11 -0600129- *alsa:* Include :wikipedia:`Advanced Linux Sound Architecture <Advanced_Linux_Sound_Architecture>`
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500130 support (OSS compatibility kernel modules installed if available).
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500131
132- *api-documentation:* Enables generation of API documentation during
133 recipe builds. The resulting documentation is added to SDK tarballs
134 when the ``bitbake -c populate_sdk`` command is used. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600135 ":ref:`sdk-manual/appendix-customizing-standard:adding api documentation to the standard sdk`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500136 section in the Yocto Project Application Development and the
137 Extensible Software Development Kit (eSDK) manual.
138
139- *bluetooth:* Include bluetooth support (integrated BT only).
140
141- *cramfs:* Include CramFS support.
142
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500143- *debuginfod:* Include support for getting ELF debugging information through
Andrew Geissler517393d2023-01-13 08:55:19 -0600144 a :ref:`debuginfod <dev-manual/debugging:using the debuginfod server method>`
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500145 server.
146
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500147- *directfb:* Include DirectFB support.
148
Patrick Williams84603582024-12-14 08:00:57 -0500149- *ext2:* Include tools for supporting devices with internal
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500150 HDD/Microdrive for storing files (instead of Flash only devices).
151
Patrick Williams975a06f2022-10-21 14:42:47 -0500152- *gobject-introspection-data:* Include data to support
153 `GObject Introspection <https://gi.readthedocs.io/en/latest/>`__.
154
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500155- *ipsec:* Include IPSec support.
156
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500157- *ipv4:* Include IPv4 support.
158
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500159- *ipv6:* Include IPv6 support.
160
161- *keyboard:* Include keyboard support (e.g. keymaps will be loaded
162 during boot).
163
Patrick Williams169d7bc2024-01-05 11:33:25 -0600164- *minidebuginfo:* Add minimal debug symbols :ref:`(minidebuginfo)<dev-manual/debugging:enabling minidebuginfo>`
165 to binary files containing, allowing ``coredumpctl`` and ``gdb`` to show symbolicated stack traces.
166
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500167- *multiarch:* Enable building applications with multiple architecture
168 support.
169
Patrick Williams7784c422022-11-17 07:29:11 -0600170- *ld-is-gold:* Use the :wikipedia:`gold <Gold_(linker)>`
Patrick Williams975a06f2022-10-21 14:42:47 -0500171 linker instead of the standard GCC linker (bfd).
172
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500173- *ldconfig:* Include support for ldconfig and ``ld.so.conf`` on the
174 target.
175
Patrick Williams975a06f2022-10-21 14:42:47 -0500176- *lto:* Enable `Link-Time Optimisation <https://gcc.gnu.org/wiki/LinkTimeOptimization>`__.
177
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500178- *nfc:* Include support for
179 `Near Field Communication <https://en.wikipedia.org/wiki/Near-field_communication>`__.
180
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500181- *nfs:* Include NFS client support (for mounting NFS exports on
182 device).
183
Patrick Williams975a06f2022-10-21 14:42:47 -0500184- *nls:* Include National Language Support (NLS).
185
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500186- *opengl:* Include the Open Graphics Library, which is a
187 cross-language, multi-platform application programming interface used
188 for rendering two and three-dimensional graphics.
189
Patrick Williams975a06f2022-10-21 14:42:47 -0500190- *overlayfs:* Include `OverlayFS <https://docs.kernel.org/filesystems/overlayfs.html>`__
191 support.
192
Patrick Williams7784c422022-11-17 07:29:11 -0600193- *pam:* Include :wikipedia:`Pluggable Authentication Module (PAM) <Pluggable_authentication_module>`
Patrick Williams975a06f2022-10-21 14:42:47 -0500194 support.
195
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500196- *pci:* Include PCI bus support.
197
198- *pcmcia:* Include PCMCIA/CompactFlash support.
199
Patrick Williams84603582024-12-14 08:00:57 -0500200- *pni-names:* Enable generation of persistent network interface names, i.e.
201 the system tries hard to have the same but unique names for the network
202 interfaces even after a reinstall.
203
Patrick Williams7784c422022-11-17 07:29:11 -0600204- *polkit:* Include :wikipedia:`Polkit <Polkit>` support.
Patrick Williams975a06f2022-10-21 14:42:47 -0500205
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500206- *ppp:* Include PPP dialup support.
207
208- *ptest:* Enables building the package tests where supported by
209 individual recipes. For more information on package tests, see the
Patrick Williams96e4b4e2025-02-03 15:49:15 -0500210 ":ref:`test-manual/ptest:testing packages with ptest`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500211 in the Yocto Project Development Tasks Manual.
212
Patrick Williams975a06f2022-10-21 14:42:47 -0500213- *pulseaudio:* Include support for
214 `PulseAudio <https://www.freedesktop.org/wiki/Software/PulseAudio/>`__.
215
216- *selinux:* Include support for
Patrick Williams7784c422022-11-17 07:29:11 -0600217 :wikipedia:`Security-Enhanced Linux (SELinux) <Security-Enhanced_Linux>`
Patrick Williams975a06f2022-10-21 14:42:47 -0500218 (requires `meta-selinux <https://layers.openembedded.org/layerindex/layer/meta-selinux/>`__).
219
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500220- *seccomp:* Enables building applications with
Patrick Williams7784c422022-11-17 07:29:11 -0600221 :wikipedia:`seccomp <Seccomp>` support, to
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500222 allow them to strictly restrict the system calls that they are allowed
223 to invoke.
224
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500225- *smbfs:* Include SMB networks client support (for mounting
226 Samba/Microsoft Windows shares on device).
227
228- *systemd:* Include support for this ``init`` manager, which is a full
229 replacement of for ``init`` with parallel starting of services,
230 reduced shell overhead, and other features. This ``init`` manager is
231 used by many distributions.
232
Patrick Williamsac13d5f2023-11-24 18:59:46 -0600233- *systemd-resolved:* Include support and use ``systemd-resolved`` as the
234 main DNS name resolver in ``glibc`` Name Service Switch. This is a DNS
235 resolver daemon from ``systemd``.
236
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500237- *usbgadget:* Include USB Gadget Device support (for USB
238 networking/serial/storage).
239
240- *usbhost:* Include USB Host support (allows to connect external
241 keyboard, mouse, storage, network etc).
242
243- *usrmerge:* Merges the ``/bin``, ``/sbin``, ``/lib``, and ``/lib64``
244 directories into their respective counterparts in the ``/usr``
245 directory to provide better package and application compatibility.
246
Patrick Williams7784c422022-11-17 07:29:11 -0600247- *vfat:* Include :wikipedia:`FAT filesystem <File_Allocation_Table>`
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500248 support.
249
Patrick Williams7784c422022-11-17 07:29:11 -0600250- *vulkan:* Include support for the :wikipedia:`Vulkan API <Vulkan>`.
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500251
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500252- *wayland:* Include the Wayland display server protocol and the
253 library that supports it.
254
255- *wifi:* Include WiFi support (integrated only).
256
257- *x11:* Include the X server and libraries.
258
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500259- *xattr:* Include support for
Patrick Williams7784c422022-11-17 07:29:11 -0600260 :wikipedia:`extended file attributes <Extended_file_attributes>`.
Andrew Geissler87f5cff2022-09-30 13:13:31 -0500261
262- *zeroconf:* Include support for
263 `zero configuration networking <https://en.wikipedia.org/wiki/Zero-configuration_networking>`__.
264
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500265.. _ref-features-image:
266
267Image Features
268==============
269
270The contents of images generated by the OpenEmbedded build system can be
271controlled by the :term:`IMAGE_FEATURES` and
272:term:`EXTRA_IMAGE_FEATURES` variables that
273you typically configure in your image recipes. Through these variables,
274you can add several different predefined packages such as development
275utilities or packages with debug information needed to investigate
276application problems or profile applications.
277
Patrick Williams39653562024-03-01 08:54:02 -0600278The image features available for all images are:
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500279
Andrew Geissler615f2f12022-07-15 14:00:58 -0500280- *allow-empty-password:* Allows Dropbear and OpenSSH to accept
281 logins from accounts having an empty password string.
282
283- *allow-root-login:* Allows Dropbear and OpenSSH to accept root logins.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500284
285- *dbg-pkgs:* Installs debug symbol packages for all packages installed
286 in a given image.
287
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500288- *dev-pkgs:* Installs development packages (headers and extra library
289 links) for all packages installed in a given image.
290
291- *doc-pkgs:* Installs documentation packages for all packages
292 installed in a given image.
293
Patrick Williams96e4b4e2025-02-03 15:49:15 -0500294- *empty-root-password:* This feature can be used if you want to allow root
295 login with an empty password. If this feature is not present in
296 :term:`IMAGE_FEATURES`, a non-empty password is forced in ``/etc/passwd`` and
297 ``/etc/shadow`` if such files exist.
Andrew Geissler615f2f12022-07-15 14:00:58 -0500298
299 .. note::
Andrew Geissler6aa7eec2023-03-03 12:41:14 -0600300 ``empty-root-password`` doesn't set an empty root password by itself.
Andrew Geissler615f2f12022-07-15 14:00:58 -0500301 You get an initial empty root password thanks to the
302 :oe_git:`base-passwd </openembedded-core/tree/meta/recipes-core/base-passwd/>`
303 and :oe_git:`shadow </openembedded-core/tree/meta/recipes-extended/shadow/>`
Patrick Williams96e4b4e2025-02-03 15:49:15 -0500304 recipes, and the presence of ``empty-root-password`` just disables the
305 mechanism which forces an non-empty password for the root user.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500306
Patrick Williams975a06f2022-10-21 14:42:47 -0500307- *lic-pkgs:* Installs license packages for all packages installed in a
308 given image.
309
Andrew Geissler595f6302022-01-24 19:11:47 +0000310- *overlayfs-etc:* Configures the ``/etc`` directory to be in ``overlayfs``.
311 This allows to store device specific information elsewhere, especially
312 if the root filesystem is configured to be read-only.
313
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500314- *package-management:* Installs package management tools and preserves
315 the package manager database.
316
317- *post-install-logging:* Enables logging postinstall script runs to
318 the ``/var/log/postinstall.log`` file on first boot of the image on
319 the target system.
320
321 .. note::
322
Patrick Williams84603582024-12-14 08:00:57 -0500323 To make the ``/var/log`` directory on the target persistent, remove the
324 ``files/fs-perms-volatile-log.txt`` value from
325 :term:`FILESYSTEM_PERMS_TABLES`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500326
327- *ptest-pkgs:* Installs ptest packages for all ptest-enabled recipes.
328
329- *read-only-rootfs:* Creates an image whose root filesystem is
330 read-only. See the
Andrew Geissler517393d2023-01-13 08:55:19 -0600331 ":ref:`dev-manual/read-only-rootfs:creating a read-only root filesystem`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500332 section in the Yocto Project Development Tasks Manual for more
333 information.
334
Patrick Williams975a06f2022-10-21 14:42:47 -0500335- *read-only-rootfs-delayed-postinsts:* when specified in conjunction
336 with ``read-only-rootfs``, specifies that post-install scripts are
337 still permitted (this assumes that the root filesystem will be made
338 writeable for the first boot; this feature does not do anything to
339 ensure that - it just disables the check for post-install scripts.)
340
341- *serial-autologin-root:* when specified in conjunction with
342 ``empty-root-password`` will automatically login as root on the
343 serial console. This of course opens up a security hole if the
344 serial console is potentially accessible to an attacker, so use
345 with caution.
346
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500347- *splash:* Enables showing a splash screen during boot. By default,
348 this screen is provided by ``psplash``, which does allow
349 customization. If you prefer to use an alternative splash screen
Patrick Williamsb542dec2023-06-09 01:26:37 -0500350 package, you can do so by setting the :term:`SPLASH` variable to a
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500351 different package name (or names) within the image recipe or at the
352 distro configuration level.
353
Patrick Williams975a06f2022-10-21 14:42:47 -0500354- *stateless-rootfs:*: specifies that the image should be created as
355 stateless - when using ``systemd``, ``systemctl-native`` will not
356 be run on the image, leaving the image for population at runtime by
357 systemd.
358
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500359- *staticdev-pkgs:* Installs static development packages, which are
360 static libraries (i.e. ``*.a`` files), for all packages installed in
361 a given image.
362
363Some image features are available only when you inherit the
Andrew Geissler517393d2023-01-13 08:55:19 -0600364:ref:`ref-classes-core-image` class. The current list of
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500365these valid features is as follows:
366
367- *hwcodecs:* Installs hardware acceleration codecs.
368
369- *nfs-server:* Installs an NFS server.
370
371- *perf:* Installs profiling tools such as ``perf``, ``systemtap``, and
372 ``LTTng``. For general information on user-space tools, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600373 :doc:`/sdk-manual/index` manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500374
375- *ssh-server-dropbear:* Installs the Dropbear minimal SSH server.
376
Patrick Williams975a06f2022-10-21 14:42:47 -0500377 .. note::
378
379 As of the 4.1 release, the ``ssh-server-dropbear`` feature also
380 recommends the ``openssh-sftp-server`` package, which by default
381 will be pulled into the image. This is because recent versions of
382 the OpenSSH ``scp`` client now use the SFTP protocol, and thus
383 require an SFTP server to be present to connect to. However, if
384 you wish to use the Dropbear ssh server `without` the SFTP server
385 installed, you can either remove ``ssh-server-dropbear`` from
386 ``IMAGE_FEATURES`` and add ``dropbear`` to :term:`IMAGE_INSTALL`
387 instead, or alternatively still use the feature but set
388 :term:`BAD_RECOMMENDATIONS` as follows::
389
390 BAD_RECOMMENDATIONS += "openssh-sftp-server"
391
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500392- *ssh-server-openssh:* Installs the OpenSSH SSH server, which is more
393 full-featured than Dropbear. Note that if both the OpenSSH SSH server
394 and the Dropbear minimal SSH server are present in
Andrew Geissler09036742021-06-25 14:25:14 -0500395 :term:`IMAGE_FEATURES`, then OpenSSH will take precedence and Dropbear
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500396 will not be installed.
397
398- *tools-debug:* Installs debugging tools such as ``strace`` and
399 ``gdb``. For information on GDB, see the
Andrew Geissler517393d2023-01-13 08:55:19 -0600400 ":ref:`dev-manual/debugging:debugging with the gnu project debugger (gdb) remotely`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500401 in the Yocto Project Development Tasks Manual. For information on
Andrew Geissler09209ee2020-12-13 08:44:15 -0600402 tracing and profiling, see the :doc:`/profile-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500403
404- *tools-sdk:* Installs a full SDK that runs on the device.
405
406- *tools-testapps:* Installs device testing tools (e.g. touchscreen
407 debugging).
408
Patrick Williams975a06f2022-10-21 14:42:47 -0500409- *weston:* Installs Weston (reference Wayland environment).
410
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500411- *x11:* Installs the X server.
412
413- *x11-base:* Installs the X server with a minimal environment.
414
415- *x11-sato:* Installs the OpenedHand Sato environment.
416
417.. _ref-features-backfill:
418
419Feature Backfilling
420===================
421
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500422Sometimes it is necessary in the OpenEmbedded build system to
423add new functionality to :term:`MACHINE_FEATURES` or
424:term:`DISTRO_FEATURES`, but at the same time, allow existing
425distributions or machine definitions to opt out of such new
426features, to retain the same overall level of functionality.
427
428To make this possible, the OpenEmbedded build system has a mechanism to
429automatically "backfill" features into existing distro or machine
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500430configurations. You can see the list of features for which this is done
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500431by checking the :term:`DISTRO_FEATURES_BACKFILL` and
432:term:`MACHINE_FEATURES_BACKFILL` variables in the
433``meta/conf/bitbake.conf`` file.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500434
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500435These two variables are paired with the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500436:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500437and :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` variables
438which allow distro or machine configuration maintainers to `consider` any
439added feature, and decide when they wish to keep or exclude such feature,
440thus preventing the backfilling from happening.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500441
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500442Here are two examples to illustrate feature backfilling:
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500443
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500444- *The "pulseaudio" distro feature option*: Previously, PulseAudio support was
445 enabled within the Qt and GStreamer frameworks. Because of this, the feature
446 is now backfilled and thus enabled for all distros through the
447 :term:`DISTRO_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf``
448 file. However, if your distro needs to disable the feature, you can do so
449 without affecting other existing distro configurations that need PulseAudio
450 support. You do this by adding "pulseaudio" to
451 :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` in your distro's ``.conf``
452 file. So, adding the feature to this variable when it also exists in the
453 :term:`DISTRO_FEATURES_BACKFILL` variable prevents the build system from
454 adding the feature to your configuration's :term:`DISTRO_FEATURES`,
455 effectively disabling the feature for that particular distro.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500456
457- *The "rtc" machine feature option*: Previously, real time clock (RTC)
458 support was enabled for all target devices. Because of this, the
459 feature is backfilled and thus enabled for all machines through the
Andrew Geisslerfc113ea2023-03-31 09:59:46 -0500460 :term:`MACHINE_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf``
461 file. However, if your target device does not have this capability, you can
462 disable RTC support for your device without affecting other machines
463 that need RTC support. You do this by adding the "rtc" feature to the
464 :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` list in your machine's ``.conf``
465 file. So, adding the feature to this variable when it also exists in the
466 :term:`MACHINE_FEATURES_BACKFILL` variable prevents the build system from
467 adding the feature to your configuration's :term:`MACHINE_FEATURES`,
468 effectively disabling RTC support for that particular machine.