123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465 |
- .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
- ********
- Features
- ********
- This chapter provides a reference of shipped machine and distro features
- you can include as part of your image, a reference on image features you
- can select, and a reference on :ref:`ref-features-backfill`.
- Features provide a mechanism for working out which packages should be
- included in the generated images. Distributions can select which
- features they want to support through the :term:`DISTRO_FEATURES` variable,
- which is set or appended to in a distribution's configuration file such
- as ``poky.conf``, ``poky-tiny.conf``, ``poky-altcfg.conf`` and so forth.
- Machine features are set in the :term:`MACHINE_FEATURES` variable, which is
- set in the machine configuration file and specifies the hardware
- features for a given machine.
- These two variables combine to work out which kernel modules, utilities,
- and other packages to include. A given distribution can support a
- selected subset of features so some machine features might not be
- included if the distribution itself does not support them.
- One method you can use to determine which recipes are checking to see if
- a particular feature is contained or not is to ``grep`` through the
- :term:`Metadata` for the feature. Here is an example that
- discovers the recipes whose build is potentially changed based on a
- given feature::
- $ cd poky
- $ git grep 'contains.*MACHINE_FEATURES.*feature'
- .. _ref-features-machine:
- Machine Features
- ================
- The items below are features you can use with
- :term:`MACHINE_FEATURES`. Features do not have a
- one-to-one correspondence to packages, and they can go beyond simply
- controlling the installation of a package or packages. Sometimes a
- feature can influence how certain recipes are built. For example, a
- feature might determine whether a particular configure option is
- specified within the :ref:`ref-tasks-configure` task
- for a particular recipe.
- This feature list only represents features as shipped with the Yocto
- Project metadata:
- - *acpi:* Hardware has ACPI (x86/x86_64 only)
- - *alsa:* Hardware has ALSA audio drivers
- - *bluetooth:* Hardware has integrated BT
- - *efi:* Support for booting through EFI
- - *ext2:* Hardware HDD or Microdrive
- - *keyboard:* Hardware has a keyboard
- - *numa:* Hardware has non-uniform memory access
- - *pcbios:* Support for booting through BIOS
- - *pci:* Hardware has a PCI bus
- - *pcmcia:* Hardware has PCMCIA or CompactFlash sockets
- - *phone:* Mobile phone (voice) support
- - *qemu-usermode:* QEMU can support user-mode emulation for this machine
- - *qvga:* Machine has a QVGA (320x240) display
- - *rtc:* Machine has a Real-Time Clock
- - *screen:* Hardware has a screen
- - *serial:* Hardware has serial support (usually RS232)
- - *touchscreen:* Hardware has a touchscreen
- - *usbgadget:* Hardware is USB gadget device capable
- - *usbhost:* Hardware is USB Host capable
- - *vfat:* FAT file system support
- - *wifi:* Hardware has integrated WiFi
- .. _ref-features-distro:
- Distro Features
- ===============
- The items below are features you can use with
- :term:`DISTRO_FEATURES` to enable features across
- your distribution. Features do not have a one-to-one correspondence to
- packages, and they can go beyond simply controlling the installation of
- a package or packages. In most cases, the presence or absence of a
- feature translates to the appropriate option supplied to the configure
- script during the :ref:`ref-tasks-configure` task for
- the recipes that optionally support the feature. Appropriate options
- must be supplied, and enabling/disabling :term:`PACKAGECONFIG` for the
- concerned packages is one way of supplying such options.
- Some distro features are also machine features. These select features
- make sense to be controlled both at the machine and distribution
- configuration level. See the
- :term:`COMBINED_FEATURES` variable for more
- information.
- .. note::
- :term:`DISTRO_FEATURES` is normally independent of kernel configuration,
- so if a feature specified in :term:`DISTRO_FEATURES` also relies on
- support in the kernel, you will also need to ensure that support is
- enabled in the kernel configuration.
- This list only represents features as shipped with the Yocto Project
- metadata, as extra layers can define their own:
- - *3g:* Include support for cellular data.
- - *acl:* Include :wikipedia:`Access Control List <Access-control_list>` support.
- - *alsa:* Include :wikipedia:`Advanced Linux Sound Architecture <Advanced_Linux_Sound_Architecture>`
- support (OSS compatibility kernel modules installed if available).
- - *api-documentation:* Enables generation of API documentation during
- recipe builds. The resulting documentation is added to SDK tarballs
- when the ``bitbake -c populate_sdk`` command is used. See the
- ":ref:`sdk-manual/appendix-customizing-standard:adding api documentation to the standard sdk`"
- section in the Yocto Project Application Development and the
- Extensible Software Development Kit (eSDK) manual.
- - *bluetooth:* Include bluetooth support (integrated BT only).
- - *cramfs:* Include CramFS support.
- - *debuginfod:* Include support for getting ELF debugging information through
- a :ref:`debuginfod <dev-manual/debugging:using the debuginfod server method>`
- server.
- - *directfb:* Include DirectFB support.
- - *ext2:* Include tools for supporting devices with internal
- HDD/Microdrive for storing files (instead of Flash only devices).
- - *gobject-introspection-data:* Include data to support
- `GObject Introspection <https://gi.readthedocs.io/en/latest/>`__.
- - *ipsec:* Include IPSec support.
- - *ipv4:* Include IPv4 support.
- - *ipv6:* Include IPv6 support.
- - *keyboard:* Include keyboard support (e.g. keymaps will be loaded
- during boot).
- - *minidebuginfo:* Add minimal debug symbols :ref:`(minidebuginfo)<dev-manual/debugging:enabling minidebuginfo>`
- to binary files containing, allowing ``coredumpctl`` and ``gdb`` to show symbolicated stack traces.
- - *multiarch:* Enable building applications with multiple architecture
- support.
- - *ldconfig:* Include support for ldconfig and ``ld.so.conf`` on the
- target.
- - *lto:* Enable `Link-Time Optimisation <https://gcc.gnu.org/wiki/LinkTimeOptimization>`__.
- - *nfc:* Include support for
- `Near Field Communication <https://en.wikipedia.org/wiki/Near-field_communication>`__.
- - *nfs:* Include NFS client support (for mounting NFS exports on
- device).
- - *nls:* Include National Language Support (NLS).
- - *opengl:* Include the Open Graphics Library, which is a
- cross-language, multi-platform application programming interface used
- for rendering two and three-dimensional graphics.
- - *overlayfs:* Include `OverlayFS <https://docs.kernel.org/filesystems/overlayfs.html>`__
- support.
- - *pam:* Include :wikipedia:`Pluggable Authentication Module (PAM) <Pluggable_authentication_module>`
- support.
- - *pci:* Include PCI bus support.
- - *pcmcia:* Include PCMCIA/CompactFlash support.
- - *pni-names:* Enable generation of persistent network interface names, i.e.
- the system tries hard to have the same but unique names for the network
- interfaces even after a reinstall.
- - *polkit:* Include :wikipedia:`Polkit <Polkit>` support.
- - *ppp:* Include PPP dialup support.
- - *ptest:* Enables building the package tests where supported by
- individual recipes. For more information on package tests, see the
- ":ref:`test-manual/ptest:testing packages with ptest`" section
- in the Yocto Project Development Tasks Manual.
- - *pulseaudio:* Include support for
- `PulseAudio <https://www.freedesktop.org/wiki/Software/PulseAudio/>`__.
- - *selinux:* Include support for
- :wikipedia:`Security-Enhanced Linux (SELinux) <Security-Enhanced_Linux>`
- (requires `meta-selinux <https://layers.openembedded.org/layerindex/layer/meta-selinux/>`__).
- - *seccomp:* Enables building applications with
- :wikipedia:`seccomp <Seccomp>` support, to
- allow them to strictly restrict the system calls that they are allowed
- to invoke.
- - *smbfs:* Include SMB networks client support (for mounting
- Samba/Microsoft Windows shares on device).
- - *systemd:* Include support for this ``init`` manager, which is a full
- replacement of for ``init`` with parallel starting of services,
- reduced shell overhead, and other features. This ``init`` manager is
- used by many distributions.
- - *systemd-resolved:* Include support and use ``systemd-resolved`` as the
- main DNS name resolver in ``glibc`` Name Service Switch. This is a DNS
- resolver daemon from ``systemd``.
- - *usbgadget:* Include USB Gadget Device support (for USB
- networking/serial/storage).
- - *usbhost:* Include USB Host support (allows to connect external
- keyboard, mouse, storage, network etc).
- - *usrmerge:* Merges the ``/bin``, ``/sbin``, ``/lib``, and ``/lib64``
- directories into their respective counterparts in the ``/usr``
- directory to provide better package and application compatibility.
- - *vfat:* Include :wikipedia:`FAT filesystem <File_Allocation_Table>`
- support.
- - *vulkan:* Include support for the :wikipedia:`Vulkan API <Vulkan>`.
- - *wayland:* Include the Wayland display server protocol and the
- library that supports it.
- - *wifi:* Include WiFi support (integrated only).
- - *x11:* Include the X server and libraries.
- - *xattr:* Include support for
- :wikipedia:`extended file attributes <Extended_file_attributes>`.
- - *zeroconf:* Include support for
- `zero configuration networking <https://en.wikipedia.org/wiki/Zero-configuration_networking>`__.
- .. _ref-features-image:
- Image Features
- ==============
- The contents of images generated by the OpenEmbedded build system can be
- controlled by the :term:`IMAGE_FEATURES` and
- :term:`EXTRA_IMAGE_FEATURES` variables that
- you typically configure in your image recipes. Through these variables,
- you can add several different predefined packages such as development
- utilities or packages with debug information needed to investigate
- application problems or profile applications.
- The image features available for all images are:
- - *allow-empty-password:* Allows Dropbear and OpenSSH to accept
- logins from accounts having an empty password string.
- - *allow-root-login:* Allows Dropbear and OpenSSH to accept root logins.
- - *dbg-pkgs:* Installs debug symbol packages for all packages installed
- in a given image.
- - *dev-pkgs:* Installs development packages (headers and extra library
- links) for all packages installed in a given image.
- - *doc-pkgs:* Installs documentation packages for all packages
- installed in a given image.
- - *empty-root-password:* This feature can be used if you want to allow root
- login with an empty password. If this feature is not present in
- :term:`IMAGE_FEATURES`, a non-empty password is forced in ``/etc/passwd`` and
- ``/etc/shadow`` if such files exist.
- .. note::
- ``empty-root-password`` doesn't set an empty root password by itself.
- You get an initial empty root password thanks to the
- :oe_git:`base-passwd </openembedded-core/tree/meta/recipes-core/base-passwd/>`
- and :oe_git:`shadow </openembedded-core/tree/meta/recipes-extended/shadow/>`
- recipes, and the presence of ``empty-root-password`` just disables the
- mechanism which forces an non-empty password for the root user.
- - *lic-pkgs:* Installs license packages for all packages installed in a
- given image.
- - *overlayfs-etc:* Configures the ``/etc`` directory to be in ``overlayfs``.
- This allows to store device specific information elsewhere, especially
- if the root filesystem is configured to be read-only.
- - *package-management:* Installs package management tools and preserves
- the package manager database.
- - *post-install-logging:* Enables logging postinstall script runs to
- the ``/var/log/postinstall.log`` file on first boot of the image on
- the target system.
- .. note::
- To make the ``/var/log`` directory on the target persistent, remove the
- ``files/fs-perms-volatile-log.txt`` value from
- :term:`FILESYSTEM_PERMS_TABLES`.
- - *ptest-pkgs:* Installs ptest packages for all ptest-enabled recipes.
- - *read-only-rootfs:* Creates an image whose root filesystem is
- read-only. See the
- ":ref:`dev-manual/read-only-rootfs:creating a read-only root filesystem`"
- section in the Yocto Project Development Tasks Manual for more
- information.
- - *read-only-rootfs-delayed-postinsts:* when specified in conjunction
- with ``read-only-rootfs``, specifies that post-install scripts are
- still permitted (this assumes that the root filesystem will be made
- writeable for the first boot; this feature does not do anything to
- ensure that - it just disables the check for post-install scripts.)
- - *serial-autologin-root:* when specified in conjunction with
- ``empty-root-password`` will automatically login as root on the
- serial console. This of course opens up a security hole if the
- serial console is potentially accessible to an attacker, so use
- with caution.
- - *splash:* Enables showing a splash screen during boot. By default,
- this screen is provided by ``psplash``, which does allow
- customization. If you prefer to use an alternative splash screen
- package, you can do so by setting the :term:`SPLASH` variable to a
- different package name (or names) within the image recipe or at the
- distro configuration level.
- - *stateless-rootfs:*: specifies that the image should be created as
- stateless - when using ``systemd``, ``systemctl-native`` will not
- be run on the image, leaving the image for population at runtime by
- systemd.
- - *staticdev-pkgs:* Installs static development packages, which are
- static libraries (i.e. ``*.a`` files), for all packages installed in
- a given image.
- Some image features are available only when you inherit the
- :ref:`ref-classes-core-image` class. The current list of
- these valid features is as follows:
- - *hwcodecs:* Installs hardware acceleration codecs.
- - *nfs-server:* Installs an NFS server.
- - *perf:* Installs profiling tools such as ``perf``, ``systemtap``, and
- ``LTTng``. For general information on user-space tools, see the
- :doc:`/sdk-manual/index` manual.
- - *ssh-server-dropbear:* Installs the Dropbear minimal SSH server.
- .. note::
- As of the 4.1 release, the ``ssh-server-dropbear`` feature also
- recommends the ``openssh-sftp-server`` package, which by default
- will be pulled into the image. This is because recent versions of
- the OpenSSH ``scp`` client now use the SFTP protocol, and thus
- require an SFTP server to be present to connect to. However, if
- you wish to use the Dropbear ssh server `without` the SFTP server
- installed, you can either remove ``ssh-server-dropbear`` from
- ``IMAGE_FEATURES`` and add ``dropbear`` to :term:`IMAGE_INSTALL`
- instead, or alternatively still use the feature but set
- :term:`BAD_RECOMMENDATIONS` as follows::
- BAD_RECOMMENDATIONS += "openssh-sftp-server"
- - *ssh-server-openssh:* Installs the OpenSSH SSH server, which is more
- full-featured than Dropbear. Note that if both the OpenSSH SSH server
- and the Dropbear minimal SSH server are present in
- :term:`IMAGE_FEATURES`, then OpenSSH will take precedence and Dropbear
- will not be installed.
- - *tools-debug:* Installs debugging tools such as ``strace`` and
- ``gdb``. For information on GDB, see the
- ":ref:`dev-manual/debugging:debugging with the gnu project debugger (gdb) remotely`" section
- in the Yocto Project Development Tasks Manual. For information on
- tracing and profiling, see the :doc:`/profile-manual/index`.
- - *tools-sdk:* Installs a full SDK that runs on the device.
- - *tools-testapps:* Installs device testing tools (e.g. touchscreen
- debugging).
- - *weston:* Installs Weston (reference Wayland environment).
- - *x11:* Installs the X server.
- - *x11-base:* Installs the X server with a minimal environment.
- - *x11-sato:* Installs the OpenedHand Sato environment.
- .. _ref-features-backfill:
- Feature Backfilling
- ===================
- Sometimes it is necessary in the OpenEmbedded build system to
- add new functionality to :term:`MACHINE_FEATURES` or
- :term:`DISTRO_FEATURES`, but at the same time, allow existing
- distributions or machine definitions to opt out of such new
- features, to retain the same overall level of functionality.
- To make this possible, the OpenEmbedded build system has a mechanism to
- automatically "backfill" features into existing distro or machine
- configurations. You can see the list of features for which this is done
- by checking the :term:`DISTRO_FEATURES_BACKFILL` and
- :term:`MACHINE_FEATURES_BACKFILL` variables in the
- ``meta/conf/bitbake.conf`` file.
- These two variables are paired with the
- :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED`
- and :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` variables
- which allow distro or machine configuration maintainers to `consider` any
- added feature, and decide when they wish to keep or exclude such feature,
- thus preventing the backfilling from happening.
- Here are two examples to illustrate feature backfilling:
- - *The "pulseaudio" distro feature option*: Previously, PulseAudio support was
- enabled within the Qt and GStreamer frameworks. Because of this, the feature
- is now backfilled and thus enabled for all distros through the
- :term:`DISTRO_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf``
- file. However, if your distro needs to disable the feature, you can do so
- without affecting other existing distro configurations that need PulseAudio
- support. You do this by adding "pulseaudio" to
- :term:`DISTRO_FEATURES_BACKFILL_CONSIDERED` in your distro's ``.conf``
- file. So, adding the feature to this variable when it also exists in the
- :term:`DISTRO_FEATURES_BACKFILL` variable prevents the build system from
- adding the feature to your configuration's :term:`DISTRO_FEATURES`,
- effectively disabling the feature for that particular distro.
- - *The "rtc" machine feature option*: Previously, real time clock (RTC)
- support was enabled for all target devices. Because of this, the
- feature is backfilled and thus enabled for all machines through the
- :term:`MACHINE_FEATURES_BACKFILL` variable in the ``meta/conf/bitbake.conf``
- file. However, if your target device does not have this capability, you can
- disable RTC support for your device without affecting other machines
- that need RTC support. You do this by adding the "rtc" feature to the
- :term:`MACHINE_FEATURES_BACKFILL_CONSIDERED` list in your machine's ``.conf``
- file. So, adding the feature to this variable when it also exists in the
- :term:`MACHINE_FEATURES_BACKFILL` variable prevents the build system from
- adding the feature to your configuration's :term:`MACHINE_FEATURES`,
- effectively disabling RTC support for that particular machine.
|