<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd"
[<!ENTITY % poky SYSTEM "../poky.ent"> %poky; ] >

<chapter id='ref-features'>
    <title>Features</title>

    <para>
        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 feature backfilling.
    </para>

    <para>
        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
        <filename><link linkend='var-DISTRO_FEATURES'>DISTRO_FEATURES</link></filename>
        variable, which is set or appended to in a distribution's configuration file such as
        <filename>poky.conf</filename>,
        <filename>poky-tiny.conf</filename>,
        <filename>poky-lsb.conf</filename> and so forth.
        Machine features are set in the
        <filename><link linkend='var-MACHINE_FEATURES'>MACHINE_FEATURES</link></filename>
        variable, which is set in the machine configuration file and
        specifies the hardware features for a given machine.
    </para>

    <para>
        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.
    </para>

    <para>
        One method you can use to determine which recipes are checking to see if a
        particular feature is contained or not is to <filename>grep</filename> through
        the <ulink url='&YOCTO_DOCS_DEV_URL;#metadata'>Metadata</ulink>
        for the feature.
        Here is an example that discovers the recipes whose build is potentially
        changed based on a given feature:
        <literallayout class='monospaced'>
     $ cd poky
     $ git grep 'contains.*MACHINE_FEATURES.*<replaceable>feature</replaceable>'
        </literallayout>
    </para>

    <section id='ref-features-machine'>
        <title>Machine Features</title>

        <para>
            The items below are features you can use with
            <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>.
            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
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task for a particular recipe.
        </para>

        <para>
            This feature list only represents features as shipped with the Yocto Project metadata:
            <itemizedlist>
                <listitem><para><emphasis>acpi:</emphasis> Hardware has ACPI (x86/x86_64 only)
                    </para></listitem>
                <listitem><para><emphasis>alsa:</emphasis> Hardware has ALSA audio drivers
                    </para></listitem>
                <listitem><para><emphasis>apm:</emphasis> Hardware uses APM (or APM emulation)
                    </para></listitem>
                <listitem><para><emphasis>bluetooth:</emphasis> Hardware has integrated BT
                    </para></listitem>
                <listitem><para><emphasis>efi:</emphasis> Support for booting through EFI
                    </para></listitem>
                <listitem><para><emphasis>ext2:</emphasis> Hardware HDD or Microdrive
                    </para></listitem>
                <listitem><para><emphasis>irda:</emphasis> Hardware has IrDA support
                    </para></listitem>
                <listitem><para><emphasis>keyboard:</emphasis> Hardware has a keyboard
                    </para></listitem>
                <listitem><para><emphasis>pcbios:</emphasis> Support for booting through BIOS
                    </para></listitem>
                <listitem><para><emphasis>pci:</emphasis> Hardware has a PCI bus
                    </para></listitem>
                <listitem><para><emphasis>pcmcia:</emphasis> Hardware has PCMCIA or CompactFlash sockets
                    </para></listitem>
                <listitem><para><emphasis>phone:</emphasis> Mobile phone (voice) support
                    </para></listitem>
                <listitem><para><emphasis>qvga:</emphasis> Machine has a QVGA (320x240) display
                    </para></listitem>
                <listitem><para><emphasis>rtc:</emphasis> Machine has a Real-Time Clock
                    </para></listitem>
                <listitem><para><emphasis>screen:</emphasis> Hardware has a screen
                    </para></listitem>
                <listitem><para><emphasis>serial:</emphasis> Hardware has serial support (usually RS232)
                    </para></listitem>
                <listitem><para><emphasis>touchscreen:</emphasis> Hardware has a touchscreen
                    </para></listitem>
                <listitem><para><emphasis>usbgadget:</emphasis> Hardware is USB gadget device capable
                    </para></listitem>
                <listitem><para><emphasis>usbhost:</emphasis> Hardware is USB Host capable
                    </para></listitem>
                <listitem><para><emphasis>vfat:</emphasis> FAT file system support
                    </para></listitem>
                <listitem><para><emphasis>wifi:</emphasis> Hardware has integrated WiFi
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='ref-features-distro'>
        <title>Distro Features</title>

        <para>
            The items below are features you can use with
            <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            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
            <link linkend='ref-tasks-configure'><filename>do_configure</filename></link>
            task for the recipes that optionally
            support the feature.
        </para>

        <para>
            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
            <ulink url='&YOCTO_DOCS_REF_URL;#var-COMBINED_FEATURES'><filename>COMBINED_FEATURES</filename></ulink>
            variable for more information.
        </para>

        <para>
            This list only represents features as shipped with the Yocto Project metadata:
            <itemizedlist>
                <listitem><para><emphasis>alsa:</emphasis> Include ALSA support
                    (OSS compatibility kernel modules installed if available).
                    </para></listitem>
                <listitem><para><emphasis>api-documentation:</emphasis>
                    Enables generation of API documentation during recipe
                    builds.
                    The resulting documentation is added to SDK tarballs
                    when the
                    <filename>bitbake -c populate_sdk</filename> command
                    is used.
                    See the
                    "<ulink url='&YOCTO_DOCS_SDK_URL;#adding-api-documentation-to-the-standard-sdk'>Adding API Documentation to the Standard SDK</ulink>"
                    section in the Yocto Project Software Development Kit (SDK)
                    Developer's Guide for more information.
                    </para></listitem>
                <listitem><para><emphasis>bluetooth:</emphasis> Include
                    bluetooth support (integrated BT only).</para></listitem>
                <listitem><para><emphasis>bluez5:</emphasis> Include
                    BlueZ Version 5, which provides core Bluetooth layers and
                    protocols support.
                    <note>
                        The default value for the
                        <link linkend='var-DISTRO_FEATURES'><filename>DISTRO FEATURES</filename></link>
                        variable includes "bluetooth", which causes bluez5
                        to be backfilled in for bluetooth support.
                        If you do not want bluez5 backfilled and would rather
                        use bluez4, you need to use the
                        <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
                        variable as follows:
                        <literallayout class='monospaced'>
     DISTRO_FEATURES_BACKFILL_CONSIDERED = "bluez5"
                        </literallayout>
                        Setting this variable tells the OpenEmbedded build
                        system that you have considered but ruled
                        out using the bluez5 feature and that bluez4 will be
                        used.
                    </note>
                    </para></listitem>
                <listitem><para><emphasis>cramfs:</emphasis> Include CramFS
                    support.</para></listitem>
                <listitem><para><emphasis>directfb:</emphasis>
                    Include DirectFB support.
                    </para></listitem>
                <listitem><para><emphasis>ext2:</emphasis> Include tools for
                    supporting for devices with internal HDD/Microdrive for
                    storing files (instead of Flash only devices).
                    </para></listitem>
                <listitem><para><emphasis>ipsec:</emphasis> Include IPSec
                    support.</para></listitem>
                <listitem><para><emphasis>ipv6:</emphasis> Include IPv6 support.
                    </para></listitem>
                <listitem><para><emphasis>irda:</emphasis> Include IrDA support.
                    </para></listitem>
                <listitem><para><emphasis>keyboard:</emphasis> Include keyboard
                    support (e.g. keymaps will be loaded during boot).
                    </para></listitem>
                <listitem><para><emphasis>nfs:</emphasis> Include NFS client
                    support (for mounting NFS exports on device).
                    </para></listitem>
                <listitem><para><emphasis>opengl:</emphasis>
                    Include the Open Graphics Library, which is a
                    cross-language, multi-platform application programming
                    interface used for rendering two and three-dimensional
                    graphics.</para></listitem>
                <listitem><para><emphasis>pci:</emphasis> Include PCI bus
                    support.</para></listitem>
                <listitem><para><emphasis>pcmcia:</emphasis> Include
                    PCMCIA/CompactFlash support.</para></listitem>
                <listitem><para><emphasis>ppp:</emphasis> Include PPP dialup
                    support.</para></listitem>
                <listitem><para><emphasis>ptest:</emphasis> Enables building
                    the package tests where supported by individual recipes.
                    For more information on package tests, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#testing-packages-with-ptest'>Testing Packages With ptest</ulink>"
                    section in the Yocto Project Development Manual.
                    </para></listitem>
                <listitem><para><emphasis>smbfs:</emphasis> Include SMB networks
                    client support (for mounting Samba/Microsoft Windows shares
                    on device).</para></listitem>
                <listitem><para><emphasis>systemd:</emphasis> Include support
                    for this <filename>init</filename> manager, which is a full
                    replacement of for <filename>init</filename> with parallel
                    starting of services, reduced shell overhead, and other
                    features.
                    This <filename>init</filename> manager is used by many
                    distributions.</para></listitem>
                <listitem><para><emphasis>usbgadget:</emphasis> Include USB
                    Gadget Device support (for USB networking/serial/storage).
                    </para></listitem>
                <listitem><para><emphasis>usbhost:</emphasis> Include USB Host
                    support (allows to connect external keyboard, mouse,
                    storage, network etc).</para></listitem>
                <listitem><para><emphasis>wayland:</emphasis> Include the
                    Wayland display server protocol and the library that
                    supports it.</para></listitem>
                <listitem><para><emphasis>wifi:</emphasis> Include WiFi support
                    (integrated only).</para></listitem>
                <listitem><para><emphasis>x11:</emphasis> Include the X server
                    and libraries.</para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='ref-features-image'>
        <title>Image Features</title>

        <para>
            The contents of images generated by the OpenEmbedded build system
            can be controlled by the
            <link linkend='var-IMAGE_FEATURES'><filename>IMAGE_FEATURES</filename></link>
            and
            <link linkend='var-EXTRA_IMAGE_FEATURES'><filename>EXTRA_IMAGE_FEATURES</filename></link>
            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.
        </para>

        <para>
            The following image features are available for all images:
            <itemizedlist>
                <listitem><para><emphasis>allow-empty-password:</emphasis>
                    Allows Dropbear and OpenSSH to accept root logins
                    and logins from accounts having an empty password string.
                    </para></listitem>
                <listitem><para><emphasis>dbg-pkgs:</emphasis>
                    Installs debug symbol packages for all packages installed
                    in a given image.
                    </para></listitem>
                <listitem><para><emphasis>debug-tweaks:</emphasis>
                    Makes an image suitable for development (e.g.
                    allows root logins without passwords and enables
                    post-installation logging).
                    See the 'allow-empty-password', 'empty-root-password',
                    and 'post-install-logging' features in this list for
                    additional information.
                    </para></listitem>
                <listitem><para><emphasis>dev-pkgs:</emphasis>
                    Installs development packages (headers and extra library
                    links) for all packages installed in a given image.
                    </para></listitem>
                <listitem><para><emphasis>doc-pkgs:</emphasis> Installs
                    documentation packages for all packages installed in a
                    given image.
                    </para></listitem>
                <listitem><para><emphasis>empty-root-password:</emphasis>
                    Sets the root password to an empty string, which allows
                    logins with a blank password.
                    </para></listitem>
                <listitem><para><emphasis>package-management:</emphasis>
                    Installs package management tools and preserves the package
                    manager database.
                    </para></listitem>
                <listitem><para><emphasis>post-install-logging:</emphasis>
                    Enables logging postinstall script runs to
                    the <filename>/var/log/postinstall.log</filename> file
                    on first boot of the image on the target system.
                    </para></listitem>
                <listitem><para><emphasis>ptest-pkgs:</emphasis>
                    Installs ptest packages for all ptest-enabled recipes.
                    </para></listitem>
                <listitem><para><emphasis>read-only-rootfs:</emphasis>
                    Creates an image whose root filesystem is read-only.
                    See the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-read-only-root-filesystem'>Creating a Read-Only Root Filesystem</ulink>"
                    section in the Yocto Project Development Manual for more
                    information.
                    </para></listitem>
                <listitem><para><emphasis>splash:</emphasis>
                    Enables showing a splash screen during boot.
                    By default, this screen is provided by
                    <filename>psplash</filename>, which does allow
                    customization.
                    If you prefer to use an alternative splash screen package,
                    you can do so by setting the <filename>SPLASH</filename>
                    variable to a different package name (or names) within the
                    image recipe or at the distro configuration level.
                    </para></listitem>
                <listitem><para><emphasis>staticdev-pkgs:</emphasis>
                    Installs static development packages, which are
                    static libraries (i.e. <filename>*.a</filename> files), for
                    all packages installed in a given image.
                    </para></listitem>
            </itemizedlist>
        </para>

        <para>
            Some image features are available only when you inherit the
            <link linkend='ref-classes-core-image'><filename>core-image</filename></link>
            class.
            The current list of these valid features is as follows:
            <itemizedlist>
                <listitem><para><emphasis>eclipse-debug:</emphasis> Provides
                    Eclipse remote debugging support.
                    </para></listitem>
                <listitem><para><emphasis>hwcodecs:</emphasis> Installs
                    hardware acceleration codecs.
                    </para></listitem>
                <listitem><para><emphasis>nfs-server:</emphasis>
                    Installs an NFS server.
                    </para></listitem>
                <listitem><para><emphasis>perf:</emphasis>
                    Installs profiling tools such as
                    <filename>perf</filename>, <filename>systemtap</filename>,
                    and <filename>LTTng</filename>.
                    For general information on user-space tools, see the
                    <ulink url='&YOCTO_DOCS_SDK_URL;#sdk-manual'>Yocto Project Software Development Kit (SDK) Developer's Guide</ulink>.
                    </para></listitem>
                <listitem><para><emphasis>ssh-server-dropbear:</emphasis>
                    Installs the Dropbear minimal SSH server.
                    </para></listitem>
                <listitem><para><emphasis>ssh-server-openssh:</emphasis>
                    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
                    <filename>IMAGE_FEATURES</filename>, then OpenSSH will take
                    precedence and Dropbear will not be installed.
                    </para></listitem>
                <listitem><para><emphasis>tools-debug:</emphasis>
                    Installs debugging tools such as
                    <filename>strace</filename> and <filename>gdb</filename>.
                    For information on GDB, see the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#platdev-gdb-remotedebug'>Debugging With the GNU Project Debugger (GDB) Remotely</ulink>"
                    section in the Yocto Project Development Manual.
                    For information on tracing and profiling, see the
                    <ulink url='&YOCTO_DOCS_PROF_URL;'>Yocto Project Profiling and Tracing Manual</ulink>.
                    </para></listitem>
                <listitem><para><emphasis>tools-sdk:</emphasis>
                    Installs a full SDK that runs on the device.
                    </para></listitem>
                <listitem><para><emphasis>tools-testapps:</emphasis>
                    Installs device testing tools (e.g. touchscreen debugging).
                    </para></listitem>
                <listitem><para><emphasis>x11:</emphasis>
                    Installs the X server.
                    </para></listitem>
                <listitem><para><emphasis>x11-base:</emphasis>
                    Installs the X server with a minimal environment.
                    </para></listitem>
                <listitem><para><emphasis>x11-sato:</emphasis>
                    Installs the OpenedHand Sato environment.
                    </para></listitem>
            </itemizedlist>
        </para>

    </section>

    <section id='ref-features-backfill'>
        <title>Feature Backfilling</title>

        <para>
            Sometimes it is necessary in the OpenEmbedded build system to extend
            <link linkend='var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></link>
            or <link linkend='var-DISTRO_FEATURES'><filename>DISTRO_FEATURES</filename></link>
            to control functionality that was previously enabled and not able
            to be disabled.
            For these cases, we need to add an
            additional feature item to appear in one of these variables,
            but we do not want to force developers who have existing values
            of the variables in their configuration to add the new feature
            in order to retain the same overall level of functionality.
            Thus, the OpenEmbedded build system has a mechanism to
            automatically "backfill" these added features into existing
            distro or machine configurations.
            You can see the list of features for which this is done by
            finding the
            <link linkend='var-DISTRO_FEATURES_BACKFILL'><filename>DISTRO_FEATURES_BACKFILL</filename></link>
            and <link linkend='var-MACHINE_FEATURES_BACKFILL'><filename>MACHINE_FEATURES_BACKFILL</filename></link>
            variables in the <filename>meta/conf/bitbake.conf</filename> file.
        </para>

        <para>
            Because such features are backfilled by default into all
            configurations as described in the previous paragraph, developers
            who wish to disable the new features need to be able to selectively
            prevent the backfilling from occurring.
            They can do this by adding the undesired feature or features to the
            <link linkend='var-DISTRO_FEATURES_BACKFILL_CONSIDERED'><filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename></link>
            or <link linkend='var-MACHINE_FEATURES_BACKFILL_CONSIDERED'><filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename></link>
            variables for distro features and machine features respectively.
        </para>

        <para>
            Here are two examples to help illustrate feature backfilling:
            <itemizedlist>
                <listitem><para><emphasis>The "pulseaudio" distro feature option</emphasis>:
                    Previously, PulseAudio support was enabled within the Qt and
                    GStreamer frameworks.
                    Because of this, the feature is backfilled and thus
                    enabled for all distros through the
                    <filename>DISTRO_FEATURES_BACKFILL</filename>
                    variable in the <filename>meta/conf/bitbake.conf</filename> file.
                    However, your distro needs to disable the feature.
                    You can disable the feature without affecting
                    other existing distro configurations that need PulseAudio support
                    by adding "pulseaudio" to
                    <filename>DISTRO_FEATURES_BACKFILL_CONSIDERED</filename>
                    in your distro's <filename>.conf</filename> file.
                    Adding the feature to this variable when it also
                    exists in the <filename>DISTRO_FEATURES_BACKFILL</filename>
                    variable prevents the build system from adding the feature to
                    your configuration's <filename>DISTRO_FEATURES</filename>, effectively disabling
                    the feature for that particular distro.</para></listitem>
                <listitem><para><emphasis>The "rtc" machine feature option</emphasis>:
                    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 <filename>MACHINE_FEATURES_BACKFILL</filename>
                    variable in the <filename>meta/conf/bitbake.conf</filename> file.
                    However, your target device does not have this capability.
                    You can disable RTC support for your device without
                    affecting other machines that need RTC support
                    by adding the feature to your machine's
                    <filename>MACHINE_FEATURES_BACKFILL_CONSIDERED</filename>
                    list in the machine's <filename>.conf</filename> file.
                    Adding the feature to this variable when it also
                    exists in the <filename>MACHINE_FEATURES_BACKFILL</filename>
                    variable prevents the build system from adding the feature to
                    your configuration's <filename>MACHINE_FEATURES</filename>, effectively
                    disabling RTC support for that particular machine.</para></listitem>
            </itemizedlist>
        </para>
    </section>
</chapter>

<!--
vim: expandtab tw=80 ts=4 spell spelllang=en_gb
-->
