<!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='bsp'>

<title>Board Support Packages (BSP) - Developer's Guide</title>

<para>
    A Board Support Package (BSP) is a collection of information that
    defines how to support a particular hardware device, set of devices, or
    hardware platform.
    The BSP includes information about the hardware features
    present on the device and kernel configuration information along with any
    additional hardware drivers required.
    The BSP also lists any additional software
    components required in addition to a generic Linux software stack for both
    essential and optional platform features.
</para>

<para>
    This guide presents information about BSP Layers, defines a structure for components
    so that BSPs follow a commonly understood layout, discusses how to customize
    a recipe for a BSP, addresses BSP licensing, and provides information that
    shows you how to create a
    <link linkend='bsp-layers'>BSP Layer</link> using the
    <link linkend='creating-a-new-bsp-layer-using-the-bitbake-layers-script'><filename>bitbake-layers</filename></link>
    tool.
</para>

<section id='bsp-layers'>
    <title>BSP Layers</title>

    <para>
        A BSP consists of a file structure inside a base directory.
        Collectively, you can think of the base directory, its file structure,
        and the contents as a BSP Layer.
        Although not a strict requirement, BSP layers in the Yocto Project
        use the following well-established naming convention:
        <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>
        </literallayout>
        The string "meta-" is prepended to the machine or platform name, which is
        <replaceable>bsp_root_name</replaceable> in the above form.
        <note><title>Tip</title>
            Because the BSP layer naming convention is well-established,
            it is advisable to follow it when creating layers.
            Technically speaking, a BSP layer name does not need to
            start with <filename>meta-</filename>.
            However, various scripts and tools in the Yocto Project
            development environment assume this convention.
        </note>
    </para>

    <para>
        To help understand the BSP layer concept, consider the BSPs that the
        Yocto Project supports and provides with each release.
        You can see the layers in the
        <ulink url='&YOCTO_DOCS_OM_URL;#yocto-project-repositories'>Yocto Project Source Repositories</ulink>
        through a web interface at
        <ulink url='&YOCTO_GIT_URL;'></ulink>.
        If you go to that interface, you will find a list of repositories
        under "Yocto Metadata Layers".
        <note>
            Layers that are no longer actively supported as part of the
            Yocto Project appear under the heading "Yocto Metadata Layer
            Archive."
        </note>
        Each repository is a BSP layer supported by the Yocto Project
        (e.g. <filename>meta-raspberrypi</filename> and
        <filename>meta-intel</filename>).
        Each of these layers is a repository unto itself and clicking on a
        layer reveals information that includes two links from which you can choose
        to set up a clone of the layer's repository on your local host system.
        Here is an example that clones the Raspberry Pi BSP layer:
        <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/meta-raspberrypi
        </literallayout>
    </para>

    <para>
        In addition to BSP layers, the
        <filename>meta-yocto-bsp</filename> layer is part of the
        shipped <filename>poky</filename> repository.
        The <filename>meta-yocto-bsp</filename> layer maintains several
        BSPs such as the Beaglebone, EdgeRouter, and generic versions of
        both 32-bit and 64-bit IA machines.
    </para>

    <para>
        For information on the BSP development workflow, see the
        "<link linkend='developing-a-board-support-package-bsp'>Developing a Board Support Package (BSP)</link>"
        section.
        For more information on how to set up a local copy of source files
        from a Git repository, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#locating-yocto-project-source-files'>Locating Yocto Project Source Files</ulink>"
        section in the Yocto Project Development Tasks Manual.
    </para>

    <para>
        The layer's base directory
        (<filename>meta-<replaceable>bsp_root_name</replaceable></filename>)
        is the root directory of the BSP Layer.
        This directory is what you add to the
        <ulink url='&YOCTO_DOCS_REF_URL;#var-BBLAYERS'><filename>BBLAYERS</filename></ulink>
        variable in the <filename>conf/bblayers.conf</filename> file found in the
        <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
        which is established after you run the OpenEmbedded build environment
        setup script (i.e.
        <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>).
        Adding the root directory allows the
        <ulink url='&YOCTO_DOCS_REF_URL;#build-system-term'>OpenEmbedded build system</ulink>
        to recognize the BSP layer and from it build an image.
        Here is an example:
        <literallayout class='monospaced'>
     BBLAYERS ?= " \
       /usr/local/src/yocto/meta \
       /usr/local/src/yocto/meta-poky \
       /usr/local/src/yocto/meta-yocto-bsp \
       /usr/local/src/yocto/meta-mylayer \
       "
        </literallayout>
        <note><title>Tip</title>
            Ordering and
            <ulink url='&YOCTO_DOCS_REF_URL;#var-BBFILE_PRIORITY'><filename>BBFILE_PRIORITY</filename></ulink>
            for the layers listed in <filename>BBLAYERS</filename>
            matter.
            For example, if multiple layers define a machine
            configuration, the OpenEmbedded build system uses
            the last layer searched given similar layer
            priorities.
            The build system works from the top-down through
            the layers listed in <filename>BBLAYERS</filename>.
        </note>
    </para>

    <para>
        Some BSPs require or depend on additional layers
        beyond the BSP's root layer in order to be functional.
        In this case, you need to specify these layers in the
        <filename>README</filename> "Dependencies" section of the
        BSP's root layer.
        Additionally, if any build instructions exist for the
        BSP, you must add them to the "Dependencies" section.
    </para>

    <para>
        Some layers function as a layer to hold other BSP layers.
        These layers are knows as
        "<ulink url='&YOCTO_DOCS_REF_URL;#term-container-layer'>container layers</ulink>".
        An example of this type of layer is the
        <filename>meta-intel</filename> layer.
        This layer contains BSP layers for the Intel-core2-32
        <trademark class='registered'>Intel</trademark> Common Core
        (Intel-core2-32) and the Intel-corei7-64
        <trademark class='registered'>Intel</trademark> Common Core
        (Intel-corei7-64).
        the <filename>meta-intel</filename> layer also contains
        the <filename>common/</filename> directory, which contains
        common content across those layers.
    </para>

    <para>
        For more information on layers, see the
        "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
        section of the Yocto Project Development Tasks Manual.
    </para>
</section>

