blob: 17521ac2a85f616f069bb0c5606e0f2687474a96 [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
9can select, and a reference on feature backfilling.
10
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
55- *apm:* Hardware uses APM (or APM emulation)
56
57- *bluetooth:* Hardware has integrated BT
58
59- *efi:* Support for booting through EFI
60
61- *ext2:* Hardware HDD or Microdrive
62
63- *keyboard:* Hardware has a keyboard
64
65- *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
73- *qvga:* Machine has a QVGA (320x240) display
74
75- *rtc:* Machine has a Real-Time Clock
76
77- *screen:* Hardware has a screen
78
79- *serial:* Hardware has serial support (usually RS232)
80
81- *touchscreen:* Hardware has a touchscreen
82
83- *usbgadget:* Hardware is USB gadget device capable
84
85- *usbhost:* Hardware is USB Host capable
86
87- *vfat:* FAT file system support
88
89- *wifi:* Hardware has integrated WiFi
90
91.. _ref-features-distro:
92
93Distro Features
94===============
95
96The items below are features you can use with
97:term:`DISTRO_FEATURES` to enable features across
98your distribution. Features do not have a one-to-one correspondence to
99packages, and they can go beyond simply controlling the installation of
100a package or packages. In most cases, the presence or absence of a
101feature translates to the appropriate option supplied to the configure
102script during the :ref:`ref-tasks-configure` task for
Andrew Geissler615f2f12022-07-15 14:00:58 -0500103the recipes that optionally support the feature. Appropriate options
104must be supplied, and enabling/disabling :term:`PACKAGECONFIG` for the
105concerned packages is one way of supplying such options.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500106
107Some distro features are also machine features. These select features
108make sense to be controlled both at the machine and distribution
109configuration level. See the
110:term:`COMBINED_FEATURES` variable for more
111information.
112
113This list only represents features as shipped with the Yocto Project
114metadata:
115
116- *alsa:* Include ALSA support (OSS compatibility kernel modules
117 installed if available).
118
119- *api-documentation:* Enables generation of API documentation during
120 recipe builds. The resulting documentation is added to SDK tarballs
121 when the ``bitbake -c populate_sdk`` command is used. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600122 ":ref:`sdk-manual/appendix-customizing-standard:adding api documentation to the standard sdk`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500123 section in the Yocto Project Application Development and the
124 Extensible Software Development Kit (eSDK) manual.
125
126- *bluetooth:* Include bluetooth support (integrated BT only).
127
128- *cramfs:* Include CramFS support.
129
130- *directfb:* Include DirectFB support.
131
132- *ext2:* Include tools for supporting for devices with internal
133 HDD/Microdrive for storing files (instead of Flash only devices).
134
135- *ipsec:* Include IPSec support.
136
137- *ipv6:* Include IPv6 support.
138
139- *keyboard:* Include keyboard support (e.g. keymaps will be loaded
140 during boot).
141
142- *ldconfig:* Include support for ldconfig and ``ld.so.conf`` on the
143 target.
144
145- *nfs:* Include NFS client support (for mounting NFS exports on
146 device).
147
148- *opengl:* Include the Open Graphics Library, which is a
149 cross-language, multi-platform application programming interface used
150 for rendering two and three-dimensional graphics.
151
152- *pci:* Include PCI bus support.
153
154- *pcmcia:* Include PCMCIA/CompactFlash support.
155
156- *ppp:* Include PPP dialup support.
157
158- *ptest:* Enables building the package tests where supported by
159 individual recipes. For more information on package tests, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600160 ":ref:`dev-manual/common-tasks:testing packages with ptest`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500161 in the Yocto Project Development Tasks Manual.
162
163- *smbfs:* Include SMB networks client support (for mounting
164 Samba/Microsoft Windows shares on device).
165
166- *systemd:* Include support for this ``init`` manager, which is a full
167 replacement of for ``init`` with parallel starting of services,
168 reduced shell overhead, and other features. This ``init`` manager is
169 used by many distributions.
170
171- *usbgadget:* Include USB Gadget Device support (for USB
172 networking/serial/storage).
173
174- *usbhost:* Include USB Host support (allows to connect external
175 keyboard, mouse, storage, network etc).
176
177- *usrmerge:* Merges the ``/bin``, ``/sbin``, ``/lib``, and ``/lib64``
178 directories into their respective counterparts in the ``/usr``
179 directory to provide better package and application compatibility.
180
181- *wayland:* Include the Wayland display server protocol and the
182 library that supports it.
183
184- *wifi:* Include WiFi support (integrated only).
185
186- *x11:* Include the X server and libraries.
187
188.. _ref-features-image:
189
190Image Features
191==============
192
193The contents of images generated by the OpenEmbedded build system can be
194controlled by the :term:`IMAGE_FEATURES` and
195:term:`EXTRA_IMAGE_FEATURES` variables that
196you typically configure in your image recipes. Through these variables,
197you can add several different predefined packages such as development
198utilities or packages with debug information needed to investigate
199application problems or profile applications.
200
William A. Kennington IIIac69b482021-06-02 12:28:27 -0700201Here are the image features available for all images:
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500202
Andrew Geissler615f2f12022-07-15 14:00:58 -0500203- *allow-empty-password:* Allows Dropbear and OpenSSH to accept
204 logins from accounts having an empty password string.
205
206- *allow-root-login:* Allows Dropbear and OpenSSH to accept root logins.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500207
208- *dbg-pkgs:* Installs debug symbol packages for all packages installed
209 in a given image.
210
211- *debug-tweaks:* Makes an image suitable for development (e.g. allows
Andrew Geissler615f2f12022-07-15 14:00:58 -0500212 root logins, logins without passwords ---including root ones, and enables
213 post-installation logging). See the ``allow-empty-password``,
214 ``allow-root-login``, ``empty-root-password``, and ``post-install-logging``
215 features in this list for additional information.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500216
217- *dev-pkgs:* Installs development packages (headers and extra library
218 links) for all packages installed in a given image.
219
220- *doc-pkgs:* Installs documentation packages for all packages
221 installed in a given image.
222
Andrew Geissler615f2f12022-07-15 14:00:58 -0500223- *empty-root-password:* This feature or ``debug-tweaks`` is required if
224 you want to allow root login with an empty password. If these features
225 are not present in :term:`IMAGE_FEATURES`, a non-empty password is
226 forced in ``/etc/passwd`` and ``/etc/shadow`` if such files exist.
227
228 .. note::
229 ``empty-root-passwd`` doesn't set an empty root password by itself.
230 You get an initial empty root password thanks to the
231 :oe_git:`base-passwd </openembedded-core/tree/meta/recipes-core/base-passwd/>`
232 and :oe_git:`shadow </openembedded-core/tree/meta/recipes-extended/shadow/>`
233 recipes, and the presence of ``empty-root-passwd`` or ``debug-tweaks``
234 just disables the mechanism which forces an non-empty password for the
235 root user.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500236
Andrew Geissler595f6302022-01-24 19:11:47 +0000237- *overlayfs-etc:* Configures the ``/etc`` directory to be in ``overlayfs``.
238 This allows to store device specific information elsewhere, especially
239 if the root filesystem is configured to be read-only.
240
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500241- *package-management:* Installs package management tools and preserves
242 the package manager database.
243
244- *post-install-logging:* Enables logging postinstall script runs to
245 the ``/var/log/postinstall.log`` file on first boot of the image on
246 the target system.
247
248 .. note::
249
Andrew Geissler4c19ea12020-10-27 13:52:24 -0500250 To make the ``/var/log`` directory on the target persistent, use the
251 :term:`VOLATILE_LOG_DIR` variable by setting it to "no".
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500252
253- *ptest-pkgs:* Installs ptest packages for all ptest-enabled recipes.
254
255- *read-only-rootfs:* Creates an image whose root filesystem is
256 read-only. See the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600257 ":ref:`dev-manual/common-tasks:creating a read-only root filesystem`"
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500258 section in the Yocto Project Development Tasks Manual for more
259 information.
260
261- *splash:* Enables showing a splash screen during boot. By default,
262 this screen is provided by ``psplash``, which does allow
263 customization. If you prefer to use an alternative splash screen
264 package, you can do so by setting the ``SPLASH`` variable to a
265 different package name (or names) within the image recipe or at the
266 distro configuration level.
267
268- *staticdev-pkgs:* Installs static development packages, which are
269 static libraries (i.e. ``*.a`` files), for all packages installed in
270 a given image.
271
272Some image features are available only when you inherit the
273:ref:`core-image <ref-classes-core-image>` class. The current list of
274these valid features is as follows:
275
276- *hwcodecs:* Installs hardware acceleration codecs.
277
278- *nfs-server:* Installs an NFS server.
279
280- *perf:* Installs profiling tools such as ``perf``, ``systemtap``, and
281 ``LTTng``. For general information on user-space tools, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600282 :doc:`/sdk-manual/index` manual.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500283
284- *ssh-server-dropbear:* Installs the Dropbear minimal SSH server.
285
286- *ssh-server-openssh:* Installs the OpenSSH SSH server, which is more
287 full-featured than Dropbear. Note that if both the OpenSSH SSH server
288 and the Dropbear minimal SSH server are present in
Andrew Geissler09036742021-06-25 14:25:14 -0500289 :term:`IMAGE_FEATURES`, then OpenSSH will take precedence and Dropbear
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500290 will not be installed.
291
292- *tools-debug:* Installs debugging tools such as ``strace`` and
293 ``gdb``. For information on GDB, see the
Andrew Geissler09209ee2020-12-13 08:44:15 -0600294 ":ref:`dev-manual/common-tasks:debugging with the gnu project debugger (gdb) remotely`" section
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500295 in the Yocto Project Development Tasks Manual. For information on
Andrew Geissler09209ee2020-12-13 08:44:15 -0600296 tracing and profiling, see the :doc:`/profile-manual/index`.
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500297
298- *tools-sdk:* Installs a full SDK that runs on the device.
299
300- *tools-testapps:* Installs device testing tools (e.g. touchscreen
301 debugging).
302
303- *x11:* Installs the X server.
304
305- *x11-base:* Installs the X server with a minimal environment.
306
307- *x11-sato:* Installs the OpenedHand Sato environment.
308
309.. _ref-features-backfill:
310
311Feature Backfilling
312===================
313
314Sometimes it is necessary in the OpenEmbedded build system to extend
315:term:`MACHINE_FEATURES` or
316:term:`DISTRO_FEATURES` to control functionality
317that was previously enabled and not able to be disabled. For these
318cases, we need to add an additional feature item to appear in one of
319these variables, but we do not want to force developers who have
320existing values of the variables in their configuration to add the new
321feature in order to retain the same overall level of functionality.
322Thus, the OpenEmbedded build system has a mechanism to automatically
323"backfill" these added features into existing distro or machine
324configurations. You can see the list of features for which this is done
325by finding the
326:term:`DISTRO_FEATURES_BACKFILL` and
327:term:`MACHINE_FEATURES_BACKFILL`
328variables in the ``meta/conf/bitbake.conf`` file.
329
330Because such features are backfilled by default into all configurations
331as described in the previous paragraph, developers who wish to disable
332the new features need to be able to selectively prevent the backfilling
333from occurring. They can do this by adding the undesired feature or
334features to the
335:term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
336or
337:term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`
338variables for distro features and machine features respectively.
339
340Here are two examples to help illustrate feature backfilling:
341
342- *The "pulseaudio" distro feature option*: Previously, PulseAudio
343 support was enabled within the Qt and GStreamer frameworks. Because
344 of this, the feature is backfilled and thus enabled for all distros
Andrew Geissler09036742021-06-25 14:25:14 -0500345 through the :term:`DISTRO_FEATURES_BACKFILL` variable in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500346 ``meta/conf/bitbake.conf`` file. However, your distro needs to
347 disable the feature. You can disable the feature without affecting
348 other existing distro configurations that need PulseAudio support by
Andrew Geissler09036742021-06-25 14:25:14 -0500349 adding "pulseaudio" to :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` in
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500350 your distro's ``.conf`` file. Adding the feature to this variable
Andrew Geissler09036742021-06-25 14:25:14 -0500351 when it also exists in the :term:`DISTRO_FEATURES_BACKFILL` variable
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500352 prevents the build system from adding the feature to your
Andrew Geissler09036742021-06-25 14:25:14 -0500353 configuration's :term:`DISTRO_FEATURES`, effectively disabling the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500354 feature for that particular distro.
355
356- *The "rtc" machine feature option*: Previously, real time clock (RTC)
357 support was enabled for all target devices. Because of this, the
358 feature is backfilled and thus enabled for all machines through the
Andrew Geissler09036742021-06-25 14:25:14 -0500359 :term:`MACHINE_FEATURES_BACKFILL` variable in the
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500360 ``meta/conf/bitbake.conf`` file. However, your target device does not
361 have this capability. You can disable RTC support for your device
362 without affecting other machines that need RTC support by adding the
Andrew Geissler09036742021-06-25 14:25:14 -0500363 feature to your machine's :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500364 list in the machine's ``.conf`` file. Adding the feature to this
Andrew Geissler09036742021-06-25 14:25:14 -0500365 variable when it also exists in the :term:`MACHINE_FEATURES_BACKFILL`
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500366 variable prevents the build system from adding the feature to your
Andrew Geissler09036742021-06-25 14:25:14 -0500367 configuration's :term:`MACHINE_FEATURES`, effectively disabling RTC
Andrew Geisslerc9f78652020-09-18 14:11:35 -0500368 support for that particular machine.