1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495 |
- .. SPDX-License-Identifier: CC-BY-SA-2.0-UK
- **************************************************
- Board Support Packages (BSP) --- Developer's Guide
- **************************************************
- 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.
- 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 BSP
- Layer using the :ref:`bitbake-layers <bsp-guide/bsp:Creating a new BSP Layer Using the \`\`bitbake-layers\`\` Script>`
- tool.
- BSP Layers
- ==========
- 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::
- meta-bsp_root_name
- The string "meta-" is prepended to the
- machine or platform name, which is "bsp_root_name" in the above form.
- .. note::
- 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 ``meta-``.
- However, various scripts and tools in the Yocto Project development
- environment assume this convention.
- 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
- :ref:`overview-manual/development-environment:yocto project source repositories`
- through
- a web interface at :yocto_git:`/`. 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."
- Each repository is a BSP layer supported by the Yocto Project (e.g.
- ``meta-raspberrypi`` and ``meta-intel``). Each of these layers is a
- repository unto itself and clicking on the layer name displays two URLs
- from which you can clone the layer's repository to your local system.
- Here is an example that clones the Raspberry Pi BSP layer::
- $ git clone git://git.yoctoproject.org/meta-raspberrypi
- In addition to BSP layers, the ``meta-yocto-bsp`` layer is part of the
- shipped ``poky`` repository. The ``meta-yocto-bsp`` layer maintains
- several "reference" BSPs including the ARM-based Beaglebone and generic
- versions of both 32-bit and 64-bit IA machines.
- For information on typical BSP development workflow, see the
- :ref:`bsp-guide/bsp:developing a board support package (bsp)`
- section. For more
- information on how to set up a local copy of source files from a Git
- repository, see the
- :ref:`dev-manual/start:locating yocto project source files`
- section in the Yocto Project Development Tasks Manual.
- The BSP layer's base directory (``meta-bsp_root_name``) is the root
- directory of that Layer. This directory is what you add to the
- :term:`BBLAYERS` variable in the
- ``conf/bblayers.conf`` file found in your
- :term:`Build Directory`, which is
- established after you run the OpenEmbedded build environment setup
- script (i.e. :ref:`ref-manual/structure:``oe-init-build-env```).
- Adding the root directory allows the :term:`OpenEmbedded Build System`
- to recognize the BSP
- layer and from it build an image. Here is an example::
- 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 \
- "
- .. note::
- Ordering and :term:`BBFILE_PRIORITY` for the layers listed in :term:`BBLAYERS`
- 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 :term:`BBLAYERS`.
- 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 ``README`` "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.
- Some layers function as a layer to hold other BSP layers. These layers
- are known as ":term:`container layers <Container Layer>`". An example of
- this type of layer is OpenEmbedded's :oe_git:`meta-openembedded </meta-openembedded>`
- layer. The ``meta-openembedded`` layer contains many ``meta-*`` layers.
- In cases like this, you need to include the names of the actual layers
- you want to work with, such as::
- 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 \
- .../meta-openembedded/meta-oe \
- .../meta-openembedded/meta-perl \
- .../meta-openembedded/meta-networking \
- "
- and so on.
- For more information on layers, see the
- ":ref:`dev-manual/layers:understanding and creating layers`"
- section of the Yocto Project Development Tasks Manual.
- Preparing Your Build Host to Work With BSP Layers
- =================================================
- 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
- ":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
- section.
- .. note::
- For structural information on BSPs, see the
- :ref:`bsp-guide/bsp:example filesystem layout` section.
- #. *Set Up the Build Environment:* Be sure you are set up to use BitBake
- in a shell. See the ":ref:`dev-manual/start:preparing the build host`"
- 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.
- #. *Clone the poky Repository:* You need to have a local copy of the
- Yocto Project :term:`Source Directory` (i.e. a local
- ``poky`` repository). See the
- ":ref:`dev-manual/start:cloning the \`\`poky\`\` repository`" and
- possibly the
- ":ref:`dev-manual/start:checking out by branch in poky`" or
- ":ref:`dev-manual/start:checking out by tag in poky`"
- sections
- all in the Yocto Project Development Tasks Manual for information on
- how to clone the ``poky`` repository and check out the appropriate
- branch for your work.
- #. *Determine the BSP Layer You Want:* 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
- :yocto_dl:`index of machines </releases/yocto/&DISTRO_REL_LATEST_TAG;/machines>`
- for the release.
- #. *Optionally Clone the meta-intel BSP Layer:* If your hardware is
- based on current Intel CPUs and devices, you can leverage this BSP
- layer. For details on the ``meta-intel`` BSP layer, see the layer's
- :yocto_git:`README </meta-intel/tree/README>` file.
- #. *Navigate to Your Source Directory:* Typically, you set up the
- ``meta-intel`` Git repository inside the :term:`Source Directory` (e.g.
- ``poky``). ::
- $ cd /home/you/poky
- #. *Clone the Layer:* ::
- $ 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.
- #. *Check Out the Proper Branch:* The branch you check out for
- ``meta-intel`` must match the same branch you are using for the
- Yocto Project release (e.g. ``&DISTRO_NAME_NO_CAP;``)::
- $ 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;'
- .. note::
- To see the available branch names in a cloned repository, use the ``git
- branch -al`` command. See the
- ":ref:`dev-manual/start:checking out by branch in poky`"
- section in the Yocto Project Development Tasks Manual for more
- information.
- #. *Optionally Set Up an Alternative BSP Layer:* If your hardware can be
- more closely leveraged to an existing BSP not within the
- ``meta-intel`` BSP layer, you can clone that BSP layer.
- The process is identical to the process used for the ``meta-intel``
- layer except for the layer's name. For example, if you determine that
- your hardware most closely matches the ``meta-raspberrypi``, clone
- that layer::
- $ 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.
- #. *Initialize the Build Environment:* While in the root directory of
- the Source Directory (i.e. ``poky``), run the
- :ref:`ref-manual/structure:``oe-init-build-env``` environment
- setup script to define the OpenEmbedded build environment on your
- build host. ::
- $ source oe-init-build-env
- Among other things, the script creates the :term:`Build Directory`, which is
- ``build`` in this case and is located in the :term:`Source Directory`. After
- the script runs, your current working directory is set to the ``build``
- directory.
- Example Filesystem Layout
- =========================
- 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.
- 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 simple
- to extract information and convert it to other formats if required. The
- OpenEmbedded build system, through its standard :ref:`layers mechanism
- <overview-manual/yp-intro:the yocto project layer model>`, 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.
- 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 be combined in certain end products.
- Before looking at the recommended form for the directory structure
- inside a BSP layer, you should be aware that there are some requirements
- in order for a BSP layer to be considered compliant with the Yocto
- Project. For that list of requirements, see the
- ":ref:`bsp-guide/bsp:released bsp requirements`" section.
- Below is the typical directory structure for a BSP layer. While this
- basic form represents the standard, realize that the actual layout for
- individual BSPs could differ. ::
- meta-bsp_root_name/
- meta-bsp_root_name/bsp_license_file
- meta-bsp_root_name/README
- meta-bsp_root_name/README.sources
- meta-bsp_root_name/binary/bootable_images
- meta-bsp_root_name/conf/layer.conf
- meta-bsp_root_name/conf/machine/*.conf
- meta-bsp_root_name/recipes-bsp/*
- meta-bsp_root_name/recipes-core/*
- meta-bsp_root_name/recipes-graphics/*
- meta-bsp_root_name/recipes-kernel/linux/linux-yocto_kernel_rev.bbappend
- Below is an example of the Raspberry Pi BSP layer that is available from
- the :yocto_git:`Source Repositories <>`:
- .. code-block:: none
- 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_%.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
- The following sections describe each part of the proposed BSP format.
- License Files
- -------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/bsp_license_file
- 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 ``COPYING.MIT`` file.
- 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 ":ref:`dev-manual/licenses:maintaining open source license compliance during your product's lifecycle`"
- section in the Yocto Project Development Tasks Manual.
- README File
- -----------
- You can find this file in the BSP Layer at::
- meta-bsp_root_name/README
- This file provides information on how to boot the live images that are
- optionally included in the ``binary/`` directory. The ``README`` file
- also provides information needed for building the image.
- At a minimum, the ``README`` 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.
- README.sources File
- -------------------
- You can find this file in the BSP Layer at::
- meta-bsp_root_name/README.sources
- This file provides information on where to locate the BSP source files
- used to build the images (if any) that reside in
- ``meta-bsp_root_name/binary``. Images in the ``binary`` would be images
- released with the BSP. The information in the ``README.sources`` file
- also helps you find the :term:`Metadata`
- used to generate the images that ship with the BSP.
- .. note::
- If the BSP's ``binary`` directory is missing or the directory has no images, an
- existing ``README.sources`` file is meaningless and usually does not exist.
- Pre-built User Binaries
- -----------------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/binary/bootable_images
- 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 :yocto_home:`Yocto Project <>` website. You can
- use these kernels and images to get a system running and quickly get
- started on development tasks.
- The exact types of binaries present are highly hardware-dependent. The
- :ref:`README <bsp-guide/bsp:readme file>` file should be present in the
- BSP Layer and it explains how to use the images with the target
- hardware. Additionally, the
- :ref:`README.sources <bsp-guide/bsp:readme.sources file>` file should be
- present to locate the sources used to build the images and provide
- information on the Metadata.
- Layer Configuration File
- ------------------------
- You can find this file in the BSP Layer at::
- meta-bsp_root_name/conf/layer.conf
- The ``conf/layer.conf`` 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
- "bsp" with the actual name of the BSP (i.e. "bsp_root_name" from the example
- template). ::
- # We have a conf and classes directory, add 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 += "bsp"
- BBFILE_PATTERN_bsp = "^${LAYERDIR}/"
- BBFILE_PRIORITY_bsp = "6"
- LAYERDEPENDS_bsp = "intel"
- To illustrate the string substitutions, here are the corresponding
- statements from the Raspberry Pi ``conf/layer.conf`` file::
- # 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"
- .
- .
- .
- This file simply makes :term:`BitBake` aware of the recipes and configuration
- directories. The file must exist so that the OpenEmbedded build system can
- recognize the BSP.
- Hardware Configuration Options
- ------------------------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/conf/machine/*.conf
- 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
- :term:`MACHINE` variable.
- These files define things such as the kernel package to use
- (:term:`PREFERRED_PROVIDER` of
- :ref:`virtual/kernel <dev-manual/new-recipe:using virtual providers>`),
- 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.
- 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.
- Tuning files are found in the ``meta/conf/machine/include`` directory
- within the :term:`Source Directory`.
- For example, many ``tune-*`` files (e.g. ``tune-arm1136jf-s.inc``,
- ``tune-1586-nlp.inc``, and so forth) reside in the
- ``poky/meta/conf/machine/include`` directory.
- To use an include file, you simply include them in the machine
- configuration file. For example, the Raspberry Pi BSP
- ``raspberrypi3.conf`` contains the following statement::
- include conf/machine/include/rpi-base.inc
- Miscellaneous BSP-Specific Recipe Files
- ---------------------------------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/recipes-bsp/*
- 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 ``formfactor_%.bbappend`` 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 ``machconfig`` file further down in the
- directory. Here is the ``machconfig`` file for the Raspberry Pi BSP::
- HAVE_TOUCHSCREEN=0
- HAVE_KEYBOARD=1
- DISPLAY_CAN_ROTATE=0
- DISPLAY_ORIENTATION=0
- DISPLAY_DPI=133
- .. note::
- 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
- ``meta/recipes-bsp/formfactor/formfactor_0.0.bb``, which is found in
- the :term:`Source Directory`.
- Display Support Files
- ---------------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/recipes-graphics/*
- 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.
- Linux Kernel Configuration
- --------------------------
- You can find these files in the BSP Layer at::
- meta-bsp_root_name/recipes-kernel/linux/linux*.bbappend
- meta-bsp_root_name/recipes-kernel/linux/*.bb
- Append files (``*.bbappend``) modify the main kernel recipe being used
- to build the image. The ``*.bb`` 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.
- For your BSP, you typically want to use an existing Yocto Project kernel
- recipe found in the :term:`Source Directory`
- at
- ``meta/recipes-kernel/linux``. 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
- ``meta-bsp_root_name/recipes-kernel/linux`` directory).
- Suppose you are using the ``linux-yocto_4.4.bb`` recipe to build the
- kernel. In other words, you have selected the kernel in your
- ``"bsp_root_name".conf`` file by adding
- :term:`PREFERRED_PROVIDER` and :term:`PREFERRED_VERSION`
- statements as follows::
- PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
- PREFERRED_VERSION_linux-yocto ?= "4.4%"
- .. note::
- When the preferred provider is assumed by default, the :term:`PREFERRED_PROVIDER`
- statement does not appear in the ``"bsp_root_name".conf`` file.
- You would use the ``linux-yocto_4.4.bbappend`` file to append specific
- BSP settings to the kernel, thus configuring the kernel for your
- particular BSP.
- You can find more information on what your append file should contain in
- the ":ref:`kernel-dev/common:creating the append file`" section
- in the Yocto Project Linux Kernel Development Manual.
- 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
- ``recipes-kernel/linux`` directory you see the following::
- linux-raspberrypi-dev.bb
- linux-raspberrypi.inc
- linux-raspberrypi_4.14.bb
- linux-raspberrypi_4.9.bb
- The directory contains three kernel recipes and a common include file.
- Developing a Board Support Package (BSP)
- ========================================
- This section describes the high-level procedure you can follow to create
- a BSP. Although not required for BSP creation, the ``meta-intel``
- repository, which contains many BSPs supported by the Yocto Project, is
- part of the example.
- For an example that shows how to create a new layer using the tools, see
- the ":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
- section.
- The following illustration and list summarize the BSP creation general
- workflow.
- .. image:: figures/bsp-dev-flow.png
- :align: center
- :width: 70%
- #. *Set up Your Host Development System to Support Development Using the
- Yocto Project*: See the ":ref:`dev-manual/start:preparing the build host`"
- section in the Yocto Project Development Tasks Manual for options on how to
- get a system ready to use the Yocto Project.
- #. *Establish the meta-intel Repository on Your System:* 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
- ":ref:`bsp-guide/bsp:preparing your build host to work with bsp layers`"
- section.
- #. *Create Your Own BSP Layer Using the bitbake-layers Script:*
- 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
- ``bitbake-layers`` script. For information about that script, see the
- ":ref:`bsp-guide/bsp:creating a new bsp layer using the \`\`bitbake-layers\`\` script`"
- section.
- 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 ":ref:`overview-manual/yp-intro:the yocto project layer model`"
- section in the Yocto Project Overview and Concepts Manual. You can also
- reference the ":ref:`dev-manual/layers:understanding and creating layers`"
- section in the Yocto Project Development Tasks Manual. For more
- information on BSP layers, see the ":ref:`bsp-guide/bsp:bsp layers`"
- section.
- .. note::
- - There are three hardware reference BSPs in the Yocto
- Project release, located in the ``poky/meta-yocto-bsp``
- BSP layer:
- - Texas Instruments Beaglebone (``beaglebone-yocto``)
- - Two generic IA platforms (``genericx86`` and ``genericx86-64``)
- When you set up a layer for a new BSP, you should follow a standard
- layout. This layout is described in the ":ref:`bsp-guide/bsp:example filesystem layout`"
- 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 ``meta-intel`` layer inside the Source Directory.
- #. *Make Configuration Changes to Your New BSP Layer:* The standard BSP
- layer structure organizes the files you need to edit in ``conf`` and
- several ``recipes-*`` 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
- ``bitbake-layers`` script, you are able to interactively configure
- many things for the BSP (e.g. keyboard, touchscreen, and so forth).
- #. *Make Recipe Changes to Your New BSP Layer:* Recipe changes include
- altering recipes (``*.bb`` files), removing recipes you do not use,
- and adding new recipes or append files (``.bbappend``) that support
- your hardware.
- #. *Prepare for the Build:* 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. ``oe-init-build-env``) and you need to be sure two
- key configuration files are configured appropriately: the
- ``conf/local.conf`` and the ``conf/bblayers.conf`` file. You must
- make the OpenEmbedded build system aware of your new layer. See the
- ":ref:`dev-manual/layers:enabling your layer`"
- section in the Yocto Project Development Tasks Manual for information
- on how to let the build system know about your new layer.
- #. *Build the Image:* 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
- :doc:`BitBake User Manual <bitbake:index>`.
- The build process supports several types of images to satisfy
- different needs. See the
- ":ref:`ref-manual/images:Images`" chapter in the Yocto
- Project Reference Manual for information on supported images.
- Requirements and Recommendations for Released BSPs
- ==================================================
- This section describes requirements and recommendations for a released
- BSP to be considered compliant with the Yocto Project.
- Released BSP Requirements
- -------------------------
- Before looking at BSP requirements, you should consider the following:
- - 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
- ":ref:`bsp-guide/bsp:bsp layers`" section in this manual and the
- ":ref:`dev-manual/layers:understanding and creating layers`"
- section in the Yocto Project Development Tasks Manual.
- - 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 ":yocto_wiki:`Third Party BSP Release
- Process </Third_Party_BSP_Release_Process>`"
- wiki page.
- - 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.
- - 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, there is no requirement
- dictating that a specific kernel or kernel version be used in a given
- BSP.
- The requirements for a released BSP that conform to the Yocto Project are:
- - *Layer Name:* The BSP must have a layer name that follows the Yocto
- Project standards. For information on BSP layer names, see the
- ":ref:`bsp-guide/bsp:bsp layers`" section.
- - *File System Layout:* When possible, use the same directory names in
- your BSP layer as listed in the ``recipes.txt`` file, which is found
- in ``poky/meta`` directory of the :term:`Source Directory`
- or in the OpenEmbedded-Core Layer (``openembedded-core``) at
- :oe_git:`/openembedded-core/tree/meta`.
- You should place recipes (``*.bb`` files) and recipe modifications
- (``*.bbappend`` files) into ``recipes-*`` subdirectories by
- functional area as outlined in ``recipes.txt``. If you cannot find a
- category in ``recipes.txt`` to fit a particular recipe, you can make
- up your own ``recipes-*`` subdirectory.
- Within any particular ``recipes-*`` category, the layout should match
- what is found in the OpenEmbedded-Core Git repository
- (``openembedded-core``) or the Source Directory (``poky``). In other
- words, make sure you place related files in appropriately-related
- ``recipes-*`` 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 found in the ":doc:`../contributor-guide/recipe-style-guide`"
- in the Yocto Project and OpenEmbedded Contributor Guide.
- - *License File:* You must include a license file in the
- ``meta-bsp_root_name`` directory. This license covers the BSP
- Metadata as a whole. You must specify which license to use since no
- default license exists. See the
- :yocto_git:`COPYING.MIT </meta-raspberrypi/tree/COPYING.MIT>`
- file for the Raspberry Pi BSP in the ``meta-raspberrypi`` BSP layer
- as an example.
- - *README File:* You must include a ``README`` file in the
- ``meta-bsp_root_name`` directory. See the
- :yocto_git:`README.md </meta-raspberrypi/tree/README.md>`
- file for the Raspberry Pi BSP in the ``meta-raspberrypi`` BSP layer
- as an example.
- At a minimum, the ``README`` file should contain the following:
- - A brief description of the target hardware.
- - A list of all the dependencies of the BSP. 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.
- - 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.
- - 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
- :doc:`../contributor-guide/submit-changes` section in the Yocto Project and
- OpenEmbedded Contributor Guide.
- - Instructions on how to build the BSP using the BSP layer.
- - Instructions on how to boot the BSP build from the BSP layer.
- - Instructions on how to boot the binary images contained in the
- ``binary`` directory, if present.
- - Information on any known bugs or issues that users should know
- about when either building or booting the BSP binaries.
- - *README.sources File:* If your BSP contains binary images in the
- ``binary`` directory, you must include a ``README.sources`` file in
- the ``meta-bsp_root_name`` directory. This file specifies exactly
- where you can find the sources used to generate the binary images.
- - *Layer Configuration File:* You must include a ``conf/layer.conf``
- file in the ``meta-bsp_root_name`` directory. This file identifies
- the ``meta-bsp_root_name`` BSP layer as a layer to the build
- system.
- - *Machine Configuration File:* You must include one or more
- ``conf/machine/bsp_root_name.conf`` files in the
- ``meta-bsp_root_name`` 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 ``README`` 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. ``meta-yocto-bsp`` layer). Such considerations
- are outside the scope of this document.
- Released BSP Recommendations
- ----------------------------
- Here are recommendations for released BSPs that conform to the
- Yocto Project:
- - *Bootable Images:* Released BSPs can contain one or more bootable
- images. Including bootable images allows users to easily try out the
- BSP using their own hardware.
- 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.
- 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
- ``binary/`` subdirectory located in the ``meta-bsp_root_name``
- 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.
- - *Use a Yocto Linux Kernel:* 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 ``Yocto Linux Kernel`` category in the
- :yocto_git:`Source Repositories <>` for these kernels.
- Customizing a Recipe for a BSP
- ==============================
- If you plan on customizing a recipe for a particular BSP, you need to do
- the following:
- - Create a ``*.bbappend`` file for the modified recipe. For information on using
- append files, see the
- ":ref:`dev-manual/layers:appending other layers metadata with your layer`"
- section in the Yocto Project Development Tasks Manual.
- - 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.
- - 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. ``recipes-bsp``, ``recipes-graphics``, ``recipes-core``,
- and so forth).
- - 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.
- Here is a specific example to help you better understand the
- process. This example customizes a recipe by adding a
- BSP-specific configuration file named ``interfaces`` to the
- ``init-ifupdown_1.0.bb`` recipe for machine "xyz" where the BSP layer
- also supports several other machines:
- #. Edit the ``init-ifupdown_1.0.bbappend`` file so that it contains the
- following::
- FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
- The append file needs to be in the ``meta-xyz/recipes-core/init-ifupdown``
- directory.
- #. Create and place the new ``interfaces`` configuration file in the
- BSP's layer here::
- meta-xyz/recipes-core/init-ifupdown/files/xyz-machine-one/interfaces
- .. note::
- If the ``meta-xyz`` layer did not support multiple machines, you would place
- the interfaces configuration file in the layer here::
- meta-xyz/recipes-core/init-ifupdown/files/interfaces
- The :term:`FILESEXTRAPATHS` 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 ``files`` directory in the same location as
- your append file.
- BSP Licensing Considerations
- ============================
- 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.
- 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.
- 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 :yocto_home:`Yocto Project Website <>` 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.
- There are two different methods within the OpenEmbedded build system to
- satisfy the licensing requirements for an encumbered BSP. The following
- list describes them in order of preference:
- #. *Use the LICENSE_FLAGS Variable to Define the Recipes that Have Commercial or
- Other Types of Specially-Licensed Packages:* For each of those recipes, you can
- specify a matching license string in a ``local.conf`` variable named
- :term:`LICENSE_FLAGS_ACCEPTED`.
- 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
- ":ref:`dev-manual/licenses:enabling commercially licensed recipes`"
- section in the Yocto Project Development Tasks Manual for details on
- how to use these variables.
- If you build as you normally would, without specifying any recipes in
- the :term:`LICENSE_FLAGS_ACCEPTED` variable, 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 :term:`LICENSE_FLAGS_ACCEPTED` variable. Once you
- enter the appropriate license flags into it, restart the build to continue
- where it left off. During the build, the prompt will not appear again since
- you have satisfied the requirement.
- Once the appropriate license flags are on the white list in the
- :term:`LICENSE_FLAGS_ACCEPTED` variable, you can build the encumbered
- image with no change at all to the normal build process.
- #. *Get a Pre-Built Version of the BSP:* You can get this type of BSP by
- selecting the "DOWNLOADS" item from the "SOFTWARE" tab on the
- :yocto_home:`Yocto Project website <>`. 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
- :term:`LICENSE_FLAGS_ACCEPTED` to match the encumbered recipes in the
- BSP.
- .. 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.
- Creating a new BSP Layer Using the ``bitbake-layers`` Script
- ============================================================
- The ``bitbake-layers create-layer`` script automates creating a BSP
- layer. What makes a layer a "BSP layer" is the presence of at least one
- 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.
- Use these steps to create a BSP layer:
- - *Create a General Layer:* Use the ``bitbake-layers`` script with the
- ``create-layer`` subcommand to create a new general layer. For
- instructions on how to create a general layer using the
- ``bitbake-layers`` script, see the
- ":ref:`dev-manual/layers:creating a general layer using the \`\`bitbake-layers\`\` script`"
- section in the Yocto Project Development Tasks Manual.
- - *Create a Layer Configuration File:* 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 ``layer.conf`` files in the Yocto Project
- :yocto_git:`Source Repositories <>`. To get examples of what you need
- in your configuration file, locate a layer (e.g. "meta-ti") and
- examine the
- :yocto_git:`local.conf </meta-ti/tree/meta-ti-bsp/conf/layer.conf>`
- file.
- - *Create a Machine Configuration File:* Create a
- ``conf/machine/bsp_root_name.conf`` file. See
- :yocto_git:`meta-yocto-bsp/conf/machine </poky/tree/meta-yocto-bsp/conf/machine>`
- for sample ``bsp_root_name.conf`` files. There are other samples such as
- :yocto_git:`meta-ti </meta-ti/tree/meta-ti-bsp/conf/machine>`
- and
- :yocto_git:`meta-freescale </meta-freescale/tree/conf/machine>`
- from other vendors that have more specific machine and tuning
- examples.
- - *Create a Kernel Recipe:* Create a kernel recipe in
- ``recipes-kernel/linux`` by either using a kernel append file or a
- new custom kernel recipe file (e.g. ``linux-yocto_4.12.bb``). The BSP
- layers mentioned in the previous step also contain different kernel
- examples. See the ":ref:`kernel-dev/common:modifying an existing recipe`"
- section in the Yocto Project Linux Kernel Development Manual for
- information on how to create a custom kernel.
- The remainder of this section provides a description of the Yocto
- Project reference BSP for Beaglebone, which resides in the
- :yocto_git:`meta-yocto-bsp </poky/tree/meta-yocto-bsp>`
- layer.
- BSP Layer Configuration Example
- -------------------------------
- The layer's ``conf`` directory contains the ``layer.conf`` configuration
- file. In this example, the ``conf/layer.conf`` file is the following::
- # We have a conf and classes directory, add 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 += "yoctobsp"
- BBFILE_PATTERN_yoctobsp = "^${LAYERDIR}/"
- BBFILE_PRIORITY_yoctobsp = "5"
- LAYERVERSION_yoctobsp = "4"
- LAYERSERIES_COMPAT_yoctobsp = "&DISTRO_NAME_NO_CAP;"
- 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
- :yocto_git:`Source Repositories <>`.
- For a detailed description of this particular layer configuration file,
- see ":ref:`step 3 <dev-manual/layers:creating your own layer>`"
- in the discussion that describes how to create layers in the Yocto
- Project Development Tasks Manual.
- BSP Machine Configuration Example
- ---------------------------------
- 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.
- There are one or more machine configuration files in the
- ``bsp_layer/conf/machine/`` directory of the layer::
- bsp_layer/conf/machine/machine1\.conf
- bsp_layer/conf/machine/machine2\.conf
- bsp_layer/conf/machine/machine3\.conf
- ... more ...
- For example, the machine configuration file for the `BeagleBone and
- BeagleBone Black development boards <https://beagleboard.org/bone>`__ is
- located in :yocto_git:`poky/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf
- </poky/tree/meta-yocto-bsp/conf/machine/beaglebone-yocto.conf>`::
- #@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"
- MACHINE_EXTRA_RRECOMMENDS = "kernel-modules kernel-devicetree"
- EXTRA_IMAGEDEPENDS += "virtual/bootloader"
- DEFAULTTUNE ?= "cortexa8hf-neon"
- include conf/machine/include/arm/armv7a/tune-cortexa8.inc
- IMAGE_FSTYPES += "tar.bz2 jffs2 wic wic.bmap"
- EXTRA_IMAGECMD:jffs2 = "-lnp "
- WKS_FILE ?= "beaglebone-yocto.wks"
- MACHINE_ESSENTIAL_EXTRA_RDEPENDS += "kernel-image kernel-devicetree"
- do_image_wic[depends] += "mtools-native:do_populate_sysroot dosfstools-native:do_populate_sysroot virtual/bootloader:do_deploy"
- SERIAL_CONSOLES ?= "115200;ttyS0 115200;ttyO0 115200;ttyAMA0"
- PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
- PREFERRED_VERSION_linux-yocto ?= "6.1%"
- KERNEL_IMAGETYPE = "zImage"
- KERNEL_DEVICETREE = "am335x-bone.dtb am335x-boneblack.dtb am335x-bonegreen.dtb"
- KERNEL_EXTRA_ARGS += "LOADADDR=${UBOOT_ENTRYPOINT}"
- PREFERRED_PROVIDER_virtual/bootloader ?= "u-boot"
- SPL_BINARY = "MLO"
- UBOOT_SUFFIX = "img"
- UBOOT_MACHINE = "am335x_evm_defconfig"
- UBOOT_ENTRYPOINT = "0x80008000"
- UBOOT_LOADADDRESS = "0x80008000"
- MACHINE_FEATURES = "usbgadget usbhost vfat alsa"
- IMAGE_BOOT_FILES ?= "u-boot.${UBOOT_SUFFIX} ${SPL_BINARY} ${KERNEL_IMAGETYPE} ${KERNEL_DEVICETREE}"
- # support runqemu
- EXTRA_IMAGEDEPENDS += "qemu-native qemu-helper-native"
- IMAGE_CLASSES += "qemuboot"
- QB_DEFAULT_FSTYPE = "wic"
- QB_FSINFO = "wic:no-kernel-in-fs"
- QB_KERNEL_ROOT = "/dev/vda2"
- QB_SYSTEM_NAME = "qemu-system-arm"
- QB_MACHINE = "-machine virt"
- QB_CPU = "-cpu cortex-a15"
- QB_KERNEL_CMDLINE_APPEND = "console=ttyAMA0 systemd.mask=systemd-networkd"
- QB_OPT_APPEND = "-device virtio-rng-device"
- QB_TAP_OPT = "-netdev tap,id=net0,ifname=@TAP@,script=no,downscript=no"
- QB_NETWORK_DEVICE = "-device virtio-net-device,netdev=net0,mac=@MAC@"
- QB_ROOTFS_OPT = "-drive id=disk0,file=@ROOTFS@,if=none,format=raw -device virtio-blk-device,drive=disk0"
- QB_SERIAL_OPT = ""
- QB_TCPSERIAL_OPT = "-device virtio-serial-device -chardev socket,id=virtcon,port=@PORT@,host=127.0.0.1 -device virtconsole,chardev=virtcon"
- 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.
- 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
- machine's configuration file. In general, you can learn about related
- variables that this example does not have by locating the variables in
- the ":ref:`ref-manual/variables:variables glossary`" in the Yocto
- Project Reference Manual.
- - :term:`PREFERRED_PROVIDER_virtual/xserver <PREFERRED_PROVIDER>`:
- 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", available in
- ``poky/meta/recipes-graphics/xorg-xserver``.
- - :term:`MACHINE_EXTRA_RRECOMMENDS`:
- 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.
- .. tip::
- There are many ``MACHINE*`` variables that help you configure a particular piece
- of hardware.
- - :term:`EXTRA_IMAGEDEPENDS`:
- 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.
- At the end of the file, we also use this setings to implement
- ``runqemu`` support on the host machine.
- - :term:`DEFAULTTUNE`: Machines
- use tunings to optimize machine, CPU, and application performance.
- These features, which are collectively known as "tuning features",
- are set in the :term:`OpenEmbedded-Core (OE-Core)` layer. In this
- example, the default tuning file is :oe_git:`tune-cortexa8
- </openembedded-core/tree/meta/conf/machine/include/arm/armv7a/tune-cortexa8.inc>`.
- .. note::
- The include statement that pulls in the
- ``conf/machine/include/arm/tune-cortexa8.inc`` file provides many tuning
- possibilities.
- - :term:`IMAGE_FSTYPES`: The
- formats the OpenEmbedded build system uses during the build when
- creating the root filesystem. In this example, four types of images
- are supported.
- - :term:`EXTRA_IMAGECMD`:
- Specifies additional options for image creation commands. In this
- example, the "-lnp " option is used when creating the
- :wikipedia:`JFFS2 <JFFS2>` image.
- - :term:`WKS_FILE`: The location of
- the :ref:`Wic kickstart <ref-manual/kickstart:openembedded kickstart (\`\`.wks\`\`) reference>` file used
- by the OpenEmbedded build system to create a partitioned image.
- - ``do_image_wic[depends]``: A task that is constructed during the
- build. In this example, the task depends on specific tools in order
- to create the sysroot when building a Wic image.
- - :term:`SERIAL_CONSOLES`:
- Defines a serial console (TTY) to enable using getty. In this case,
- the baud rate is "115200" and the device name is "ttyO0".
- - :term:`PREFERRED_PROVIDER_virtual/kernel <PREFERRED_PROVIDER>`:
- 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
- ``recipes-kernel/linux`` directory.
- - :term:`PREFERRED_VERSION_linux-yocto <PREFERRED_VERSION>`:
- Defines the version of the recipe used to build the kernel, which is
- "6.1" in this case.
- - :term:`KERNEL_IMAGETYPE`:
- The type of kernel to build for the device. In this case, the
- OpenEmbedded build system creates a "zImage" image type.
- - :term:`KERNEL_DEVICETREE`:
- The names of the generated Linux kernel device trees (i.e. the
- ``*.dtb``) files. All the device trees for the various BeagleBone
- devices are included.
- - :term:`KERNEL_EXTRA_ARGS`:
- Additional ``make`` 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.
- - :term:`SPL_BINARY`: Defines the
- Secondary Program Loader (SPL) binary type. In this case, the SPL
- binary is set to "MLO", which stands for Multimedia card LOader.
- The BeagleBone development board requires an SPL to boot and that SPL
- file type must be MLO. Consequently, the machine configuration needs
- to define :term:`SPL_BINARY` as ``MLO``.
- .. note::
- For more information on how the SPL variables are used, see the
- :yocto_git:`u-boot.inc </poky/tree/meta/recipes-bsp/u-boot/u-boot.inc>`
- include file.
- - :term:`UBOOT_* <UBOOT_ENTRYPOINT>`: 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:
- - :term:`UBOOT_SUFFIX`:
- Points to the generated U-Boot extension.
- - :term:`UBOOT_MACHINE`:
- Specifies the value passed on the make command line when building
- a U-Boot image.
- - :term:`UBOOT_ENTRYPOINT`:
- Specifies the entry point for the U-Boot image.
- - :term:`UBOOT_LOADADDRESS`:
- Specifies the load address for the U-Boot image.
- - :term:`MACHINE_FEATURES`:
- Specifies the list of hardware features the BeagleBone device is
- capable of supporting. In this case, the device supports "usbgadget
- usbhost vfat alsa".
- - :term:`IMAGE_BOOT_FILES`:
- Files installed into the device's boot partition when preparing the
- image using the Wic tool with the ``bootimg-partition`` or
- ``bootimg-efi`` source plugin.
- BSP Kernel Recipe Example
- -------------------------
- The kernel recipe used to build the kernel image for the BeagleBone
- device was established in the machine configuration::
- PREFERRED_PROVIDER_virtual/kernel ?= "linux-yocto"
- PREFERRED_VERSION_linux-yocto ?= "6.1%"
- The ``meta-yocto-bsp/recipes-kernel/linux`` directory in the layer contains
- metadata used to build the kernel. In this case, a kernel append file
- (i.e. ``linux-yocto_6.1.bbappend``) is used to override an established
- kernel recipe (i.e. ``linux-yocto_6.1.bb``), which is located in
- :yocto_git:`/poky/tree/meta/recipes-kernel/linux`.
- The contents of the append file are::
- KBRANCH:genericx86 = "v6.1/standard/base"
- KBRANCH:genericx86-64 = "v6.1/standard/base"
- KBRANCH:beaglebone-yocto = "v6.1/standard/beaglebone"
- KMACHINE:genericx86 ?= "common-pc"
- KMACHINE:genericx86-64 ?= "common-pc-64"
- KMACHINE:beaglebone-yocto ?= "beaglebone"
- SRCREV_machine:genericx86 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
- SRCREV_machine:genericx86-64 ?= "6ec439b4b456ce929c4c07fe457b5d6a4b468e86"
- SRCREV_machine:beaglebone-yocto ?= "423e1996694b61fbfc8ec3bf062fc6461d64fde1"
- COMPATIBLE_MACHINE:genericx86 = "genericx86"
- COMPATIBLE_MACHINE:genericx86-64 = "genericx86-64"
- COMPATIBLE_MACHINE:beaglebone-yocto = "beaglebone-yocto"
- LINUX_VERSION:genericx86 = "6.1.30"
- LINUX_VERSION:genericx86-64 = "6.1.30"
- LINUX_VERSION:beaglebone-yocto = "6.1.20"
- This particular append file works for all the machines that are
- part of the ``meta-yocto-bsp`` 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:
- - :term:`KBRANCH`: Identifies the
- kernel branch that is validated, patched, and configured during the
- build.
- - :term:`KMACHINE`: Identifies the
- machine name as known by the kernel, which is sometimes a different
- name than what is known by the OpenEmbedded build system.
- - :term:`SRCREV`: Identifies the
- revision of the source code used to build the image.
- - :term:`COMPATIBLE_MACHINE`:
- A regular expression that resolves to one or more target machines
- with which the recipe is compatible.
- - :term:`LINUX_VERSION`: The
- Linux version from kernel.org used by the OpenEmbedded build system
- to build the kernel image.
|