<section id='preparing-your-build-host-to-work-with-bsp-layers'>
    <title>Preparing Your Build Host to Work With BSP Layers</title>

    <para>
        This section describes how to get your build host ready
        to work with BSP layers.
        Once you have the host set up, you can create the layer
        as described in the
        "<link linkend='creating-a-new-bsp-layer-using-the-bitbake-layers-script'>Creating a new BSP Layer Using the <filename>bitbake-layers</filename> Script</link>"
        section.
        <note>
            For structural information on BSPs, see the
            <link linkend='bsp-filelayout'>Example Filesystem Layout</link>
            section.
        </note>
        <orderedlist>
            <listitem><para>
                <emphasis>Set Up the Build Environment:</emphasis>
                Be sure you are set up to use BitBake in a shell.
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Preparing the Build Host</ulink>"
                section in the Yocto Project Development Tasks Manual for information
                on how to get a build host ready that is either a native
                Linux machine or a machine that uses CROPS.
                </para></listitem>
            <listitem><para>
                <emphasis>Clone the <filename>poky</filename> Repository:</emphasis>
                You need to have a local copy of the Yocto Project
                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
                (i.e. a local <filename>poky</filename> repository).
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#cloning-the-poky-repository'>Cloning the <filename>poky</filename> Repository</ulink>"
                and possibly the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out by Branch in Poky</ulink>"
                or
                "<ulink url='&YOCTO_DOCS_DEV_URL;#checkout-out-by-tag-in-poky'>Checking Out by Tag in Poky</ulink>"
                sections all in the Yocto Project Development Tasks Manual for
                information on how to clone the <filename>poky</filename>
                repository and check out the appropriate branch for your work.
                </para></listitem>
            <listitem><para>
                <emphasis>Determine the BSP Layer You Want:</emphasis>
                The Yocto Project supports many BSPs, which are maintained in
                their own layers or in layers designed to contain several
                BSPs.
                To get an idea of machine support through BSP layers, you can
                look at the
                <ulink url='&YOCTO_RELEASE_DL_URL;/machines'>index of machines</ulink>
                for the release.
                </para></listitem>
            <listitem><para>
                <emphasis>Optionally Clone the
                <filename>meta-intel</filename> BSP Layer:</emphasis>
                If your hardware is based on current Intel CPUs and devices,
                you can leverage this BSP layer.
                For details on the <filename>meta-intel</filename> BSP layer,
                see the layer's
                <ulink url='http://git.yoctoproject.org/cgit/cgit.cgi/meta-intel/tree/README'><filename>README</filename></ulink>
                file.
                <orderedlist>
                    <listitem><para>
                        <emphasis>Navigate to Your Source Directory:</emphasis>
                        Typically, you set up the
                        <filename>meta-intel</filename> Git repository
                        inside the
                        <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
                        (e.g. <filename>poky</filename>).
                        <literallayout class='monospaced'>
     $ cd /home/<replaceable>you</replaceable>/poky
                        </literallayout>
                        </para></listitem>
                    <listitem><para>
                        <emphasis>Clone the Layer:</emphasis>
                        <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/meta-intel.git
     Cloning into 'meta-intel'...
     remote: Counting objects: 15585, done.
     remote: Compressing objects: 100% (5056/5056), done.
     remote: Total 15585 (delta 9123), reused 15329 (delta 8867)
     Receiving objects: 100% (15585/15585), 4.51 MiB | 3.19 MiB/s, done.
     Resolving deltas: 100% (9123/9123), done.
     Checking connectivity... done.
                        </literallayout>
                        </para></listitem>
                    <listitem><para>
                        <emphasis>Check Out the Proper Branch:</emphasis>
                        The branch you check out for
                        <filename>meta-intel</filename> must match the same
                        branch you are using for the Yocto Project release
                        (e.g. &DISTRO_NAME_NO_CAP;):
                        <literallayout class='monospaced'>
     $ cd meta-intel
     $ git checkout -b &DISTRO_NAME_NO_CAP; remotes/origin/&DISTRO_NAME_NO_CAP;
     Branch &DISTRO_NAME_NO_CAP; set up to track remote branch &DISTRO_NAME_NO_CAP; from origin.
     Switched to a new branch '&DISTRO_NAME_NO_CAP;'
                        </literallayout>
                        <note>
                            To see the available branch names in a cloned repository,
                            use the <filename>git branch -al</filename> command.
                            See the
                            "<ulink url='&YOCTO_DOCS_DEV_URL;#checking-out-by-branch-in-poky'>Checking Out By Branch in Poky</ulink>"
                            section in the Yocto Project Development Tasks
                            Manual for more information.
                        </note>
                        </para></listitem>
                </orderedlist>
                </para></listitem>
            <listitem><para>
                <emphasis>Optionally Set Up an Alternative BSP Layer:</emphasis>
                If your hardware can be more closely leveraged to an
                existing BSP not within the <filename>meta-intel</filename>
                BSP layer, you can clone that BSP layer.</para>

                <para>The process is identical to the process used for the
                <filename>meta-intel</filename> layer except for the layer's
                name.
                For example, if you determine that your hardware most
                closely matches the <filename>meta-raspberrypi</filename>,
                clone that layer:
                <literallayout class='monospaced'>
     $ git clone git://git.yoctoproject.org/meta-raspberrypi
     Cloning into 'meta-raspberrypi'...
     remote: Counting objects: 4743, done.
     remote: Compressing objects: 100% (2185/2185), done.
     remote: Total 4743 (delta 2447), reused 4496 (delta 2258)
     Receiving objects: 100% (4743/4743), 1.18 MiB | 0 bytes/s, done.
     Resolving deltas: 100% (2447/2447), done.
     Checking connectivity... done.
                </literallayout>
                </para></listitem>
            <listitem><para>
                <emphasis>Initialize the Build Environment:</emphasis>
                While in the root directory of the Source Directory (i.e.
                <filename>poky</filename>), run the
                <ulink url='&YOCTO_DOCS_REF_URL;#structure-core-script'><filename>&OE_INIT_FILE;</filename></ulink>
                environment setup script to define the OpenEmbedded
                build environment on your build host.
                <literallayout class='monospaced'>
     $ source &OE_INIT_FILE;
                </literallayout>
                Among other things, the script creates the
                <ulink url='&YOCTO_DOCS_REF_URL;#build-directory'>Build Directory</ulink>,
                which is <filename>build</filename> in this case
                and is located in the
                <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
                After the script runs, your current working directory
                is set to the <filename>build</filename> directory.
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id="bsp-filelayout">
    <title>Example Filesystem Layout</title>

    <para>
        Defining a common BSP directory structure allows
        end-users to understand and become familiar with
        that standard.
        A common format also encourages standardization
        of software support for hardware.
    </para>

    <para>
        The proposed form described in this section does
        have elements that are specific to the OpenEmbedded
        build system.
        It is intended that developers can use this structure
        with other build systems besides the OpenEmbedded build
        system.
        It is also intended that it will be be simple to extract
        information and convert it to other formats if required.
        The OpenEmbedded build system, through its standard
        <ulink url='&YOCTO_DOCS_OM_URL;#the-yocto-project-layer-model'>layers mechanism</ulink>,
        can directly accept the format described as a layer.
        The BSP layer captures all the hardware-specific details
        in one place using a standard format, which is useful
        for any person wishing to use the hardware platform
        regardless of the build system they are using.
    </para>

    <para>
        The BSP specification does not include a build system
        or other tools - the specification is concerned with
        the hardware-specific components only.
        At the end-distribution point, you can ship the BSP
        layer combined with a build system and other tools.
        Realize that it is important to maintain the distinction
        that the BSP layer, a build system, and tools are
        separate components that could to be combined in
        certain end products.
    </para>

    <para>
        Before looking at the common form for the file structure
        inside a BSP Layer, you should be aware that some
        requirements do exist in order for a BSP layer to
        be considered compliant with the Yocto Project.
        For that list of requirements, see the
        "<link linkend='released-bsp-requirements'>Released BSP Requirements</link>"
        section.
    </para>

    <para>
        Below is the common form for the file structure
        inside a BSP Layer.
        While this basic form represents the standard,
        realize that the actual file structures for specific
        BSPs could differ.
        <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/
     meta-<replaceable>bsp_root_name</replaceable>/<replaceable>bsp_license_file</replaceable>
     meta-<replaceable>bsp_root_name</replaceable>/README
     meta-<replaceable>bsp_root_name</replaceable>/README.sources
     meta-<replaceable>bsp_root_name</replaceable>/binary/<replaceable>bootable_images</replaceable>
     meta-<replaceable>bsp_root_name</replaceable>/conf/layer.conf
     meta-<replaceable>bsp_root_name</replaceable>/conf/machine/*.conf
     meta-<replaceable>bsp_root_name</replaceable>/recipes-bsp/*
     meta-<replaceable>bsp_root_name</replaceable>/recipes-core/*
     meta-<replaceable>bsp_root_name</replaceable>/recipes-graphics/*
     meta-<replaceable>bsp_root_name</replaceable>/recipes-kernel/linux/linux-yocto_<replaceable>kernel_rev</replaceable>.bbappend
        </literallayout>
    </para>

    <para>
        Below is an example of the Raspberry Pi BSP
        layer that is available from the
        <ulink url='&YOCTO_GIT_URL;'>Source Respositories</ulink>:
        <literallayout class='monospaced'>
     meta-raspberrypi/COPYING.MIT
     meta-raspberrypi/README.md
     meta-raspberrypi/classes
     meta-raspberrypi/classes/sdcard_image-rpi.bbclass
     meta-raspberrypi/conf/
     meta-raspberrypi/conf/layer.conf
     meta-raspberrypi/conf/machine/
     meta-raspberrypi/conf/machine/raspberrypi-cm.conf
     meta-raspberrypi/conf/machine/raspberrypi-cm3.conf
     meta-raspberrypi/conf/machine/raspberrypi.conf
     meta-raspberrypi/conf/machine/raspberrypi0-wifi.conf
     meta-raspberrypi/conf/machine/raspberrypi0.conf
     meta-raspberrypi/conf/machine/raspberrypi2.conf
     meta-raspberrypi/conf/machine/raspberrypi3-64.conf
     meta-raspberrypi/conf/machine/raspberrypi3.conf
     meta-raspberrypi/conf/machine/include
     meta-raspberrypi/conf/machine/include/rpi-base.inc
     meta-raspberrypi/conf/machine/include/rpi-default-providers.inc
     meta-raspberrypi/conf/machine/include/rpi-default-settings.inc
     meta-raspberrypi/conf/machine/include/rpi-default-versions.inc
     meta-raspberrypi/conf/machine/include/tune-arm1176jzf-s.inc
     meta-raspberrypi/docs
     meta-raspberrypi/docs/Makefile
     meta-raspberrypi/docs/conf.py
     meta-raspberrypi/docs/contributing.md
     meta-raspberrypi/docs/extra-apps.md
     meta-raspberrypi/docs/extra-build-config.md
     meta-raspberrypi/docs/index.rst
     meta-raspberrypi/docs/layer-contents.md
     meta-raspberrypi/docs/readme.md
     meta-raspberrypi/files
     meta-raspberrypi/files/custom-licenses
     meta-raspberrypi/files/custom-licenses/Broadcom
     meta-raspberrypi/recipes-bsp
     meta-raspberrypi/recipes-bsp/bootfiles
     meta-raspberrypi/recipes-bsp/bootfiles/bcm2835-bootfiles.bb
     meta-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bb
     meta-raspberrypi/recipes-bsp/common
     meta-raspberrypi/recipes-bsp/common/firmware.inc
     meta-raspberrypi/recipes-bsp/formfactor
     meta-raspberrypi/recipes-bsp/formfactor/formfactor
     meta-raspberrypi/recipes-bsp/formfactor/formfactor/raspberrypi
     meta-raspberrypi/recipes-bsp/formfactor/formfactor/raspberrypi/machconfig
     meta-raspberrypi/recipes-bsp/formfactor/formfactor_0.0.bbappend
     meta-raspberrypi/recipes-bsp/rpi-u-boot-src
     meta-raspberrypi/recipes-bsp/rpi-u-boot-src/files
     meta-raspberrypi/recipes-bsp/rpi-u-boot-src/files/boot.cmd.in
     meta-raspberrypi/recipes-bsp/rpi-u-boot-src/rpi-u-boot-scr.bb
     meta-raspberrypi/recipes-bsp/u-boot
     meta-raspberrypi/recipes-bsp/u-boot/u-boot
     meta-raspberrypi/recipes-bsp/u-boot/u-boot/*.patch
     meta-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend
     meta-raspberrypi/recipes-connectivity
     meta-raspberrypi/recipes-connectivity/bluez5
     meta-raspberrypi/recipes-connectivity/bluez5/bluez5
     meta-raspberrypi/recipes-connectivity/bluez5/bluez5/*.patch
     meta-raspberrypi/recipes-connectivity/bluez5/bluez5/BCM43430A1.hcd
     meta-raspberrypi/recipes-connectivity/bluez5/bluez5brcm43438.service
     meta-raspberrypi/recipes-connectivity/bluez5/bluez5_%.bbappend
     meta-raspberrypi/recipes-core
     meta-raspberrypi/recipes-core/images
     meta-raspberrypi/recipes-core/images/rpi-basic-image.bb
     meta-raspberrypi/recipes-core/images/rpi-hwup-image.bb
     meta-raspberrypi/recipes-core/images/rpi-test-image.bb
     meta-raspberrypi/recipes-core/packagegroups
     meta-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bb
     meta-raspberrypi/recipes-core/psplash
     meta-raspberrypi/recipes-core/psplash/files
     meta-raspberrypi/recipes-core/psplash/files/psplash-raspberrypi-img.h
     meta-raspberrypi/recipes-core/psplash/psplash_git.bbappend
     meta-raspberrypi/recipes-core/udev
     meta-raspberrypi/recipes-core/udev/udev-rules-rpi
     meta-raspberrypi/recipes-core/udev/udev-rules-rpi/99-com.rules
     meta-raspberrypi/recipes-core/udev/udev-rules-rpi.bb
     meta-raspberrypi/recipes-devtools
     meta-raspberrypi/recipes-devtools/bcm2835
     meta-raspberrypi/recipes-devtools/bcm2835/bcm2835_1.52.bb
     meta-raspberrypi/recipes-devtools/pi-blaster
     meta-raspberrypi/recipes-devtools/pi-blaster/files
     meta-raspberrypi/recipes-devtools/pi-blaster/files/*.patch
     meta-raspberrypi/recipes-devtools/pi-blaster/pi-blaster_git.bb
     meta-raspberrypi/recipes-devtools/python
     meta-raspberrypi/recipes-devtools/python/python-rtimu
     meta-raspberrypi/recipes-devtools/python/python-rtimu/*.patch
     meta-raspberrypi/recipes-devtools/python/python-rtimu_git.bb
     meta-raspberrypi/recipes-devtools/python/python-sense-hat_2.2.0.bb
     meta-raspberrypi/recipes-devtools/python/rpi-gpio
     meta-raspberrypi/recipes-devtools/python/rpi-gpio/*.patch
     meta-raspberrypi/recipes-devtools/python/rpi-gpio_0.6.3.bb
     meta-raspberrypi/recipes-devtools/python/rpio
     meta-raspberrypi/recipes-devtools/python/rpio/*.patch
     meta-raspberrypi/recipes-devtools/python/rpio_0.10.0.bb
     meta-raspberrypi/recipes-devtools/wiringPi
     meta-raspberrypi/recipes-devtools/wiringPi/files
     meta-raspberrypi/recipes-devtools/wiringPi/files/*.patch
     meta-raspberrypi/recipes-devtools/wiringPi/wiringpi_git.bb
     meta-raspberrypi/recipes-graphics
     meta-raspberrypi/recipes-graphics/eglinfo
     meta-raspberrypi/recipes-graphics/eglinfo/eglinfo-fb_%.bbappend
     meta-raspberrypi/recipes-graphics/eglinfo/eglinfo-x11_%.bbappend
     meta-raspberrypi/recipes-graphics/mesa
     meta-raspberrypi/recipes-graphics/mesa/mesa-gl_%.bbappend
     meta-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend
     meta-raspberrypi/recipes-graphics/userland
     meta-raspberrypi/recipes-graphics/userland/userland
     meta-raspberrypi/recipes-graphics/userland/userland/*.patch
     meta-raspberrypi/recipes-graphics/userland/userland_git.bb
     meta-raspberrypi/recipes-graphics/vc-graphics
     meta-raspberrypi/recipes-graphics/vc-graphics/files
     meta-raspberrypi/recipes-graphics/vc-graphics/files/egl.pc
     meta-raspberrypi/recipes-graphics/vc-graphics/files/vchiq.sh
     meta-raspberrypi/recipes-graphics/vc-graphics/vc-graphics-hardfp.bb
     meta-raspberrypi/recipes-graphics/vc-graphics/vc-graphics.bb
     meta-raspberrypi/recipes-graphics/vc-graphics/vc-graphics.inc
     meta-raspberrypi/recipes-graphics/wayland
     meta-raspberrypi/recipes-graphics/wayland/weston_%.bbappend
     meta-raspberrypi/recipes-graphics/xorg-xserver
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi/xorg.conf
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi/xorg.conf.d
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi/xorg.conf.d/10-evdev.conf
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi/xorg.conf.d/98-pitft.conf
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config/rpi/xorg.conf.d/99-calibration.conf
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xf86-config_0.1.bbappend
     meta-raspberrypi/recipes-graphics/xorg-xserver/xserver-xorg_%.bbappend
     meta-raspberrypi/recipes-kernel
     meta-raspberrypi/recipes-kernel/linux-firmware
     meta-raspberrypi/recipes-kernel/linux-firmware/files
     meta-raspberrypi/recipes-kernel/linux-firmware/files/brcmfmac43430-sdio.bin
     meta-raspberrypi/recipes-kernel/linux-firmware/files/brcfmac43430-sdio.txt
     meta-raspberrypi/recipes-kernel/linux-firmware/linux-firmware_%.bbappend
     meta-raspberrypi/recipes-kernel/linux
     meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi-dev.bb
     meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi.inc
     meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.14.bb
     meta-raspberrypi/recipes-kernel/linux/linux-raspberrypi_4.9.bb
     meta-raspberrypi/recipes-multimedia
     meta-raspberrypi/recipes-multimedia/gstreamer
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/*.patch
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_%.bbappend
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_%.bbappend
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.12
     meta-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx-1.12/*.patch
     meta-raspberrypi/recipes-multimedia/omxplayer
     meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer
     meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer/*.patch
     meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb
     meta-raspberrypi/recipes-multimedia/x264
     meta-raspberrypi/recipes-multimedia/x264/x264_git.bbappend
     meta-raspberrypi/wic
     meta-raspberrypi/wic/sdimage-raspberrypi.wks
        </literallayout>
    </para>

    <para>
        The following sections describe each part of the proposed
        BSP format.
    </para>

    <section id="bsp-filelayout-license">
        <title>License Files</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/<replaceable>bsp_license_file</replaceable>
            </literallayout>
        </para>

        <para>
            These optional files satisfy licensing requirements
            for the BSP.
            The type or types of files here can vary depending
            on the licensing requirements.
            For example, in the Raspberry Pi BSP all licensing
            requirements are handled with the
            <filename>COPYING.MIT</filename> file.
        </para>

        <para>
            Licensing files can be MIT, BSD, GPLv*, and so forth.
            These files are recommended for the BSP but are
            optional and totally up to the BSP developer.
            For information on how to maintain license
            compliance, see the
            "<ulink url='&YOCTO_DOCS_DEV_URL;#maintaining-open-source-license-compliance-during-your-products-lifecycle'>Maintaining Open Source License Compliance During Your Product's Lifecycle</ulink>"
            section in the Yocto Project Development Tasks
            Manual.
        </para>
    </section>

    <section id="bsp-filelayout-readme">
        <title>README File</title>

        <para>
            You can find this file in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/README
            </literallayout>
        </para>

        <para>
            This file provides information on how to boot the live
            images that are optionally included in the
            <filename>binary/</filename> directory.
            The <filename>README</filename> file also provides
            information needed for building the image.
        </para>

        <para>
            At a minimum, the <filename>README</filename> file must
            contain a list of dependencies, such as the names of
            any other layers on which the BSP depends and the name of
            the BSP maintainer with his or her contact information.
        </para>
    </section>

    <section id="bsp-filelayout-readme-sources">
        <title>README.sources File</title>

        <para>
            You can find this file in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/README.sources
            </literallayout>
        </para>

        <para>
            This file provides information on where to locate the BSP
            source files used to build the images (if any) that
            reside in
            <filename>meta-<replaceable>bsp_root_name</replaceable>/binary</filename>.
            Images in the <filename>binary</filename> would be images
            released with the BSP.
            The information in the <filename>README.sources</filename>
            file also helps you find the
            <ulink url='&YOCTO_DOCS_REF_URL;#metadata'>Metadata</ulink>
            used to generate the images that ship with the BSP.
            <note>
                If the BSP's <filename>binary</filename> directory is
                missing or the directory has no images, an existing
                <filename>README.sources</filename> file is
                meaningless and usually does not exist.
            </note>
        </para>
    </section>

    <section id="bsp-filelayout-binary">
        <title>Pre-built User Binaries</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/binary/<replaceable>bootable_images</replaceable>
            </literallayout>
        </para>

        <para>
            This optional area contains useful pre-built kernels
            and user-space filesystem images released with the
            BSP that are appropriate to the target system.
            This directory typically contains graphical (e.g. Sato)
            and minimal live images when the BSP tarball has been
            created and made available in the
            <ulink url='&YOCTO_HOME_URL;'>Yocto Project</ulink>
            website.
            You can use these kernels and images to get a system
            running and quickly get started on development tasks.
        </para>

        <para>
            The exact types of binaries present are highly
            hardware-dependent.
            The
            <link linkend='bsp-filelayout-readme'><filename>README</filename></link>
            file should be present in the BSP Layer and it
            explains how to use the images with the target hardware.
            Additionally, the
            <link linkend='bsp-filelayout-readme-sources'><filename>README.sources</filename></link>
            file should be present to locate the sources used to
            build the images and provide information on the
            Metadata.
        </para>
    </section>

    <section id='bsp-filelayout-layer'>
        <title>Layer Configuration File</title>

        <para>
            You can find this file in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/conf/layer.conf
            </literallayout>
        </para>

        <para>
            The <filename>conf/layer.conf</filename> file
            identifies the file structure as a layer,
            identifies the contents of the layer, and
            contains information about how the build system should
            use it.
            Generally, a standard boilerplate file such as the
            following works.
            In the following example, you would replace
            <replaceable>bsp</replaceable> with the actual
            name of the BSP (i.e.
            <replaceable>bsp_root_name</replaceable> from the example
            template).
        </para>

        <para>
            <literallayout class='monospaced'>
     # We have a conf and classes directory, add to BBPATH
     BBPATH .= ":${LAYERDIR}"

     # We have a recipes directory, add to BBFILES
     BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
                 ${LAYERDIR}/recipes-*/*/*.bbappend"

     BBFILE_COLLECTIONS += "<replaceable>bsp</replaceable>"
     BBFILE_PATTERN_<replaceable>bsp</replaceable> = "^${LAYERDIR}/"
     BBFILE_PRIORITY_<replaceable>bsp</replaceable> = "6"

     LAYERDEPENDS_<replaceable>bsp</replaceable> = "intel"
            </literallayout>
        </para>

        <para>
            To illustrate the string substitutions, here are
            the corresponding statements from the Raspberry
            Pi <filename>conf/layer.conf</filename> file:
            <literallayout class='monospaced'>
     # We have a conf and classes directory, append to BBPATH
     BBPATH .= ":${LAYERDIR}"

     # We have a recipes directory containing .bb and .bbappend files, add to BBFILES
     BBFILES += "${LAYERDIR}/recipes*/*/*.bb \
                 ${LAYERDIR}/recipes*/*/*.bbappend"

     BBFILE_COLLECTIONS += "raspberrypi"
     BBFILE_PATTERN_raspberrypi := "^${LAYERDIR}/"
     BBFILE_PRIORITY_raspberrypi = "9"

     # Additional license directories.
     LICENSE_PATH += "${LAYERDIR}/files/custom-licenses"
          .
          .
          .
            </literallayout>
        </para>

        <para>
            This file simply makes
            <ulink url='&YOCTO_DOCS_REF_URL;#bitbake-term'>BitBake</ulink>
            aware of the recipes and configuration directories.
            The file must exist so that the OpenEmbedded build system
            can recognize the BSP.
        </para>
    </section>

    <section id="bsp-filelayout-machine">
        <title>Hardware Configuration Options</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/conf/machine/*.conf
            </literallayout>
        </para>

        <para>
            The machine files bind together all the information
            contained elsewhere in the BSP into a format that
            the build system can understand.
            Each BSP Layer requires at least one machine file.
            If the BSP supports multiple machines, multiple
            machine configuration files can exist.
            These filenames correspond to the values to which
            users have set the
            <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE'><filename>MACHINE</filename></ulink> variable.
        </para>

        <para>
            These files define things such as the kernel package
            to use
            (<ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink>
            of
            <ulink url='&YOCTO_DOCS_DEV_URL;#metadata-virtual-providers'>virtual/kernel</ulink>),
            the hardware drivers to include in different types
            of images, any special software components that are
            needed, any bootloader information, and also any
            special image format requirements.
        </para>

        <para>
            This configuration file could also include a hardware
            "tuning" file that is commonly used to define the
            package architecture and specify optimization flags,
            which are carefully chosen to give best performance
            on a given processor.
        </para>

        <para>
            Tuning files are found in the
            <filename>meta/conf/machine/include</filename>
            directory within the
            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
            For example, many <filename>tune-*</filename> files
            (e.g. <filename>tune-arm1136jf-s.inc</filename>,
            <filename>tun-1586-nlp.inc</filename>, and so forth)
            reside in the
            <filename>poky/meta/conf/machine/include</filename>
            directory.
        </para>

        <para>
            To use an include file, you simply include them in the
            machine configuration file.
            For example, the Raspberry Pi BSP
            <filename>raspberrypi3.conf</filename> contains the
            following statement:
            <literallayout class='monospaced'>
     include conf/machine/include/rpi-base.inc
            </literallayout>
        </para>
    </section>

    <section id='bsp-filelayout-misc-recipes'>
        <title>Miscellaneous BSP-Specific Recipe Files</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/recipes-bsp/*
            </literallayout>
        </para>

        <para>
            This optional directory contains miscellaneous recipe
            files for the BSP.
            Most notably would be the formfactor files.
            For example, in the Raspberry Pi BSP there is the
            <filename>formfactor_0.0.bbappend</filename> file,
            which is an append file used to augment the recipe
            that starts the build.
            Furthermore, there are machine-specific settings used
            during the build that are defined by the
            <filename>machconfig</filename> file further down in
            the directory.
            Here is the <filename>machconfig</filename> file for
            the Raspberry Pi BSP:
            <literallayout class='monospaced'>
     HAVE_TOUCHSCREEN=0
     HAVE_KEYBOARD=1

     DISPLAY_CAN_ROTATE=0
     DISPLAY_ORIENTATION=0
     DISPLAY_DPI=133
            </literallayout>
        </para>

        <note><para>
            If a BSP does not have a formfactor entry, defaults
            are established according to the formfactor
            configuration file that is installed by the main
            formfactor recipe
            <filename>meta/recipes-bsp/formfactor/formfactor_0.0.bb</filename>,
            which is found in the
            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>.
        </para></note>
    </section>

    <section id='bsp-filelayout-recipes-graphics'>
        <title>Display Support Files</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/recipes-graphics/*
            </literallayout>
        </para>

        <para>
            This optional directory contains recipes for the
            BSP if it has special requirements for graphics
            support.
            All files that are needed for the BSP to support
            a display are kept here.
        </para>
    </section>

    <section id='bsp-filelayout-kernel'>
        <title>Linux Kernel Configuration</title>

        <para>
            You can find these files in the BSP Layer at:
            <literallayout class='monospaced'>
     meta-<replaceable>bsp_root_name</replaceable>/recipes-kernel/linux/linux*.bbappend
     meta-<replaceable>bsp_root_name</replaceable>/recipes-kernel/linux/*.bb
            </literallayout>
        </para>

        <para>
            Append files (<filename>*.bbappend</filename>) modify
            the main kernel recipe being used to build the image.
            The <filename>*.bb</filename> files would be a
            developer-supplied kernel recipe.
            This area of the BSP hierarchy can contain both these
            types of files, although in practice, it is likely that
            you would have one or the other.
        </para>

        <para>
            For your BSP, you typically want to use an existing Yocto
            Project kernel recipe found in the
            <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
            at <filename>meta/recipes-kernel/linux</filename>.
            You can append machine-specific changes to the
            kernel recipe by using a similarly named append
            file, which is located in the BSP Layer for your
            target device (e.g. the
            <filename>meta-<replaceable>bsp_root_name</replaceable>/recipes-kernel/linux</filename> directory).
        </para>

        <para>
            Suppose you are using the
            <filename>linux-yocto_4.4.bb</filename> recipe to
            build the kernel.
            In other words, you have selected the kernel in your
            <replaceable>bsp_root_name</replaceable><filename>.conf</filename>
            file by adding
            <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER</filename></ulink>
            and
            <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_VERSION'><filename>PREFERRED_VERSION</filename></ulink>
            statements as follows:
            <literallayout class='monospaced'>
     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_VERSION_linux-yocto ?= "4.4%"
            </literallayout>
            <note>
                When the preferred provider is assumed by
                default, the
                <filename>PREFERRED_PROVIDER</filename>
                statement does not appear in the
                <replaceable>bsp_root_name</replaceable><filename>.conf</filename> file.
            </note>
            You would use the
            <filename>linux-yocto_4.4.bbappend</filename>
            file to append specific BSP settings to the kernel,
            thus configuring the kernel for your particular BSP.
        </para>

        <para>
            You can find more information on what your append file
            should contain in the
            "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#creating-the-append-file'>Creating the Append File</ulink>"
            section in the Yocto Project Linux Kernel Development
            Manual.
        </para>

        <para>
            An alternate scenario is when you create your own
            kernel recipe for the BSP.
            A good example of this is the Raspberry Pi BSP.
            If you examine the
            <filename>recipes-kernel/linux</filename> directory
            you see the following:
            <literallayout class='monospaced'>
     linux-raspberrypi-dev.bb
     linux-raspberrypi.inc
     linux-raspberrypi_4.14.bb
     linux-raspberrypi_4.9.bb
            </literallayout>
            The directory contains three kernel recipes and a
            common include file.
        </para>
    </section>
</section>

<section id='developing-a-board-support-package-bsp'>
    <title>Developing a Board Support Package (BSP)</title>

    <para>
        This section contains the high-level procedure you can
        follow to create a BSP.
        Although not required for BSP creation, the
        <filename>meta-intel</filename> repository, which
        contains many BSPs supported by the Yocto Project,
        is part of the example.
    </para>

    <para>
        For an example that shows how to create a new
        layer using the tools, see the
        "<link linkend='creating-a-new-bsp-layer-using-the-bitbake-layers-script'>Creating a New BSP Layer Using the <filename>bitbake-layers</filename> Script</link>"
        section.
    </para>

    <para>
        The following illustration and list summarize the BSP
        creation general workflow.
    </para>

    <para>
        <imagedata fileref="figures/bsp-dev-flow.png" width="7in" depth="5in" align="center" scalefit="1" />
    </para>

    <para>
        <orderedlist>
            <listitem><para>
                <emphasis>Set up Your Host Development System
                to Support Development Using the Yocto
                Project</emphasis>:
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#setting-up-the-development-host-to-use-the-yocto-project'>Preparing the Build Host</ulink>"
                section in the Yocto Project Development Tasks
                Manual for options on how to get a system ready
                to use the Yocto Project.
                </para></listitem>
            <listitem><para>
                <emphasis>Establish the
                <filename>meta-intel</filename>
                Repository on Your System:</emphasis>
                Having local copies of these supported BSP layers
                on your system gives you access to layers you
                might be able to leverage when creating your BSP.
                For information on how to get these files, see the
                "<link linkend='preparing-your-build-host-to-work-with-bsp-layers'>Preparing Your Build Host to Work with BSP Layers</link>"
                section.
                </para></listitem>
            <listitem><para>
                <emphasis>Create Your Own BSP Layer Using the
                <filename>bitbake-layers</filename>
                Script:</emphasis>
                Layers are ideal for isolating and storing work
                for a given piece of hardware.
                A layer is really just a location or area in which you
                place the recipes and configurations for your BSP.
                In fact, a BSP is, in itself, a special type of layer.
                The simplest way to create a new BSP layer that is
                compliant with the Yocto Project is to use the
                <filename>bitbake-layers</filename> script.
                For information about that script, see the
                "<link linkend='creating-a-new-bsp-layer-using-the-bitbake-layers-script'>Creating a New BSP Layer Using the <filename>bitbake-layers</filename> Script</link>"
                section.</para>

                <para>Another example that illustrates a layer
                is an application.
                Suppose you are creating an application that has
                library or other dependencies in order for it to
                compile and run.
                The layer, in this case, would be where all the
                recipes that define those dependencies are kept.
                The key point for a layer is that it is an
                isolated area that contains all the relevant
                information for the project that the
                OpenEmbedded build system knows about.
                For more information on layers, see the
                "<ulink url='&YOCTO_DOCS_OM_URL;#the-yocto-project-layer-model'>The Yocto Project Layer Model</ulink>"
                section in the Yocto Project Overview and Concepts
                Manual.
                You can also reference the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers</ulink>"
                section in the Yocto Project Development Tasks
                Manual.
                For more information on BSP layers, see the
                "<link linkend='bsp-layers'>BSP Layers</link>"
                section.
                <note><title>Notes</title>
                    <itemizedlist>
                        <listitem><para>
                            Five hardware reference BSPs exist
                            that are part of the Yocto Project release
                            and are located in the
                            <filename>poky/meta-yocto-bsp</filename> BSP
                            layer:
                            <itemizedlist>
                                <listitem><para>
                                    Texas Instruments Beaglebone
                                    (<filename>beaglebone-yocto</filename>)
                                    </para></listitem>
                                <listitem><para>
                                    Freescale MPC8315E-RDB
                                    (<filename>mpc8315e-rdb</filename>)
                                    </para></listitem>
                                <listitem><para>
                                    Ubiquiti Networks EdgeRouter Lite
                                   (<filename>edgerouter</filename>)
                                   </para></listitem>
                                <listitem><para>
                                    Two general IA platforms
                                    (<filename>genericx86</filename> and
                                    <filename>genericx86-64</filename>)
                                    </para></listitem>
                            </itemizedlist>
                            </para></listitem>
                        <listitem><para>
                            Three core Intel BSPs exist as part of
                            the Yocto Project release in the
                            <filename>meta-intel</filename> layer:
                            <itemizedlist>
                                <listitem><para>
                                    <filename>intel-core2-32</filename>,
                                    which is a BSP optimized for the Core2
                                    family of CPUs as well as all CPUs
                                    prior to the Silvermont core.
                                    </para></listitem>
                                <listitem><para>
                                    <filename>intel-corei7-64</filename>,
                                    which is a BSP optimized for Nehalem
                                    and later Core and Xeon CPUs as well
                                    as Silvermont and later Atom CPUs,
                                    such as the Baytrail SoCs.
                                    </para></listitem>
                                <listitem><para>
                                    <filename>intel-quark</filename>,
                                    which is a BSP optimized for the
                                    Intel Galileo gen1 &amp; gen2
                                    development boards.
                                    </para></listitem>
                            </itemizedlist>
                            </para></listitem>
                    </itemizedlist>
                </note></para>

                <para>When you set up a layer for a new BSP,
                you should follow a standard layout.
                This layout is described in the
                "<link linkend='bsp-filelayout'>Example Filesystem Layout</link>"
                section.
                In the standard layout, notice the suggested
                structure for recipes and configuration
                information.
                You can see the standard layout for a BSP
                by examining any supported BSP found in the
                <filename>meta-intel</filename> layer inside
                the Source Directory.
                </para></listitem>
            <listitem><para>
                <emphasis>Make Configuration Changes to Your New
                BSP Layer:</emphasis>
                The standard BSP layer structure organizes the
                files you need to edit in
                <filename>conf</filename> and several
                <filename>recipes-*</filename> directories
                within the BSP layer.
                Configuration changes identify where your new
                layer is on the local system and identifies the
                kernel you are going to use.
                When you run the
                <filename>bitbake-layers</filename> script,
                you are able to interactively configure many
                things for the BSP (e.g. keyboard, touchscreen,
                and so forth).
                </para></listitem>
            <listitem><para>
                <emphasis>Make Recipe Changes to Your New BSP
                Layer:</emphasis>
                Recipe changes include altering recipes
                (<filename>*.bb</filename> files), removing
                recipes you do not use, and adding new recipes
                or append files (<filename>.bbappend</filename>)
                that support your hardware.
                </para></listitem>
            <listitem><para>
                <emphasis>Prepare for the Build:</emphasis>
                Once you have made all the changes to your BSP
                layer, there remains a few things you need to
                do for the OpenEmbedded build system in order
                for it to create your image.
                You need to get the build environment ready by
                sourcing an environment setup script
                (i.e. <filename>oe-init-build-env</filename>)
                and you need to be sure two key configuration
                files are configured appropriately: the
                <filename>conf/local.conf</filename> and the
                <filename>conf/bblayers.conf</filename> file.
                You must make the OpenEmbedded build system aware
                of your new layer.
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-your-layer'>Enabling Your Layer</ulink>"
                section in the Yocto Project Development Tasks Manual
                for information on how to let the build system
                know about your new layer.
                </para></listitem>
            <listitem><para>
                <emphasis>Build the Image:</emphasis>
                The OpenEmbedded build system uses the BitBake tool
                to build images based on the type of image you want to
                create.
                You can find more information about BitBake in the
                <ulink url='&YOCTO_DOCS_BB_URL;'>BitBake User Manual</ulink>.
                </para>

                <para>The build process supports several types of
                images to satisfy different needs.
                See the
                "<ulink url='&YOCTO_DOCS_REF_URL;#ref-images'>Images</ulink>"
                chapter in the Yocto Project Reference Manual for
                information on supported images.
                </para></listitem>
        </orderedlist>
    </para>
</section>

<section id='requirements-and-recommendations-for-released-bsps'>
    <title>Requirements and Recommendations for Released BSPs</title>

    <para>
        Certain requirements exist for a released BSP to be
        considered compliant with the Yocto Project.
        Additionally, recommendations also exist.
        This section describes the requirements and
        recommendations for released BSPs.
    </para>

    <section id='released-bsp-requirements'>
        <title>Released BSP Requirements</title>

        <para>
            Before looking at BSP requirements, you should consider
            the following:
            <itemizedlist>
                <listitem><para>
                    The requirements here assume the BSP layer
                    is a well-formed, "legal" layer that can be
                    added to the Yocto Project.
                    For guidelines on creating a layer that meets
                    these base requirements, see the
                    "<link linkend='bsp-layers'>BSP Layers</link>"
                    section in this manual and the
                    "<ulink url='&YOCTO_DOCS_DEV_URL;#understanding-and-creating-layers'>Understanding and Creating Layers"</ulink>"
                    section in the Yocto Project Development Tasks
                    Manual.
                    </para></listitem>
                <listitem><para>
                    The requirements in this section apply
                    regardless of how you package a BSP.
                    You should consult the packaging and distribution
                    guidelines for your specific release process.
                    For an example of packaging and distribution
                    requirements, see the
                    "<ulink url='https://wiki.yoctoproject.org/wiki/Third_Party_BSP_Release_Process'>Third Party BSP Release Process</ulink>"
                    wiki page.
                    </para></listitem>
                <listitem><para>
                    The requirements for the BSP as it is made
                    available to a developer are completely
                    independent of the released form of the BSP.
                    For example, the BSP Metadata can be contained
                    within a Git repository and could have a directory
                    structure completely different from what appears
                    in the officially released BSP layer.
                    </para></listitem>
                <listitem><para>
                    It is not required that specific packages or
                    package modifications exist in the BSP layer,
                    beyond the requirements for general
                    compliance with the Yocto Project.
                    For example, no requirement exists dictating
                    that a specific kernel or kernel version be
                    used in a given BSP.
                    </para></listitem>
            </itemizedlist>
        </para>

        <para>
            Following are the requirements for a released BSP
            that conform to the Yocto Project:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Layer Name:</emphasis>
                    The BSP must have a layer name that follows
                    the Yocto Project standards.
                    For information on BSP layer names, see the
                    "<link linkend='bsp-layers'>BSP Layers</link>" section.
                    </para></listitem>
                <listitem><para>
                    <emphasis>File System Layout:</emphasis>
                    When possible, use the same directory names
                    in your BSP layer as listed in the
                    <filename>recipes.txt</filename> file, which
                    is found in <filename>poky/meta</filename>
                    directory of the
                    <ulink url='&YOCTO_DOCS_REF_URL;#source-directory'>Source Directory</ulink>
                    or in the OpenEmbedded-Core Layer
                    (<filename>openembedded-core</filename>) at
                    <ulink url='http://git.openembedded.org/openembedded-core/tree/meta'></ulink>.
                    </para>

                    <para>You should place recipes
                    (<filename>*.bb</filename> files) and recipe
                    modifications (<filename>*.bbappend</filename>
                    files) into <filename>recipes-*</filename>
                    subdirectories by functional area as outlined
                    in <filename>recipes.txt</filename>.
                    If you cannot find a category in
                    <filename>recipes.txt</filename> to fit a
                    particular recipe, you can make up your own
                    <filename>recipes-*</filename> subdirectory.
                    </para>

                    <para>Within any particular
                    <filename>recipes-*</filename> category, the
                    layout should match what is found in the
                    OpenEmbedded-Core Git repository
                    (<filename>openembedded-core</filename>)
                    or the Source Directory (<filename>poky</filename>).
                    In other words, make sure you place related
                    files in appropriately related
                    <filename>recipes-*</filename> subdirectories
                    specific to the recipe's function, or within
                    a subdirectory containing a set of closely-related
                    recipes.
                    The recipes themselves should follow the general
                    guidelines for recipes used in the Yocto Project
                    found in the
                    "<ulink url='http://openembedded.org/wiki/Styleguide'>OpenEmbedded Style Guide</ulink>".
                    </para></listitem>
                <listitem><para>
                    <emphasis>License File:</emphasis>
                    You must include a license file in the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    This license covers the BSP Metadata as a whole.
                    You must specify which license to use since no
                    default license exists when one not specified.
                    See the
                    <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-raspberrypi/tree/COPYING.MIT'><filename>COPYING.MIT</filename></ulink>
                    file for the Raspberry Pi BSP in the
                    <filename>meta-raspberrypi</filename> BSP layer
                    as an example.
                    </para></listitem>
                <listitem><para>
                    <emphasis>README File:</emphasis>
                    You must include a <filename>README</filename>
                    file in the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    See the
                    <ulink url='&YOCTO_GIT_URL;/cgit.cgi/meta-raspberrypi/tree/README.md'><filename>README.md</filename></ulink>
                    file for the Raspberry Pi BSP in the
                    <filename>meta-raspberrypi</filename> BSP layer
                    as an example.</para>

                    <para>At a minimum, the <filename>README</filename>
                    file should contain the following:
                    <itemizedlist>
                        <listitem><para>
                            A brief description about the hardware the BSP
                            targets.
                            </para></listitem>
                        <listitem><para>
                            A list of all the dependencies
                            on which a BSP layer depends.
                            These dependencies are typically a list
                            of required layers needed to build the
                            BSP.
                            However, the dependencies should also
                            contain information regarding any other
                            dependencies the BSP might have.
                            </para></listitem>
                        <listitem><para>
                            Any required special licensing information.
                            For example, this information includes
                            information on special variables needed
                            to satisfy a EULA, or instructions on
                            information needed to build or distribute
                            binaries built from the BSP Metadata.
                            </para></listitem>
                        <listitem><para>
                            The name and contact information for the
                            BSP layer maintainer.
                            This is the person to whom patches and
                            questions should be sent.
                            For information on how to find the right
                            person, see the
                            "<ulink url='&YOCTO_DOCS_DEV_URL;#how-to-submit-a-change'>Submitting a Change to the Yocto Project</ulink>"
                            section in the Yocto Project Development
                            Tasks Manual.
                            </para></listitem>
                        <listitem><para>
                            Instructions on how to build the BSP using
                            the BSP layer.
                            </para></listitem>
                        <listitem><para>
                            Instructions on how to boot the BSP build
                            from the BSP layer.
                            </para></listitem>
                        <listitem><para>
                            Instructions on how to boot the binary
                            images contained in the
                            <filename>binary</filename> directory,
                            if present.
                            </para></listitem>
                        <listitem><para>
                            Information on any known bugs or issues
                            that users should know about when either
                            building or booting the BSP binaries.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <emphasis>README.sources File:</emphasis>
                    If you BSP contains binary images in the
                    <filename>binary</filename> directory, you must
                    include a <filename>README.sources</filename>
                    file in the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    This file specifies exactly where you can find
                    the sources used to generate the binary images.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Layer Configuration File:</emphasis>
                    You must include a
                    <filename>conf/layer.conf</filename> file in
                    the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    This file identifies the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    BSP layer as a layer to the build system.
                    </para></listitem>
                <listitem><para>
                    <emphasis>Machine Configuration File:</emphasis>
                    You must include one or more
                    <filename>conf/machine/</filename><replaceable>bsp_root_name</replaceable><filename>.conf</filename>
                    files in the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    These configuration files define machine targets
                    that can be built using the BSP layer.
                    Multiple machine configuration files define
                    variations of machine configurations that the
                    BSP supports.
                    If a BSP supports multiple machine variations,
                    you need to adequately describe each variation
                    in the BSP <filename>README</filename> file.
                    Do not use multiple machine configuration files
                    to describe disparate hardware.
                    If you do have very different targets, you should
                    create separate BSP layers for each target.
                    <note>
                        It is completely possible for a developer to
                        structure the working repository as a
                        conglomeration of unrelated BSP files, and to
                        possibly generate BSPs targeted for release
                        from that directory using scripts or some
                        other mechanism
                        (e.g. <filename>meta-yocto-bsp</filename> layer).
                        Such considerations are outside the scope of
                        this document.
                    </note>
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='released-bsp-recommendations'>
        <title>Released BSP Recommendations</title>

        <para>
            Following are recommendations for released BSPs that
            conform to the Yocto Project:
            <itemizedlist>
                <listitem><para>
                    <emphasis>Bootable Images:</emphasis>
                    Released BSPs can contain one or more bootable
                    images.
                    Including bootable images allows users to easily
                    try out the BSP using their own hardware.</para>

                    <para>In some cases, it might not be convenient
                    to include a bootable image.
                    If so, you might want to make two versions of the
                    BSP available: one that contains binary images, and
                    one that does not.
                    The version that does not contain bootable images
                    avoids unnecessary download times for users not
                    interested in the images.</para>

                    <para>If you need to distribute a BSP and include
                    bootable images or build kernel and filesystems
                    meant to allow users to boot the BSP for evaluation
                    purposes, you should put the images and artifacts
                    within a
                    <filename>binary/</filename> subdirectory located
                    in the
                    <filename>meta-</filename><replaceable>bsp_root_name</replaceable>
                    directory.
                    <note>
                        If you do include a bootable image as part
                        of the BSP and the image was built by software
                        covered by the GPL or other open source licenses,
                        it is your responsibility to understand
                        and meet all licensing requirements, which could
                        include distribution of source files.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <emphasis>Use a Yocto Linux Kernel:</emphasis>
                    Kernel recipes in the BSP should be based on a
                    Yocto Linux kernel.
                    Basing your recipes on these kernels reduces
                    the costs for maintaining the BSP and increases
                    its scalability.
                    See the <filename>Yocto Linux Kernel</filename>
                    category in the
                    <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>
                    for these kernels.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>

<section id='customizing-a-recipe-for-a-bsp'>
    <title>Customizing a Recipe for a BSP</title>

    <para>
        If you plan on customizing a recipe for a particular BSP,
        you need to do the following:
        <itemizedlist>
            <listitem><para>
                Create a <filename>*.bbappend</filename> file for
                the modified recipe.
                For information on using append files, see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#using-bbappend-files'>Using .bbappend Files in Your Layer</ulink>"
                section in the Yocto Project Development Tasks
                Manual.
                </para></listitem>
            <listitem><para>
                Ensure your directory structure in the BSP layer
                that supports your machine is such that the
                OpenEmbedded build system can find it.
                See the example later in this section for more
                information.
                </para></listitem>
            <listitem><para>
                Put the append file in a directory whose name matches
                the machine's name and is located in an appropriate
                sub-directory inside the BSP layer (i.e.
                <filename>recipes-bsp</filename>,
                <filename>recipes-graphics</filename>,
                <filename>recipes-core</filename>, and so forth).
                </para></listitem>
            <listitem><para>
                Place the BSP-specific files in the proper
                directory inside the BSP layer.
                How expansive the layer is affects where you must
                place these files.
                For example, if your layer supports several
                different machine types, you need to be sure your
                layer's directory structure includes hierarchy
                that separates the files according to machine.
                If your layer does not support multiple machines,
                the layer would not have that additional hierarchy
                and the files would obviously not be able to reside
                in a machine-specific directory.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        Following is a specific example to help you better understand
        the process.
        This example customizes customizes a recipe by adding a
        BSP-specific configuration file named
        <filename>interfaces</filename> to the
        <filename>init-ifupdown_1.0.bb</filename> recipe for machine
        "xyz" where the BSP layer also supports several other
        machines:
        <orderedlist>
            <listitem><para>
                Edit the
                <filename>init-ifupdown_1.0.bbappend</filename> file
                so that it contains the following:
                <literallayout class='monospaced'>
     FILESEXTRAPATHS_prepend := "${THISDIR}/files:"
                </literallayout>
                The append file needs to be in the
                <filename>meta-xyz/recipes-core/init-ifupdown</filename>
                directory.
                </para></listitem>
            <listitem><para>
                Create and place the new
                <filename>interfaces</filename> configuration file in
                the BSP's layer here:
                <literallayout class='monospaced'>
     meta-xyz/recipes-core/init-ifupdown/files/xyz-machine-one/interfaces
                </literallayout>
                <note>
                    If the <filename>meta-xyz</filename> layer did
                    not support multiple machines, you would place
                    the <filename>interfaces</filename> configuration
                    file in the layer here:
                    <literallayout class='monospaced'>
     meta-xyz/recipes-core/init-ifupdown/files/interfaces
                    </literallayout>
                </note>
                The
                <ulink url='&YOCTO_DOCS_REF_URL;#var-FILESEXTRAPATHS'><filename>FILESEXTRAPATHS</filename></ulink>
                variable in the append files extends the search path
                the build system uses to find files during the build.
                Consequently, for this example you need to have the
                <filename>files</filename> directory in the same
                location as your append file.
                </para></listitem>
       </orderedlist>
    </para>
</section>

<section id='bsp-licensing-considerations'>
    <title>BSP Licensing Considerations</title>

    <para>
        In some cases, a BSP contains separately licensed
        Intellectual Property (IP) for a component or components.
        For these cases, you are required to accept the terms
        of a commercial or other type of license that requires
        some kind of explicit End User License Agreement (EULA).
        Once you accept the license, the OpenEmbedded build system
        can then build and include the corresponding component
        in the final BSP image.
        If the BSP is available as a pre-built image, you can
        download the image after agreeing to the license or EULA.
    </para>

    <para>
        You could find that some separately licensed components
        that are essential for normal operation of the system might
        not have an unencumbered (or free) substitute.
        Without these essential components, the system would be
        non-functional.
        Then again, you might find that other licensed components
        that are simply 'good-to-have' or purely elective do have
        an unencumbered, free replacement component that you can
        use rather than agreeing to the separately licensed
        component.
        Even for components essential to the system, you might
        find an unencumbered component that is not identical but
        will work as a less-capable version of the licensed version
        in the BSP recipe.
    </para>

    <para>
        For cases where you can substitute a free component and
        still maintain the system's functionality, the "DOWNLOADS"
        selection from the "SOFTWARE" tab on the
        <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>
        makes available de-featured BSPs that are completely free
        of any IP encumbrances.
        For these cases, you can use the substitution directly and
        without any further licensing requirements.
        If present, these fully de-featured BSPs are named
        appropriately different as compared to the names of their
        respective encumbered BSPs.
        If available, these substitutions are your simplest and
        most preferred options.
        Obviously, use of these substitutions assumes the resulting
        functionality meets system requirements.
        <note>
            If however, a non-encumbered version is unavailable or
            it provides unsuitable functionality or quality, you can
            use an encumbered version.
        </note>
    </para>

    <para>
        A couple different methods exist within the OpenEmbedded
        build system to satisfy the licensing requirements for an
        encumbered BSP.
        The following list describes them in order of preference:
        <orderedlist>
            <listitem><para>
                <emphasis>Use the
                <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS'><filename>LICENSE_FLAGS</filename></ulink>
                Variable to Define the Recipes that Have Commercial
                or Other Types of Specially-Licensed Packages:</emphasis>
                For each of those recipes, you can specify a
                matching license string in a
                <filename>local.conf</filename> variable named
                <ulink url='&YOCTO_DOCS_REF_URL;#var-LICENSE_FLAGS_WHITELIST'><filename>LICENSE_FLAGS_WHITELIST</filename></ulink>.
                Specifying the matching license string signifies
                that you agree to the license.
                Thus, the build system can build the corresponding
                recipe and include the component in the image.
                See the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#enabling-commercially-licensed-recipes'>Enabling Commercially Licensed Recipes</ulink>"
                section in the Yocto Project Development Tasks
                Manual for details on how to use these variables.
                </para>

                <para>If you build as you normally would, without
	        specifying any recipes in the
	        <filename>LICENSE_FLAGS_WHITELIST</filename>, the
                build stops and provides you with the list of recipes
                that you have tried to include in the image that
                need entries in the
                <filename>LICENSE_FLAGS_WHITELIST</filename>.
                Once you enter the appropriate license flags into
                the whitelist, restart the build to continue where
                it left off.
	        During the build, the prompt will not appear again
	        since you have satisfied the requirement.</para>

                <para>Once the appropriate license flags are on the
                white list in the
                <filename>LICENSE_FLAGS_WHITELIST</filename> variable,
                you can build the encumbered image with no change
                at all to the normal build process.
                </para></listitem>
            <listitem><para>
                <emphasis>Get a Pre-Built Version of the BSP:</emphasis>
                You can get this type of BSP by selecting the
                "DOWNLOADS" item from the "SOFTWARE" tab on the
                <ulink url='&YOCTO_HOME_URL;'>Yocto Project website</ulink>.
                You can download BSP tarballs that contain
                proprietary components after agreeing to the
                licensing requirements of each of the individually
                encumbered packages as part of the download process.
                Obtaining the BSP this way allows you to access an
                encumbered image immediately after agreeing to the
                click-through license agreements presented by the
                website.
                If you want to build the image yourself using
                the recipes contained within the BSP tarball,
                you will still need to create an appropriate
                <filename>LICENSE_FLAGS_WHITELIST</filename>
                to match the encumbered recipes in the BSP.
                </para></listitem>
        </orderedlist>
        <note>
            Pre-compiled images are bundled with a time-limited
            kernel that runs for a predetermined amount of time
            (10 days) before it forces the system to reboot.
            This limitation is meant to discourage direct
            redistribution of the image.
            You must eventually rebuild the image if you want
            to remove this restriction.
        </note>
    </para>
</section>

<section id='creating-a-new-bsp-layer-using-the-bitbake-layers-script'>
    <title>Creating a new BSP Layer Using the <filename>bitbake-layers</filename> Script</title>

    <para>
        The <filename>bitbake-layers create-layer</filename> script
        automates creating a BSP layer.
        What makes a layer a "BSP layer", is the presence of a machine
        configuration file.
        Additionally, a BSP layer usually has a kernel recipe
        or an append file that leverages off an existing kernel recipe.
        The primary requirement, however, is the machine configuration.
    </para>

    <para>
        Use these steps to create a BSP layer:
        <itemizedlist>
            <listitem><para>
                <emphasis>Create a General Layer:</emphasis>
                Use the <filename>bitbake-layers</filename> script with the
                <filename>create-layer</filename> subcommand to create a
                new general layer.
                For instructions on how to create a general layer using the
                <filename>bitbake-layers</filename> script, see the
                "<ulink url='&YOCTO_DOCS_DEV_URL;#creating-a-general-layer-using-the-bitbake-layers-script'>Creating a General Layer Using the <filename>bitbake-layers</filename> Script</ulink>"
                section in the Yocto Project Development Tasks Manual.
                </para></listitem>
            <listitem><para>
                <emphasis>Create a Layer Configuration File:</emphasis>
                Every layer needs a layer configuration file.
                This configuration file establishes locations for the
                layer's recipes, priorities for the layer, and so forth.
                You can find examples of <filename>layer.conf</filename>
                files in the Yocto Project
                <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>.
                To get examples of what you need in your configuration
                file, locate a layer (e.g. "meta-ti") and examine the
                <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/meta-ti/tree/conf/layer.conf'></ulink>
                file.
                </para></listitem>
            <listitem><para>
                <emphasis>Create a Machine Configuration File:</emphasis>
                Create a <filename>conf/machine/</filename><replaceable>bsp_root_name</replaceable><filename>.conf</filename>
                file.
                See
                <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto-bsp/conf/machine'><filename>meta-yocto-bsp/conf/machine</filename></ulink>
                for sample
                <replaceable>bsp_root_name</replaceable><filename>.conf</filename>
                files.
                Other samples such as
                <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/meta-ti/tree/conf/machine'><filename>meta-ti</filename></ulink>
                and
                <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/meta-freescale/tree/conf/machine'><filename>meta-freescale</filename></ulink>
                exist from other vendors that have more specific machine
                and tuning examples.
                </para></listitem>
            <listitem><para>
                <emphasis>Create a Kernel Recipe:</emphasis>
                Create a kernel recipe in <filename>recipes-kernel/linux</filename>
                by either using a kernel append file or a new custom kernel
                recipe file (e.g. <filename>yocto-linux_4.12.bb</filename>).
                The BSP layers mentioned in the previous step also contain different
                kernel examples.
                See the
                "<ulink url='&YOCTO_DOCS_KERNEL_DEV_URL;#modifying-an-existing-recipe'>Modifying an Existing Recipe</ulink>"
                section in the Yocto Project Linux Kernel Development Manual
                for information on how to create a custom kernel.
                </para></listitem>
        </itemizedlist>
    </para>

    <para>
        The remainder of this section provides a description of
        the Yocto Project reference BSP for Beaglebone, which
        resides in the
        <ulink url='&YOCTO_DOCS_REF_URL;#term-container-layer'>Container Layer</ulink>
        (i.e.
        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta-yocto-bsp'><filename>meta-yocto-bsp</filename></ulink>).
    </para>

    <section id='bsp-layer-configuration-example'>
        <title>BSP Layer Configuration Example</title>

        <para>
            The layer's <filename>conf</filename> directory
            contains the <filename>layer.conf</filename>
            configuration file.
            In this example, the
            <filename>conf/layer.conf</filename> is the
            following:
            <literallayout class='monospaced'>
     # We have a conf and classes directory, add to BBPATH
     BBPATH .= ":${LAYERDIR}"

     # We have recipes-* directories, add to BBFILES
     BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
                 ${LAYERDIR}/recipes-*/*/*.bbappend"

     BBFILE_COLLECTIONS += "yoctobsp"
     BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
     BBFILE_PRIORITY_yoctobsp = "5"
     LAYERVERSION_yoctobsp = "4"
     LAYERSERIES_COMPAT_yoctobsp = "&DISTRO_NAME_NO_CAP;"
            </literallayout>
            The variables used in this file configure the
            layer.
            A good way to learn about layer configuration
            files is to examine various files for BSP from
            the
            <ulink url='&YOCTO_GIT_URL;'>Source Repositories</ulink>.
        </para>

        <para>
            For a detailed description of this particular
            layer configuration file, see
            "<ulink url='&YOCTO_DOCS_DEV_URL;#dev-layer-config-file-description'>step 3</ulink>
            in the discussion that describes how to create
            layers in the Yocto Project Development Tasks Manual.
        </para>
    </section>

    <section id='bsp-machine-configuration-example'>
        <title>BSP Machine Configuration Example</title>

        <para>
            As mentioned earlier in this section, the existence
            of a machine configuration file is what makes a
            layer a BSP layer as compared to a general or
            kernel layer.
        </para>

        <para>
            Machine configuration files exist in the
            <replaceable>bsp_layer</replaceable><filename>/conf/machine/</filename>
            directory of the layer:
            <literallayout class='monospaced'>
     <replaceable>bsp_layer</replaceable><filename>/conf/machine/</filename><replaceable>machine</replaceable><filename>.conf</filename>
            </literallayout>
            For example, the machine configuration file for the
            <ulink url='http://beagleboard.org/bone'>BeagleBone and BeagleBone Black development boards</ulink>
            is located in the container layer
            <filename>poky/meta-yocto-bsp/conf/machine</filename>
            and is named <filename>beaglebone-yocto.conf</filename>:
            <literallayout class='monospaced'>
     #@TYPE: Machine
     #@NAME: Beaglebone-yocto machine
     #@DESCRIPTION: Reference machine configuration for http://beagleboard.org/bone and http://beagleboard.org/black boards

     PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
     XSERVER ?= "xserver-xorg \
                xf86-video-modesetting \
                "

     MACHINE_EXTRA_RRECOMMENDS = "kernel-modules kernel-devicetree"

     EXTRA_IMAGEDEPENDS += "u-boot"

     DEFAULTTUNE ?= "cortexa8hf-neon"
     include conf/machine/include/tune-cortexa8.inc

     IMAGE_FSTYPES += "tar.bz2 jffs2 wic wic.bmap"
     EXTRA_IMAGECMD_jffs2 = "-lnp "
     WKS_FILE ?= "beaglebone-yocto.wks"
     IMAGE_INSTALL_append = " kernel-devicetree kernel-image-zimage"
     do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot"

     SERIAL_CONSOLES = "115200;ttyO0"

     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_VERSION_linux-yocto ?= "4.12%"

     KERNEL_IMAGETYPE = "zImage"
     KERNEL_DEVICETREE = "am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb"
     KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"

     SPL_BINARY = "MLO"
     UBOOT_SUFFIX = "img"
     UBOOT_MACHINE = "am335x_boneblack_config"
     UBOOT_ENTRYPOINT = "0x80008000"
     UBOOT_LOADADDRESS = "0x80008000"

     MACHINE_FEATURES = "usbgadget usbhost vfat alsa"

     IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} MLO"
            </literallayout>
            The variables used to configure the machine define
            machine-specific properties.
            For example, machine-dependent packages, machine
            tunings, the type of kernel to build, and
            U-Boot configurations.
        </para>

        <para>
            The following list provides some explanation
            for the statements found in the example reference
            machine configuration file for the BeagleBone
            development boards.
            Realize that much more can be defined as part of
            a machines configuration file.
            In general, you can learn about related variables
            that this example does not have by locating the
            variables in the
            "<ulink url='&YOCTO_DOCS_REF_URL;#ref-variables-glos'>Yocto Project Variables Glossary</ulink>"
            in the Yocto Project Reference Manual.
            <itemizedlist>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER_virtual/xserver</filename></ulink>:
                    The recipe that provides "virtual/xserver" when
                    more than one provider is found.
                    In this case, the recipe that provides
                    "virtual/xserver" is "xserver-xorg", which
                    exists in
                    <filename>poky/meta/recipes-graphics/xserver-xorg</filename>.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-XSERVER'><filename>XSERVER</filename></ulink>:
                    The packages that should be installed to provide
                    an X server and drivers for the machine.
                    In this example, the "xserver-xorg" and
                    "xf86-video-modesetting" are installed.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_EXTRA_RRECOMMENDS'><filename>MACHINE_EXTRA_RRECOMMENDS</filename></ulink>:
                    A list of machine-dependent packages
                    not essential for booting the image.
                    Thus, the build does not fail if the packages
                    do not exist.
                    However, the packages are required for a
                    fully-featured image.
                    <note><title>Tip</title>
                        Many <filename>MACHINE*</filename> variables
                        exist that help you configure a particular
                        piece of hardware.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGEDEPENDS'><filename>EXTRA_IMAGEDEPENDS</filename></ulink>:
                    Recipes to build that do not provide packages
                    for installing into the root filesystem
                    but building the image depends on the
                    recipes.
                    Sometimes a recipe is required to build
                    the final image but is not needed in the
                    root filesystem.
                    In this case, the U-Boot recipe must be
                    built for the image.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-DEFAULTTUNE'><filename>DEFAULTTUNE</filename></ulink>:
                    Machines use tunings to optimize machine,
                    CPU, and application performance.
                    These features, which are collectively known
                    as "tuning features", exist in the
                    <ulink url='&YOCTO_DOCS_REF_URL;#oe-core'>OpenEmbedded-Core (OE-Core)</ulink>
                    layer (e.g.
                    <filename>poky/meta/conf/machine/include</filename>).
                    In this example, the default tunning file is
                    "cortexa8hf-neon".
                    <note>
                        The <filename>include</filename> statement
                        that pulls in the
                        <filename>conf/machine/include/tune-cortexa8.inc</filename>
                        file provides many tuning possibilities.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_FSTYPES'><filename>IMAGE_FSTYPES</filename></ulink>:
                    The formats the OpenEmbedded build system
                    uses during the build when creating the
                    root filesystem.
                    In this example, four types of images are
                    supported.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-EXTRA_IMAGECMD'><filename>EXTRA_IMAGECMD</filename></ulink>:
                    Specifies additional options for image
                    creation commands.
                    In this example, the "-lnp " option is used
                    when creating the
                    <ulink url='https://en.wikipedia.org/wiki/JFFS2'>JFFS2</ulink>
                    image.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-WKS_FILE'><filename>WKS_FILE</filename></ulink>:
                    The location of the
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-kickstart'>Wic kickstart</ulink>
                    file used by the OpenEmbedded build system to
                    create a partitioned image (image.wic).
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_INSTALL'><filename>IMAGE_INSTALL</filename></ulink>:
                    Specifies packages to install into an image
                    through the
                    <ulink url='&YOCTO_DOCS_REF_URL;#ref-classes-image'><filename>image</filename></ulink>
                    class.
                    Recipes use the <filename>IMAGE_INSTALL</filename>
                    variable.
                    </para></listitem>
                <listitem><para>
                    <filename>do_image_wic[depends]</filename>:
                    A task that is constructed during the build.
                    In this example, the task depends on specific tools
                    in order to create the sysroot when buiding a Wic
                    image.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SERIAL_CONSOLES'><filename>SERIAL_CONSOLES</filename></ulink>:
                    Defines a serial console (TTY) to enable using
                    getty.
                    In this case, the baud rate is "115200" and the
                    device name is "ttyO0".
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_PROVIDER'><filename>PREFERRED_PROVIDER_virtual/kernel</filename></ulink>:
                    Specifies the recipe that provides
                    "virtual/kernel" when more than one provider
                    is found.
                    In this case, the recipe that provides
                    "virtual/kernel" is "linux-yocto", which
                    exists in the layer's
                    <filename>recipes-kernel/linux</filename> directory.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-PREFERRED_VERSION'><filename>PREFERRED_VERSION_linux-yocto</filename></ulink>:
                    Defines the version of the recipe used
                    to build the kernel, which is "4.12" in this
                    case.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_IMAGETYPE'><filename>KERNEL_IMAGETYPE</filename></ulink>:
                    The type of kernel to build for the device.
                    In this case, the OpenEmbedded build system
                    creates a "zImage" image type.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_DEVICETREE'><filename>KERNEL_DEVICETREE</filename></ulink>:
                    The name of the generated Linux kernel device
                    tree (i.e. the <filename>.dtb</filename>) file.
                    All the device trees for the various BeagleBone
                    devices are included.
<!--
                    You have to include some *.inc files according to the definition of KERNEL_DEVICETREE.
                    I don't see where these are being provided.
-->
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KERNEL_EXTRA_ARGS'><filename>KERNEL_EXTRA_ARGS</filename></ulink>:
                    Additional <filename>make</filename>
                    command-line arguments the OpenEmbedded build
                    system passes on when compiling the kernel.
                    In this example, "LOADADDR=${UBOOT_ENTRYPOINT}"
                    is passed as a command-line argument.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SPL_BINARY'><filename>SPL_BINARY</filename></ulink>:
                    Defines the Secondary Program Loader (SPL) binary
                    type.
                    In this case, the SPL binary is set to
                    "MLO", which stands for Multimedia card LOader.
                    </para>

                    <para>The BeagleBone development board requires an
                    SPL to boot and that SPL file type must be MLO.
                    Consequently, the machine configuration needs to
                    define <filename>SPL_BINARY</filename> as "MLO".
                    <note>
                        For more information on how the SPL variables
                        are used, see the
                        <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/recipes-bsp/u-boot/u-boot.inc'><filename>u-boot.inc</filename></ulink>
                        include file.
                    </note>
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-UBOOT_ENTRYPOINT'><filename>UBOOT_*</filename></ulink>:
                    Defines various U-Boot configurations needed
                    to build a U-Boot image.
                    In this example, a U-Boot image is required
                    to boot the BeagleBone device.
                    See the following variables for more information:
                    <itemizedlist>
                        <listitem><para>
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-UBOOT_SUFFIX'><filename>UBOOT_SUFFIX</filename></ulink>:
                            Points to the generated U-Boot extension.
                            </para></listitem>
                        <listitem><para>
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-UBOOT_MACHINE'><filename>UBOOT_MACHINE</filename></ulink>:
                            Specifies the value passed on the make command line when building a U-Boot image.
                            </para></listitem>
                        <listitem><para>
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-UBOOT_ENTRYPOINT'><filename>UBOOT_ENTRYPOINT</filename></ulink>:
                            Specifies the entry point for the U-Boot image.
                            </para></listitem>
                        <listitem><para>
                            <ulink url='&YOCTO_DOCS_REF_URL;#var-UBOOT_LOADADDRESS'><filename>UBOOT_LOADADDRESS</filename></ulink>:
                            Specifies the load address for the U-Boot image.
                            </para></listitem>
                    </itemizedlist>
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-MACHINE_FEATURES'><filename>MACHINE_FEATURES</filename></ulink>:
                    Specifies the list of hardware features the
                    BeagleBone device is capable of supporting.
                    In this case, the device supports
                    "usbgadget usbhost vfat alsa".
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-IMAGE_BOOT_FILES'><filename>IMAGE_BOOT_FILES</filename></ulink>:
                    Files installed into the device's boot partition
                    when preparing the image using the Wic tool
                    with the <filename>bootimg-partition</filename>
                    source plugin.
                    In this case, the "u-boot.${UBOOT_SUFFIX}" and
                    "MLO" files are installed.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>

    <section id='bsp-kernel-recipe-example'>
        <title>BSP Kernel Recipe Example</title>

        <para>
            The kernel recipe used to build the kernel image
            for the BeagleBone device was established in the
            machine configuration:
            <literallayout class='monospaced'>
     PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
     PREFERRED_VERSION_linux-yocto ?= "4.12%"
            </literallayout>
            The <filename>meta-yocto-bsp/recipes-kernel/linux</filename>
            directory in the layer contains metadata used
            to build the kernel.
            In this case, a kernel append file is used to
            override an established kernel recipe, which is
            located in
            <ulink url='&YOCTO_GIT_URL;/cgit/cgit.cgi/poky/tree/meta/recipes-kernel/linux'></ulink>
            and named
            <filename>linux-yocto_4.12.bb</filename>.
        </para>

        <para>
            Following is the contents of the append file:
            <literallayout class='monospaced'>
     KBRANCH_genericx86  = "standard/base"
     KBRANCH_genericx86-64  = "standard/base"

     KMACHINE_genericx86 ?= "common-pc"
     KMACHINE_genericx86-64 ?= "common-pc-64"
     KBRANCH_edgerouter = "standard/edgerouter"
     KBRANCH_beaglebone-yocto = "standard/beaglebone"
     KMACHINE_beaglebone-yocto = "beaglebone"
     KBRANCH_mpc8315e-rdb = "standard/fsl-mpc8315e-rdb"

     SRCREV_machine_genericx86    ?= "1c4ad569af3e23a77994235435040e322908687f"
     SRCREV_machine_genericx86-64 ?= "1c4ad569af3e23a77994235435040e322908687f"
     SRCREV_machine_edgerouter ?= "257f843ea367744620f1d92910afd2f454e31483"
     SRCREV_machine_beaglebone-yocto ?= "257f843ea367744620f1d92910afd2f454e31483"
     SRCREV_machine_mpc8315e-rdb ?= "014560874f9eb2a86138c9cc35046ff1720485e1"


     COMPATIBLE_MACHINE_genericx86 = "genericx86"
     COMPATIBLE_MACHINE_genericx86-64 = "genericx86-64"
     COMPATIBLE_MACHINE_edgerouter = "edgerouter"
     COMPATIBLE_MACHINE_beaglebone-yocto = "beaglebone-yocto"
     COMPATIBLE_MACHINE_mpc8315e-rdb = "mpc8315e-rdb"

     LINUX_VERSION_genericx86 = "4.12.20"
     LINUX_VERSION_genericx86-64 = "4.12.20"
     LINUX_VERSION_edgerouter = "4.12.19"
     LINUX_VERSION_beaglebone-yocto = "4.12.19"
     LINUX_VERSION_mpc8315e-rdb = "4.12.19"
            </literallayout>
            This particular append file works for all the
            machines that are part of the
            <filename>meta-yocto-bsp</filename> container
            layer.
            The relevant statements are appended with
            the "beaglebone-yocto" string.
            The OpenEmbedded build system uses these
            statements to override similar statements
            in the kernel recipe:
            <itemizedlist>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KBRANCH'><filename>KBRANCH</filename></ulink>:
                    Identifies the kernel branch that is validated,
                    patched, and configured during the build.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-KMACHINE'><filename>KMACHINE</filename></ulink>:
                    Identifies the machine name as known by the
                    kernel, which is sometimes a different name
                    than what is known by the OpenEmbedded build
                    system.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-SRCREV'><filename>SRCREV</filename></ulink>:
                    Identifies the revision of the source code used
                    to build the image.
<!--
                    You find out about that point in the kernel source tree by
                    doing the following command:

                    git log &dash;&dash;decorate 257f843ea367744620f1d92910afd2f454e31483

                    Returns information about the commit, which is usually
                    that it is a merge point for a stable kernel release.
-->
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-COMPATIBLE_MACHINE'><filename>COMPATIBLE_MACHINE</filename></ulink>:
                    A regular expression that resolves to one or
                    more target machines with which the recipe
                    is compatible.
                    </para></listitem>
                <listitem><para>
                    <ulink url='&YOCTO_DOCS_REF_URL;#var-LINUX_VERSION'><filename>LINUX_VERSION</filename></ulink>:
                    The Linux version from kernel.org used by
                    the OpenEmbedded build system to build the
                    kernel image.
                    </para></listitem>
            </itemizedlist>
        </para>
    </section>
</section>
</chapter>
