Andrew Geissler | f034379 | 2020-11-18 10:42:21 -0600 | [diff] [blame] | 1 | .. SPDX-License-Identifier: CC-BY-SA-2.0-UK |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 2 | |
| 3 | ******** |
| 4 | Features |
| 5 | ******** |
| 6 | |
| 7 | This chapter provides a reference of shipped machine and distro features |
| 8 | you can include as part of your image, a reference on image features you |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 9 | can select, and a reference on :ref:`ref-features-backfill`. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 10 | |
| 11 | Features provide a mechanism for working out which packages should be |
| 12 | included in the generated images. Distributions can select which |
Andrew Geissler | 0903674 | 2021-06-25 14:25:14 -0500 | [diff] [blame] | 13 | features they want to support through the :term:`DISTRO_FEATURES` variable, |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 14 | which is set or appended to in a distribution's configuration file such |
| 15 | as ``poky.conf``, ``poky-tiny.conf``, ``poky-lsb.conf`` and so forth. |
Andrew Geissler | 0903674 | 2021-06-25 14:25:14 -0500 | [diff] [blame] | 16 | Machine features are set in the :term:`MACHINE_FEATURES` variable, which is |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 17 | set in the machine configuration file and specifies the hardware |
| 18 | features for a given machine. |
| 19 | |
| 20 | These two variables combine to work out which kernel modules, utilities, |
| 21 | and other packages to include. A given distribution can support a |
| 22 | selected subset of features so some machine features might not be |
| 23 | included if the distribution itself does not support them. |
| 24 | |
| 25 | One method you can use to determine which recipes are checking to see if |
| 26 | a particular feature is contained or not is to ``grep`` through the |
| 27 | :term:`Metadata` for the feature. Here is an example that |
| 28 | discovers the recipes whose build is potentially changed based on a |
Andrew Geissler | c926e17 | 2021-05-07 16:11:35 -0500 | [diff] [blame] | 29 | given feature:: |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 30 | |
| 31 | $ cd poky |
| 32 | $ git grep 'contains.*MACHINE_FEATURES.*feature' |
| 33 | |
| 34 | .. _ref-features-machine: |
| 35 | |
| 36 | Machine Features |
| 37 | ================ |
| 38 | |
| 39 | The items below are features you can use with |
| 40 | :term:`MACHINE_FEATURES`. Features do not have a |
| 41 | one-to-one correspondence to packages, and they can go beyond simply |
| 42 | controlling the installation of a package or packages. Sometimes a |
| 43 | feature can influence how certain recipes are built. For example, a |
| 44 | feature might determine whether a particular configure option is |
| 45 | specified within the :ref:`ref-tasks-configure` task |
| 46 | for a particular recipe. |
| 47 | |
| 48 | This feature list only represents features as shipped with the Yocto |
| 49 | Project metadata: |
| 50 | |
| 51 | - *acpi:* Hardware has ACPI (x86/x86_64 only) |
| 52 | |
| 53 | - *alsa:* Hardware has ALSA audio drivers |
| 54 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 55 | - *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 Williams | 92b42cb | 2022-09-03 06:53:57 -0500 | [diff] [blame] | 63 | - *numa:* Hardware has non-uniform memory access |
| 64 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 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 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 73 | - *qemu-usermode:* QEMU can support user-mode emulation for this machine |
| 74 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 75 | - *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 | |
| 95 | Distro Features |
| 96 | =============== |
| 97 | |
| 98 | The items below are features you can use with |
| 99 | :term:`DISTRO_FEATURES` to enable features across |
| 100 | your distribution. Features do not have a one-to-one correspondence to |
| 101 | packages, and they can go beyond simply controlling the installation of |
| 102 | a package or packages. In most cases, the presence or absence of a |
| 103 | feature translates to the appropriate option supplied to the configure |
| 104 | script during the :ref:`ref-tasks-configure` task for |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 105 | the recipes that optionally support the feature. Appropriate options |
| 106 | must be supplied, and enabling/disabling :term:`PACKAGECONFIG` for the |
| 107 | concerned packages is one way of supplying such options. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 108 | |
| 109 | Some distro features are also machine features. These select features |
| 110 | make sense to be controlled both at the machine and distribution |
| 111 | configuration level. See the |
| 112 | :term:`COMBINED_FEATURES` variable for more |
| 113 | information. |
| 114 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 115 | .. 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 Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 122 | This list only represents features as shipped with the Yocto Project |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 123 | metadata, as extra layers can define their own: |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 124 | |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 125 | - *3g:* Include support for cellular data. |
| 126 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 127 | - *acl:* Include :wikipedia:`Access Control List <Access-control_list>` support. |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 128 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 129 | - *alsa:* Include :wikipedia:`Advanced Linux Sound Architecture <Advanced_Linux_Sound_Architecture>` |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 130 | support (OSS compatibility kernel modules installed if available). |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 131 | |
| 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 Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 135 | ":ref:`sdk-manual/appendix-customizing-standard:adding api documentation to the standard sdk`" |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 136 | 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 Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 143 | - *debuginfod:* Include support for getting ELF debugging information through |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 144 | a :ref:`debuginfod <dev-manual/debugging:using the debuginfod server method>` |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 145 | server. |
| 146 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 147 | - *directfb:* Include DirectFB support. |
| 148 | |
| 149 | - *ext2:* Include tools for supporting for devices with internal |
| 150 | HDD/Microdrive for storing files (instead of Flash only devices). |
| 151 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 152 | - *gobject-introspection-data:* Include data to support |
| 153 | `GObject Introspection <https://gi.readthedocs.io/en/latest/>`__. |
| 154 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 155 | - *ipsec:* Include IPSec support. |
| 156 | |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 157 | - *ipv4:* Include IPv4 support. |
| 158 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 159 | - *ipv6:* Include IPv6 support. |
| 160 | |
| 161 | - *keyboard:* Include keyboard support (e.g. keymaps will be loaded |
| 162 | during boot). |
| 163 | |
Patrick Williams | 169d7bc | 2024-01-05 11:33:25 -0600 | [diff] [blame] | 164 | - *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 Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 167 | - *multiarch:* Enable building applications with multiple architecture |
| 168 | support. |
| 169 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 170 | - *ld-is-gold:* Use the :wikipedia:`gold <Gold_(linker)>` |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 171 | linker instead of the standard GCC linker (bfd). |
| 172 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 173 | - *ldconfig:* Include support for ldconfig and ``ld.so.conf`` on the |
| 174 | target. |
| 175 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 176 | - *lto:* Enable `Link-Time Optimisation <https://gcc.gnu.org/wiki/LinkTimeOptimization>`__. |
| 177 | |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 178 | - *nfc:* Include support for |
| 179 | `Near Field Communication <https://en.wikipedia.org/wiki/Near-field_communication>`__. |
| 180 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 181 | - *nfs:* Include NFS client support (for mounting NFS exports on |
| 182 | device). |
| 183 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 184 | - *nls:* Include National Language Support (NLS). |
| 185 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 186 | - *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 Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 190 | - *overlayfs:* Include `OverlayFS <https://docs.kernel.org/filesystems/overlayfs.html>`__ |
| 191 | support. |
| 192 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 193 | - *pam:* Include :wikipedia:`Pluggable Authentication Module (PAM) <Pluggable_authentication_module>` |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 194 | support. |
| 195 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 196 | - *pci:* Include PCI bus support. |
| 197 | |
| 198 | - *pcmcia:* Include PCMCIA/CompactFlash support. |
| 199 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 200 | - *polkit:* Include :wikipedia:`Polkit <Polkit>` support. |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 201 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 202 | - *ppp:* Include PPP dialup support. |
| 203 | |
| 204 | - *ptest:* Enables building the package tests where supported by |
| 205 | individual recipes. For more information on package tests, see the |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 206 | ":ref:`dev-manual/packages:testing packages with ptest`" section |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 207 | in the Yocto Project Development Tasks Manual. |
| 208 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 209 | - *pulseaudio:* Include support for |
| 210 | `PulseAudio <https://www.freedesktop.org/wiki/Software/PulseAudio/>`__. |
| 211 | |
| 212 | - *selinux:* Include support for |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 213 | :wikipedia:`Security-Enhanced Linux (SELinux) <Security-Enhanced_Linux>` |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 214 | (requires `meta-selinux <https://layers.openembedded.org/layerindex/layer/meta-selinux/>`__). |
| 215 | |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 216 | - *seccomp:* Enables building applications with |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 217 | :wikipedia:`seccomp <Seccomp>` support, to |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 218 | allow them to strictly restrict the system calls that they are allowed |
| 219 | to invoke. |
| 220 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 221 | - *smbfs:* Include SMB networks client support (for mounting |
| 222 | Samba/Microsoft Windows shares on device). |
| 223 | |
| 224 | - *systemd:* Include support for this ``init`` manager, which is a full |
| 225 | replacement of for ``init`` with parallel starting of services, |
| 226 | reduced shell overhead, and other features. This ``init`` manager is |
| 227 | used by many distributions. |
| 228 | |
Patrick Williams | ac13d5f | 2023-11-24 18:59:46 -0600 | [diff] [blame] | 229 | - *systemd-resolved:* Include support and use ``systemd-resolved`` as the |
| 230 | main DNS name resolver in ``glibc`` Name Service Switch. This is a DNS |
| 231 | resolver daemon from ``systemd``. |
| 232 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 233 | - *usbgadget:* Include USB Gadget Device support (for USB |
| 234 | networking/serial/storage). |
| 235 | |
| 236 | - *usbhost:* Include USB Host support (allows to connect external |
| 237 | keyboard, mouse, storage, network etc). |
| 238 | |
| 239 | - *usrmerge:* Merges the ``/bin``, ``/sbin``, ``/lib``, and ``/lib64`` |
| 240 | directories into their respective counterparts in the ``/usr`` |
| 241 | directory to provide better package and application compatibility. |
| 242 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 243 | - *vfat:* Include :wikipedia:`FAT filesystem <File_Allocation_Table>` |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 244 | support. |
| 245 | |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 246 | - *vulkan:* Include support for the :wikipedia:`Vulkan API <Vulkan>`. |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 247 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 248 | - *wayland:* Include the Wayland display server protocol and the |
| 249 | library that supports it. |
| 250 | |
| 251 | - *wifi:* Include WiFi support (integrated only). |
| 252 | |
| 253 | - *x11:* Include the X server and libraries. |
| 254 | |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 255 | - *xattr:* Include support for |
Patrick Williams | 7784c42 | 2022-11-17 07:29:11 -0600 | [diff] [blame] | 256 | :wikipedia:`extended file attributes <Extended_file_attributes>`. |
Andrew Geissler | 87f5cff | 2022-09-30 13:13:31 -0500 | [diff] [blame] | 257 | |
| 258 | - *zeroconf:* Include support for |
| 259 | `zero configuration networking <https://en.wikipedia.org/wiki/Zero-configuration_networking>`__. |
| 260 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 261 | .. _ref-features-image: |
| 262 | |
| 263 | Image Features |
| 264 | ============== |
| 265 | |
| 266 | The contents of images generated by the OpenEmbedded build system can be |
| 267 | controlled by the :term:`IMAGE_FEATURES` and |
| 268 | :term:`EXTRA_IMAGE_FEATURES` variables that |
| 269 | you typically configure in your image recipes. Through these variables, |
| 270 | you can add several different predefined packages such as development |
| 271 | utilities or packages with debug information needed to investigate |
| 272 | application problems or profile applications. |
| 273 | |
Patrick Williams | 3965356 | 2024-03-01 08:54:02 -0600 | [diff] [blame] | 274 | The image features available for all images are: |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 275 | |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 276 | - *allow-empty-password:* Allows Dropbear and OpenSSH to accept |
| 277 | logins from accounts having an empty password string. |
| 278 | |
| 279 | - *allow-root-login:* Allows Dropbear and OpenSSH to accept root logins. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 280 | |
| 281 | - *dbg-pkgs:* Installs debug symbol packages for all packages installed |
| 282 | in a given image. |
| 283 | |
| 284 | - *debug-tweaks:* Makes an image suitable for development (e.g. allows |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 285 | root logins, logins without passwords ---including root ones, and enables |
| 286 | post-installation logging). See the ``allow-empty-password``, |
| 287 | ``allow-root-login``, ``empty-root-password``, and ``post-install-logging`` |
| 288 | features in this list for additional information. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 289 | |
| 290 | - *dev-pkgs:* Installs development packages (headers and extra library |
| 291 | links) for all packages installed in a given image. |
| 292 | |
| 293 | - *doc-pkgs:* Installs documentation packages for all packages |
| 294 | installed in a given image. |
| 295 | |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 296 | - *empty-root-password:* This feature or ``debug-tweaks`` is required if |
| 297 | you want to allow root login with an empty password. If these features |
| 298 | are not present in :term:`IMAGE_FEATURES`, a non-empty password is |
| 299 | forced in ``/etc/passwd`` and ``/etc/shadow`` if such files exist. |
| 300 | |
| 301 | .. note:: |
Andrew Geissler | 6aa7eec | 2023-03-03 12:41:14 -0600 | [diff] [blame] | 302 | ``empty-root-password`` doesn't set an empty root password by itself. |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 303 | You get an initial empty root password thanks to the |
| 304 | :oe_git:`base-passwd </openembedded-core/tree/meta/recipes-core/base-passwd/>` |
| 305 | and :oe_git:`shadow </openembedded-core/tree/meta/recipes-extended/shadow/>` |
Andrew Geissler | 6aa7eec | 2023-03-03 12:41:14 -0600 | [diff] [blame] | 306 | recipes, and the presence of ``empty-root-password`` or ``debug-tweaks`` |
Andrew Geissler | 615f2f1 | 2022-07-15 14:00:58 -0500 | [diff] [blame] | 307 | just disables the mechanism which forces an non-empty password for the |
| 308 | root user. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 309 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 310 | - *lic-pkgs:* Installs license packages for all packages installed in a |
| 311 | given image. |
| 312 | |
Andrew Geissler | 595f630 | 2022-01-24 19:11:47 +0000 | [diff] [blame] | 313 | - *overlayfs-etc:* Configures the ``/etc`` directory to be in ``overlayfs``. |
| 314 | This allows to store device specific information elsewhere, especially |
| 315 | if the root filesystem is configured to be read-only. |
| 316 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 317 | - *package-management:* Installs package management tools and preserves |
| 318 | the package manager database. |
| 319 | |
| 320 | - *post-install-logging:* Enables logging postinstall script runs to |
| 321 | the ``/var/log/postinstall.log`` file on first boot of the image on |
| 322 | the target system. |
| 323 | |
| 324 | .. note:: |
| 325 | |
Andrew Geissler | 4c19ea1 | 2020-10-27 13:52:24 -0500 | [diff] [blame] | 326 | To make the ``/var/log`` directory on the target persistent, use the |
| 327 | :term:`VOLATILE_LOG_DIR` variable by setting it to "no". |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 328 | |
| 329 | - *ptest-pkgs:* Installs ptest packages for all ptest-enabled recipes. |
| 330 | |
| 331 | - *read-only-rootfs:* Creates an image whose root filesystem is |
| 332 | read-only. See the |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 333 | ":ref:`dev-manual/read-only-rootfs:creating a read-only root filesystem`" |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 334 | section in the Yocto Project Development Tasks Manual for more |
| 335 | information. |
| 336 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 337 | - *read-only-rootfs-delayed-postinsts:* when specified in conjunction |
| 338 | with ``read-only-rootfs``, specifies that post-install scripts are |
| 339 | still permitted (this assumes that the root filesystem will be made |
| 340 | writeable for the first boot; this feature does not do anything to |
| 341 | ensure that - it just disables the check for post-install scripts.) |
| 342 | |
| 343 | - *serial-autologin-root:* when specified in conjunction with |
| 344 | ``empty-root-password`` will automatically login as root on the |
| 345 | serial console. This of course opens up a security hole if the |
| 346 | serial console is potentially accessible to an attacker, so use |
| 347 | with caution. |
| 348 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 349 | - *splash:* Enables showing a splash screen during boot. By default, |
| 350 | this screen is provided by ``psplash``, which does allow |
| 351 | customization. If you prefer to use an alternative splash screen |
Patrick Williams | b542dec | 2023-06-09 01:26:37 -0500 | [diff] [blame] | 352 | package, you can do so by setting the :term:`SPLASH` variable to a |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 353 | different package name (or names) within the image recipe or at the |
| 354 | distro configuration level. |
| 355 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 356 | - *stateless-rootfs:*: specifies that the image should be created as |
| 357 | stateless - when using ``systemd``, ``systemctl-native`` will not |
| 358 | be run on the image, leaving the image for population at runtime by |
| 359 | systemd. |
| 360 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 361 | - *staticdev-pkgs:* Installs static development packages, which are |
| 362 | static libraries (i.e. ``*.a`` files), for all packages installed in |
| 363 | a given image. |
| 364 | |
| 365 | Some image features are available only when you inherit the |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 366 | :ref:`ref-classes-core-image` class. The current list of |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 367 | these valid features is as follows: |
| 368 | |
| 369 | - *hwcodecs:* Installs hardware acceleration codecs. |
| 370 | |
| 371 | - *nfs-server:* Installs an NFS server. |
| 372 | |
| 373 | - *perf:* Installs profiling tools such as ``perf``, ``systemtap``, and |
| 374 | ``LTTng``. For general information on user-space tools, see the |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 375 | :doc:`/sdk-manual/index` manual. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 376 | |
| 377 | - *ssh-server-dropbear:* Installs the Dropbear minimal SSH server. |
| 378 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 379 | .. note:: |
| 380 | |
| 381 | As of the 4.1 release, the ``ssh-server-dropbear`` feature also |
| 382 | recommends the ``openssh-sftp-server`` package, which by default |
| 383 | will be pulled into the image. This is because recent versions of |
| 384 | the OpenSSH ``scp`` client now use the SFTP protocol, and thus |
| 385 | require an SFTP server to be present to connect to. However, if |
| 386 | you wish to use the Dropbear ssh server `without` the SFTP server |
| 387 | installed, you can either remove ``ssh-server-dropbear`` from |
| 388 | ``IMAGE_FEATURES`` and add ``dropbear`` to :term:`IMAGE_INSTALL` |
| 389 | instead, or alternatively still use the feature but set |
| 390 | :term:`BAD_RECOMMENDATIONS` as follows:: |
| 391 | |
| 392 | BAD_RECOMMENDATIONS += "openssh-sftp-server" |
| 393 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 394 | - *ssh-server-openssh:* Installs the OpenSSH SSH server, which is more |
| 395 | full-featured than Dropbear. Note that if both the OpenSSH SSH server |
| 396 | and the Dropbear minimal SSH server are present in |
Andrew Geissler | 0903674 | 2021-06-25 14:25:14 -0500 | [diff] [blame] | 397 | :term:`IMAGE_FEATURES`, then OpenSSH will take precedence and Dropbear |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 398 | will not be installed. |
| 399 | |
| 400 | - *tools-debug:* Installs debugging tools such as ``strace`` and |
| 401 | ``gdb``. For information on GDB, see the |
Andrew Geissler | 517393d | 2023-01-13 08:55:19 -0600 | [diff] [blame] | 402 | ":ref:`dev-manual/debugging:debugging with the gnu project debugger (gdb) remotely`" section |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 403 | in the Yocto Project Development Tasks Manual. For information on |
Andrew Geissler | 09209ee | 2020-12-13 08:44:15 -0600 | [diff] [blame] | 404 | tracing and profiling, see the :doc:`/profile-manual/index`. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 405 | |
| 406 | - *tools-sdk:* Installs a full SDK that runs on the device. |
| 407 | |
| 408 | - *tools-testapps:* Installs device testing tools (e.g. touchscreen |
| 409 | debugging). |
| 410 | |
Patrick Williams | 975a06f | 2022-10-21 14:42:47 -0500 | [diff] [blame] | 411 | - *weston:* Installs Weston (reference Wayland environment). |
| 412 | |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 413 | - *x11:* Installs the X server. |
| 414 | |
| 415 | - *x11-base:* Installs the X server with a minimal environment. |
| 416 | |
| 417 | - *x11-sato:* Installs the OpenedHand Sato environment. |
| 418 | |
| 419 | .. _ref-features-backfill: |
| 420 | |
| 421 | Feature Backfilling |
| 422 | =================== |
| 423 | |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 424 | Sometimes it is necessary in the OpenEmbedded build system to |
| 425 | add new functionality to :term:`MACHINE_FEATURES` or |
| 426 | :term:`DISTRO_FEATURES`, but at the same time, allow existing |
| 427 | distributions or machine definitions to opt out of such new |
| 428 | features, to retain the same overall level of functionality. |
| 429 | |
| 430 | To make this possible, the OpenEmbedded build system has a mechanism to |
| 431 | automatically "backfill" features into existing distro or machine |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 432 | configurations. You can see the list of features for which this is done |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 433 | by checking the :term:`DISTRO_FEATURES_BACKFILL` and |
| 434 | :term:`MACHINE_FEATURES_BACKFILL` variables in the |
| 435 | ``meta/conf/bitbake.conf`` file. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 436 | |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 437 | These two variables are paired with the |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 438 | :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 439 | and :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` variables |
| 440 | which allow distro or machine configuration maintainers to `consider` any |
| 441 | added feature, and decide when they wish to keep or exclude such feature, |
| 442 | thus preventing the backfilling from happening. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 443 | |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 444 | Here are two examples to illustrate feature backfilling: |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 445 | |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 446 | - *The "pulseaudio" distro feature option*: Previously, PulseAudio support was |
| 447 | enabled within the Qt and GStreamer frameworks. Because of this, the feature |
| 448 | is now backfilled and thus enabled for all distros through the |
| 449 | :term:`DISTRO_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf`` |
| 450 | file. However, if your distro needs to disable the feature, you can do so |
| 451 | without affecting other existing distro configurations that need PulseAudio |
| 452 | support. You do this by adding "pulseaudio" to |
| 453 | :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` in your distro's ``.conf`` |
| 454 | file. So, adding the feature to this variable when it also exists in the |
| 455 | :term:`DISTRO_FEATURES_BACKFILL` variable prevents the build system from |
| 456 | adding the feature to your configuration's :term:`DISTRO_FEATURES`, |
| 457 | effectively disabling the feature for that particular distro. |
Andrew Geissler | c9f7865 | 2020-09-18 14:11:35 -0500 | [diff] [blame] | 458 | |
| 459 | - *The "rtc" machine feature option*: Previously, real time clock (RTC) |
| 460 | support was enabled for all target devices. Because of this, the |
| 461 | feature is backfilled and thus enabled for all machines through the |
Andrew Geissler | fc113ea | 2023-03-31 09:59:46 -0500 | [diff] [blame] | 462 | :term:`MACHINE_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf`` |
| 463 | file. However, if your target device does not have this capability, you can |
| 464 | disable RTC support for your device without affecting other machines |
| 465 | that need RTC support. You do this by adding the "rtc" feature to the |
| 466 | :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` list in your machine's ``.conf`` |
| 467 | file. So, adding the feature to this variable when it also exists in the |
| 468 | :term:`MACHINE_FEATURES_BACKFILL` variable prevents the build system from |
| 469 | adding the feature to your configuration's :term:`MACHINE_FEATURES`, |
| 470 | effectively disabling RTC support for that particular machine. |