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