862 lines
30 KiB
ReStructuredText
862 lines
30 KiB
ReStructuredText
.. SPDX-License-Identifier: CC-BY-SA-2.0-UK
|
|
|
|
**************************
|
|
Source Directory Structure
|
|
**************************
|
|
|
|
The :term:`Source Directory` consists of numerous files,
|
|
directories and subdirectories; understanding their locations and
|
|
contents is key to using the Yocto Project effectively. This chapter
|
|
describes the Source Directory and gives information about those files
|
|
and directories.
|
|
|
|
For information on how to establish a local Source Directory on your
|
|
development system, see the
|
|
":ref:`dev-manual/start:locating yocto project source files`"
|
|
section in the Yocto Project Development Tasks Manual.
|
|
|
|
.. note::
|
|
|
|
The OpenEmbedded build system does not support file or directory
|
|
names that contain spaces. Be sure that the Source Directory you use
|
|
does not contain these types of names.
|
|
|
|
.. _structure-core:
|
|
|
|
Top-Level Core Components
|
|
=========================
|
|
|
|
This section describes the top-level components of the :term:`Source Directory`.
|
|
|
|
.. _structure-core-bitbake:
|
|
|
|
``bitbake/``
|
|
------------
|
|
|
|
This directory includes a copy of BitBake for ease of use. The copy
|
|
usually matches the current stable BitBake release from the BitBake
|
|
project. BitBake, a :term:`Metadata` interpreter, reads the
|
|
Yocto Project Metadata and runs the tasks defined by that data. Failures
|
|
are usually caused by errors in your Metadata and not from BitBake
|
|
itself.
|
|
|
|
When you run the ``bitbake`` command, the main BitBake executable (which
|
|
resides in the ``bitbake/bin/`` directory) starts. Sourcing the
|
|
environment setup script (i.e. :ref:`structure-core-script`) places
|
|
the ``scripts/`` and ``bitbake/bin/`` directories (in that order) into
|
|
the shell's ``PATH`` environment variable.
|
|
|
|
For more information on BitBake, see the :doc:`BitBake User Manual
|
|
<bitbake:index>`.
|
|
|
|
.. _structure-core-build:
|
|
|
|
``build/``
|
|
----------
|
|
|
|
This directory contains user configuration files and the output
|
|
generated by the OpenEmbedded build system in its standard configuration
|
|
where the source tree is combined with the output. The :term:`Build Directory`
|
|
is created initially when you ``source``
|
|
the OpenEmbedded build environment setup script (i.e.
|
|
:ref:`structure-core-script`).
|
|
|
|
It is also possible to place output and configuration files in a
|
|
directory separate from the :term:`Source Directory` by
|
|
providing a directory name when you ``source`` the setup script. For
|
|
information on separating output from your local Source Directory files
|
|
(commonly described as an "out of tree" build), see the
|
|
":ref:`structure-core-script`" section.
|
|
|
|
.. _handbook:
|
|
|
|
``documentation/``
|
|
------------------
|
|
|
|
This directory holds the source for the Yocto Project documentation as
|
|
well as templates and tools that allow you to generate PDF and HTML
|
|
versions of the manuals. Each manual is contained in its own sub-folder;
|
|
for example, the files for this reference manual reside in the
|
|
``ref-manual/`` directory.
|
|
|
|
.. _structure-core-meta:
|
|
|
|
``meta/``
|
|
---------
|
|
|
|
This directory contains the minimal, underlying OpenEmbedded-Core
|
|
metadata. The directory holds recipes, common classes, and machine
|
|
configuration for strictly emulated targets (``qemux86``, ``qemuarm``,
|
|
and so forth.)
|
|
|
|
.. _structure-core-meta-poky:
|
|
|
|
``meta-poky/``
|
|
--------------
|
|
|
|
Designed above the ``meta/`` content, this directory adds just enough
|
|
metadata to define the Poky reference distribution.
|
|
|
|
.. _structure-core-meta-yocto-bsp:
|
|
|
|
``meta-yocto-bsp/``
|
|
-------------------
|
|
|
|
This directory contains the Yocto Project reference hardware Board
|
|
Support Packages (BSPs). For more information on BSPs, see the
|
|
:doc:`/bsp-guide/index`.
|
|
|
|
.. _structure-meta-selftest:
|
|
|
|
``meta-selftest/``
|
|
------------------
|
|
|
|
This directory adds additional recipes and append files used by the
|
|
OpenEmbedded selftests to verify the behavior of the build system. You
|
|
do not have to add this layer to your ``bblayers.conf`` file unless you
|
|
want to run the selftests.
|
|
|
|
.. _structure-meta-skeleton:
|
|
|
|
``meta-skeleton/``
|
|
------------------
|
|
|
|
This directory contains template recipes for BSP and kernel development.
|
|
|
|
.. _structure-core-scripts:
|
|
|
|
``scripts/``
|
|
------------
|
|
|
|
This directory contains various integration scripts that implement extra
|
|
functionality in the Yocto Project environment (e.g. QEMU scripts). The
|
|
:ref:`structure-core-script` script prepends this directory to the
|
|
shell's ``PATH`` environment variable.
|
|
|
|
The ``scripts`` directory has useful scripts that assist in contributing
|
|
back to the Yocto Project, such as ``create-pull-request`` and
|
|
``send-pull-request``.
|
|
|
|
.. _structure-core-script:
|
|
|
|
``oe-init-build-env``
|
|
---------------------
|
|
|
|
This script sets up the OpenEmbedded build environment. Running this
|
|
script with the ``source`` command in a shell makes changes to ``PATH``
|
|
and sets other core BitBake variables based on the current working
|
|
directory. You need to run an environment setup script before running
|
|
BitBake commands. The script uses other scripts within the ``scripts``
|
|
directory to do the bulk of the work.
|
|
|
|
When you run this script, your Yocto Project environment is set up, a
|
|
:term:`Build Directory` is created, your working
|
|
directory becomes the Build Directory, and you are presented with some
|
|
simple suggestions as to what to do next, including a list of some
|
|
possible targets to build. Here is an example::
|
|
|
|
$ source oe-init-build-env
|
|
|
|
### Shell environment set up for builds. ###
|
|
|
|
You can now run 'bitbake <target>'
|
|
|
|
Common targets are:
|
|
core-image-minimal
|
|
core-image-sato
|
|
meta-toolchain
|
|
meta-ide-support
|
|
|
|
You can also run generated QEMU images with a command like 'runqemu qemux86-64'
|
|
|
|
The default output of the ``oe-init-build-env`` script is from the
|
|
``conf-notes.txt`` file, which is found in the ``meta-poky`` directory
|
|
within the :term:`Source Directory`. If you design a
|
|
custom distribution, you can include your own version of this
|
|
configuration file to mention the targets defined by your distribution.
|
|
See the
|
|
":ref:`dev-manual/custom-template-configuration-directory:creating a custom template configuration directory`"
|
|
section in the Yocto Project Development Tasks Manual for more
|
|
information.
|
|
|
|
By default, running this script without a Build Directory argument
|
|
creates the ``build/`` directory in your current working directory. If
|
|
you provide a Build Directory argument when you ``source`` the script,
|
|
you direct the OpenEmbedded build system to create a Build Directory of
|
|
your choice. For example, the following command creates a Build
|
|
Directory named ``mybuilds/`` that is outside of the :term:`Source Directory`::
|
|
|
|
$ source oe-init-build-env ~/mybuilds
|
|
|
|
The OpenEmbedded build system uses the template configuration files, which
|
|
are found by default in the ``meta-poky/conf/`` directory in the Source
|
|
Directory. See the
|
|
":ref:`dev-manual/custom-template-configuration-directory:creating a custom template configuration directory`"
|
|
section in the Yocto Project Development Tasks Manual for more
|
|
information.
|
|
|
|
.. note::
|
|
|
|
The OpenEmbedded build system does not support file or directory
|
|
names that contain spaces. If you attempt to run the ``oe-init-build-env``
|
|
script from a Source Directory that contains spaces in either the
|
|
filenames or directory names, the script returns an error indicating
|
|
no such file or directory. Be sure to use a Source Directory free of
|
|
names containing spaces.
|
|
|
|
.. _structure-basic-top-level:
|
|
|
|
``LICENSE, README, and README.hardware``
|
|
----------------------------------------
|
|
|
|
These files are standard top-level files.
|
|
|
|
.. _structure-build:
|
|
|
|
The Build Directory - ``build/``
|
|
================================
|
|
|
|
The OpenEmbedded build system creates the :term:`Build Directory`
|
|
when you run the build environment setup
|
|
script :ref:`structure-core-script`. If you do not give the Build
|
|
Directory a specific name when you run the setup script, the name
|
|
defaults to ``build/``.
|
|
|
|
For subsequent parsing and processing, the name of the Build directory
|
|
is available via the :term:`TOPDIR` variable.
|
|
|
|
.. _structure-build-buildhistory:
|
|
|
|
``build/buildhistory/``
|
|
-----------------------
|
|
|
|
The OpenEmbedded build system creates this directory when you enable
|
|
build history via the :ref:`buildhistory <ref-classes-buildhistory>` class file. The directory
|
|
organizes build information into image, packages, and SDK
|
|
subdirectories. For information on the build history feature, see the
|
|
":ref:`dev-manual/build-quality:maintaining build output quality`"
|
|
section in the Yocto Project Development Tasks Manual.
|
|
|
|
.. _structure-build-conf-local.conf:
|
|
|
|
``build/conf/local.conf``
|
|
-------------------------
|
|
|
|
This configuration file contains all the local user configurations for
|
|
your build environment. The ``local.conf`` file contains documentation
|
|
on the various configuration options. Any variable set here overrides
|
|
any variable set elsewhere within the environment unless that variable
|
|
is hard-coded within a file (e.g. by using '=' instead of '?='). Some
|
|
variables are hard-coded for various reasons but such variables are
|
|
relatively rare.
|
|
|
|
At a minimum, you would normally edit this file to select the target
|
|
:term:`MACHINE`, which package types you wish to use
|
|
(:term:`PACKAGE_CLASSES`), and the location from
|
|
which you want to access downloaded files (:term:`DL_DIR`).
|
|
|
|
If ``local.conf`` is not present when you start the build, the
|
|
OpenEmbedded build system creates it from ``local.conf.sample`` when you
|
|
``source`` the top-level build environment setup script
|
|
:ref:`structure-core-script`.
|
|
|
|
The source ``local.conf.sample`` file used depends on the
|
|
``$TEMPLATECONF`` script variable, which defaults to ``meta-poky/conf/``
|
|
when you are building from the Yocto Project development environment,
|
|
and to ``meta/conf/`` when you are building from the OpenEmbedded-Core
|
|
environment. Because the script variable points to the source of the
|
|
``local.conf.sample`` file, this implies that you can configure your
|
|
build environment from any layer by setting the variable in the
|
|
top-level build environment setup script as follows::
|
|
|
|
TEMPLATECONF=your_layer/conf
|
|
|
|
Once the build process gets the sample
|
|
file, it uses ``sed`` to substitute final
|
|
``${``\ :term:`OEROOT`\ ``}`` values for all
|
|
``##OEROOT##`` values.
|
|
|
|
.. note::
|
|
|
|
You can see how the ``TEMPLATECONF`` variable is used by looking at the
|
|
``scripts/oe-setup-builddir`` script in the :term:`Source Directory`.
|
|
You can find the Yocto Project version of the ``local.conf.sample`` file in
|
|
the ``meta-poky/conf`` directory.
|
|
|
|
.. _structure-build-conf-bblayers.conf:
|
|
|
|
``build/conf/bblayers.conf``
|
|
----------------------------
|
|
|
|
This configuration file defines
|
|
:ref:`layers <dev-manual/layers:understanding and creating layers>`,
|
|
which are directory trees, traversed (or walked) by BitBake. The
|
|
``bblayers.conf`` file uses the :term:`BBLAYERS`
|
|
variable to list the layers BitBake tries to find.
|
|
|
|
If ``bblayers.conf`` is not present when you start the build, the
|
|
OpenEmbedded build system creates it from ``bblayers.conf.sample`` when
|
|
you ``source`` the top-level build environment setup script (i.e.
|
|
:ref:`structure-core-script`).
|
|
|
|
As with the ``local.conf`` file, the source ``bblayers.conf.sample``
|
|
file used depends on the ``$TEMPLATECONF`` script variable, which
|
|
defaults to ``meta-poky/conf/`` when you are building from the Yocto
|
|
Project development environment, and to ``meta/conf/`` when you are
|
|
building from the OpenEmbedded-Core environment. Because the script
|
|
variable points to the source of the ``bblayers.conf.sample`` file, this
|
|
implies that you can base your build from any layer by setting the
|
|
variable in the top-level build environment setup script as follows::
|
|
|
|
TEMPLATECONF=your_layer/conf
|
|
|
|
Once the build process gets the sample file, it uses ``sed`` to substitute final
|
|
``${``\ :term:`OEROOT`\ ``}`` values for all ``##OEROOT##`` values.
|
|
|
|
.. note::
|
|
|
|
You can see how the ``TEMPLATECONF`` variable ``scripts/oe-setup-builddir``
|
|
script in the :term:`Source Directory`. You can find the Yocto Project
|
|
version of the ``bblayers.conf.sample`` file in the ``meta-poky/conf/``
|
|
directory.
|
|
|
|
.. _structure-build-conf-sanity_info:
|
|
|
|
``build/cache/sanity_info``
|
|
---------------------------
|
|
|
|
This file indicates the state of the sanity checks and is created during
|
|
the build.
|
|
|
|
.. _structure-build-downloads:
|
|
|
|
``build/downloads/``
|
|
--------------------
|
|
|
|
This directory contains downloaded upstream source tarballs. You can
|
|
reuse the directory for multiple builds or move the directory to another
|
|
location. You can control the location of this directory through the
|
|
:term:`DL_DIR` variable.
|
|
|
|
.. _structure-build-sstate-cache:
|
|
|
|
``build/sstate-cache/``
|
|
-----------------------
|
|
|
|
This directory contains the shared state cache. You can reuse the
|
|
directory for multiple builds or move the directory to another location.
|
|
You can control the location of this directory through the
|
|
:term:`SSTATE_DIR` variable.
|
|
|
|
.. _structure-build-tmp:
|
|
|
|
``build/tmp/``
|
|
--------------
|
|
|
|
The OpenEmbedded build system creates and uses this directory for all
|
|
the build system's output. The :term:`TMPDIR` variable
|
|
points to this directory.
|
|
|
|
BitBake creates this directory if it does not exist. As a last resort,
|
|
to clean up a build and start it from scratch (other than the
|
|
downloads), you can remove everything in the ``tmp`` directory or get
|
|
rid of the directory completely. If you do, you should also completely
|
|
remove the ``build/sstate-cache`` directory.
|
|
|
|
.. _structure-build-tmp-buildstats:
|
|
|
|
``build/tmp/buildstats/``
|
|
-------------------------
|
|
|
|
This directory stores the build statistics.
|
|
|
|
.. _structure-build-tmp-cache:
|
|
|
|
``build/tmp/cache/``
|
|
--------------------
|
|
|
|
When BitBake parses the metadata (recipes and configuration files), it
|
|
caches the results in ``build/tmp/cache/`` to speed up future builds.
|
|
The results are stored on a per-machine basis.
|
|
|
|
During subsequent builds, BitBake checks each recipe (together with, for
|
|
example, any files included or appended to it) to see if they have been
|
|
modified. Changes can be detected, for example, through file
|
|
modification time (mtime) changes and hashing of file contents. If no
|
|
changes to the file are detected, then the parsed result stored in the
|
|
cache is reused. If the file has changed, it is reparsed.
|
|
|
|
.. _structure-build-tmp-deploy:
|
|
|
|
``build/tmp/deploy/``
|
|
---------------------
|
|
|
|
This directory contains any "end result" output from the OpenEmbedded
|
|
build process. The :term:`DEPLOY_DIR` variable points
|
|
to this directory. For more detail on the contents of the ``deploy``
|
|
directory, see the
|
|
":ref:`overview-manual/concepts:images`" and
|
|
":ref:`overview-manual/concepts:application development sdk`" sections in the Yocto
|
|
Project Overview and Concepts Manual.
|
|
|
|
.. _structure-build-tmp-deploy-deb:
|
|
|
|
``build/tmp/deploy/deb/``
|
|
-------------------------
|
|
|
|
This directory receives any ``.deb`` packages produced by the build
|
|
process. The packages are sorted into feeds for different architecture
|
|
types.
|
|
|
|
.. _structure-build-tmp-deploy-rpm:
|
|
|
|
``build/tmp/deploy/rpm/``
|
|
-------------------------
|
|
|
|
This directory receives any ``.rpm`` packages produced by the build
|
|
process. The packages are sorted into feeds for different architecture
|
|
types.
|
|
|
|
.. _structure-build-tmp-deploy-ipk:
|
|
|
|
``build/tmp/deploy/ipk/``
|
|
-------------------------
|
|
|
|
This directory receives ``.ipk`` packages produced by the build process.
|
|
|
|
.. _structure-build-tmp-deploy-licenses:
|
|
|
|
``build/tmp/deploy/licenses/``
|
|
------------------------------
|
|
|
|
This directory receives package licensing information. For example, the
|
|
directory contains sub-directories for ``bash``, ``busybox``, and
|
|
``glibc`` (among others) that in turn contain appropriate ``COPYING``
|
|
license files with other licensing information. For information on
|
|
licensing, see the
|
|
":ref:`dev-manual/licenses:maintaining open source license compliance during your product's lifecycle`"
|
|
section in the Yocto Project Development Tasks Manual.
|
|
|
|
.. _structure-build-tmp-deploy-images:
|
|
|
|
``build/tmp/deploy/images/``
|
|
----------------------------
|
|
|
|
This directory is populated with the basic output objects of the build
|
|
(think of them as the "generated artifacts" of the build process),
|
|
including things like the boot loader image, kernel, root filesystem and
|
|
more. If you want to flash the resulting image from a build onto a
|
|
device, look here for the necessary components.
|
|
|
|
Be careful when deleting files in this directory. You can safely delete
|
|
old images from this directory (e.g. ``core-image-*``). However, the
|
|
kernel (``*zImage*``, ``*uImage*``, etc.), bootloader and other
|
|
supplementary files might be deployed here prior to building an image.
|
|
Because these files are not directly produced from the image, if you
|
|
delete them they will not be automatically re-created when you build the
|
|
image again.
|
|
|
|
If you do accidentally delete files here, you will need to force them to
|
|
be re-created. In order to do that, you will need to know the target
|
|
that produced them. For example, these commands rebuild and re-create
|
|
the kernel files::
|
|
|
|
$ bitbake -c clean virtual/kernel
|
|
$ bitbake virtual/kernel
|
|
|
|
.. _structure-build-tmp-deploy-sdk:
|
|
|
|
``build/tmp/deploy/sdk/``
|
|
-------------------------
|
|
|
|
The OpenEmbedded build system creates this directory to hold toolchain
|
|
installer scripts which, when executed, install the sysroot that matches
|
|
your target hardware. You can find out more about these installers in
|
|
the ":ref:`sdk-manual/appendix-obtain:building an sdk installer`"
|
|
section in the Yocto Project Application Development and the Extensible
|
|
Software Development Kit (eSDK) manual.
|
|
|
|
.. _structure-build-tmp-sstate-control:
|
|
|
|
``build/tmp/sstate-control/``
|
|
-----------------------------
|
|
|
|
The OpenEmbedded build system uses this directory for the shared state
|
|
manifest files. The shared state code uses these files to record the
|
|
files installed by each sstate task so that the files can be removed
|
|
when cleaning the recipe or when a newer version is about to be
|
|
installed. The build system also uses the manifests to detect and
|
|
produce a warning when files from one task are overwriting those from
|
|
another.
|
|
|
|
.. _structure-build-tmp-sysroots-components:
|
|
|
|
``build/tmp/sysroots-components/``
|
|
----------------------------------
|
|
|
|
This directory is the location of the sysroot contents that the task
|
|
:ref:`ref-tasks-prepare_recipe_sysroot`
|
|
links or copies into the recipe-specific sysroot for each recipe listed
|
|
in :term:`DEPENDS`. Population of this directory is
|
|
handled through shared state, while the path is specified by the
|
|
:term:`COMPONENTS_DIR` variable. Apart from a few
|
|
unusual circumstances, handling of the ``sysroots-components`` directory
|
|
should be automatic, and recipes should not directly reference
|
|
``build/tmp/sysroots-components``.
|
|
|
|
.. _structure-build-tmp-sysroots:
|
|
|
|
``build/tmp/sysroots/``
|
|
-----------------------
|
|
|
|
Previous versions of the OpenEmbedded build system used to create a
|
|
global shared sysroot per machine along with a native sysroot. Since
|
|
the 2.3 version of the Yocto Project, there are sysroots in
|
|
recipe-specific :term:`WORKDIR` directories. Thus, the
|
|
``build/tmp/sysroots/`` directory is unused.
|
|
|
|
.. note::
|
|
|
|
The ``build/tmp/sysroots/`` directory can still be populated using the
|
|
``bitbake build-sysroots`` command and can be used for compatibility in some
|
|
cases. However, in general it is not recommended to populate this directory.
|
|
Individual recipe-specific sysroots should be used.
|
|
|
|
.. _structure-build-tmp-stamps:
|
|
|
|
``build/tmp/stamps/``
|
|
---------------------
|
|
|
|
This directory holds information that BitBake uses for accounting
|
|
purposes to track what tasks have run and when they have run. The
|
|
directory is sub-divided by architecture, package name, and version.
|
|
Following is an example::
|
|
|
|
stamps/all-poky-linux/distcc-config/1.0-r0.do_build-2fdd....2do
|
|
|
|
Although the files in the directory are empty of data, BitBake uses the filenames
|
|
and timestamps for tracking purposes.
|
|
|
|
For information on how BitBake uses stamp files to determine if a task
|
|
should be rerun, see the
|
|
":ref:`overview-manual/concepts:stamp files and the rerunning of tasks`"
|
|
section in the Yocto Project Overview and Concepts Manual.
|
|
|
|
.. _structure-build-tmp-log:
|
|
|
|
``build/tmp/log/``
|
|
------------------
|
|
|
|
This directory contains general logs that are not otherwise placed using
|
|
the package's :term:`WORKDIR`. Examples of logs are the output from the
|
|
``do_check_pkg`` or ``do_distro_check`` tasks. Running a build does not
|
|
necessarily mean this directory is created.
|
|
|
|
.. _structure-build-tmp-work:
|
|
|
|
``build/tmp/work/``
|
|
-------------------
|
|
|
|
This directory contains architecture-specific work sub-directories for
|
|
packages built by BitBake. All tasks execute from the appropriate work
|
|
directory. For example, the source for a particular package is unpacked,
|
|
patched, configured and compiled all within its own work directory.
|
|
Within the work directory, organization is based on the package group
|
|
and version for which the source is being compiled as defined by the
|
|
:term:`WORKDIR`.
|
|
|
|
It is worth considering the structure of a typical work directory. As an
|
|
example, consider ``linux-yocto-kernel-3.0`` on the machine ``qemux86``
|
|
built within the Yocto Project. For this package, a work directory of
|
|
``tmp/work/qemux86-poky-linux/linux-yocto/3.0+git1+<.....>``, referred
|
|
to as the :term:`WORKDIR`, is created. Within this directory, the source is
|
|
unpacked to ``linux-qemux86-standard-build`` and then patched by Quilt.
|
|
(See the ":ref:`dev-manual/quilt:using quilt in your workflow`" section in
|
|
the Yocto Project Development Tasks Manual for more information.) Within
|
|
the ``linux-qemux86-standard-build`` directory, standard Quilt
|
|
directories ``linux-3.0/patches`` and ``linux-3.0/.pc`` are created, and
|
|
standard Quilt commands can be used.
|
|
|
|
There are other directories generated within :term:`WORKDIR`. The most
|
|
important directory is ``WORKDIR/temp/``, which has log files for each
|
|
task (``log.do_*.pid``) and contains the scripts BitBake runs for each
|
|
task (``run.do_*.pid``). The ``WORKDIR/image/`` directory is where "make
|
|
install" places its output that is then split into sub-packages within
|
|
``WORKDIR/packages-split/``.
|
|
|
|
.. _structure-build-tmp-work-tunearch-recipename-version:
|
|
|
|
``build/tmp/work/tunearch/recipename/version/``
|
|
-----------------------------------------------
|
|
|
|
The recipe work directory - ``${WORKDIR}``.
|
|
|
|
As described earlier in the
|
|
":ref:`structure-build-tmp-sysroots`" section,
|
|
beginning with the 2.3 release of the Yocto Project, the OpenEmbedded
|
|
build system builds each recipe in its own work directory (i.e.
|
|
:term:`WORKDIR`). The path to the work directory is
|
|
constructed using the architecture of the given build (e.g.
|
|
:term:`TUNE_PKGARCH`, :term:`MACHINE_ARCH`, or "allarch"), the recipe
|
|
name, and the version of the recipe (i.e.
|
|
:term:`PE`\ ``:``\ :term:`PV`\ ``-``\ :term:`PR`).
|
|
|
|
Here are key subdirectories within each recipe work directory:
|
|
|
|
- ``${WORKDIR}/temp``: Contains the log files of each task executed for
|
|
this recipe, the "run" files for each executed task, which contain
|
|
the code run, and a ``log.task_order`` file, which lists the order in
|
|
which tasks were executed.
|
|
|
|
- ``${WORKDIR}/image``: Contains the output of the
|
|
:ref:`ref-tasks-install` task, which corresponds to
|
|
the ``${``\ :term:`D`\ ``}`` variable in that task.
|
|
|
|
- ``${WORKDIR}/pseudo``: Contains the pseudo database and log for any
|
|
tasks executed under pseudo for the recipe.
|
|
|
|
- ``${WORKDIR}/sysroot-destdir``: Contains the output of the
|
|
:ref:`ref-tasks-populate_sysroot` task.
|
|
|
|
- ``${WORKDIR}/package``: Contains the output of the
|
|
:ref:`ref-tasks-package` task before the output is
|
|
split into individual packages.
|
|
|
|
- ``${WORKDIR}/packages-split``: Contains the output of the
|
|
``do_package`` task after the output has been split into individual
|
|
packages. There are subdirectories for each individual package created by
|
|
the recipe.
|
|
|
|
- ``${WORKDIR}/recipe-sysroot``: A directory populated with the target
|
|
dependencies of the recipe. This directory looks like the target
|
|
filesystem and contains libraries that the recipe might need to link
|
|
against (e.g. the C library).
|
|
|
|
- ``${WORKDIR}/recipe-sysroot-native``: A directory populated with the
|
|
native dependencies of the recipe. This directory contains the tools
|
|
the recipe needs to build (e.g. the compiler, Autoconf, libtool, and
|
|
so forth).
|
|
|
|
- ``${WORKDIR}/build``: This subdirectory applies only to recipes that
|
|
support builds where the source is separate from the build artifacts.
|
|
The OpenEmbedded build system uses this directory as a separate build
|
|
directory (i.e. ``${``\ :term:`B`\ ``}``).
|
|
|
|
.. _structure-build-work-shared:
|
|
|
|
``build/tmp/work-shared/``
|
|
--------------------------
|
|
|
|
For efficiency, the OpenEmbedded build system creates and uses this
|
|
directory to hold recipes that share a work directory with other
|
|
recipes. In practice, this is only used for ``gcc`` and its variants
|
|
(e.g. ``gcc-cross``, ``libgcc``, ``gcc-runtime``, and so forth).
|
|
|
|
.. _structure-meta:
|
|
|
|
The Metadata - ``meta/``
|
|
========================
|
|
|
|
As mentioned previously, :term:`Metadata` is the core of the
|
|
Yocto Project. Metadata has several important subdivisions:
|
|
|
|
.. _structure-meta-classes:
|
|
|
|
``meta/classes/``
|
|
-----------------
|
|
|
|
This directory contains the ``*.bbclass`` files. Class files are used to
|
|
abstract common code so it can be reused by multiple packages. Every
|
|
package inherits the :ref:`ref-classes-base` file. Examples of other important
|
|
classes are :ref:`ref-classes-autotools`, which in theory allows any
|
|
Autotool-enabled package to work with the Yocto Project with minimal
|
|
effort. Another example is :ref:`ref-classes-kernel` that contains common code
|
|
and functions for working with the Linux kernel. Functions like image
|
|
generation or packaging also have their specific class files such as
|
|
:ref:`ref-classes-image`, :ref:`ref-classes-rootfs*` and
|
|
:ref:`package*.bbclass <ref-classes-package>`.
|
|
|
|
For reference information on classes, see the
|
|
":doc:`/ref-manual/classes`" chapter.
|
|
|
|
.. _structure-meta-conf:
|
|
|
|
``meta/conf/``
|
|
--------------
|
|
|
|
This directory contains the core set of configuration files that start
|
|
from ``bitbake.conf`` and from which all other configuration files are
|
|
included. See the include statements at the end of the ``bitbake.conf``
|
|
file and you will note that even ``local.conf`` is loaded from there.
|
|
While ``bitbake.conf`` sets up the defaults, you can often override
|
|
these by using the (``local.conf``) file, machine file or the
|
|
distribution configuration file.
|
|
|
|
.. _structure-meta-conf-machine:
|
|
|
|
``meta/conf/machine/``
|
|
----------------------
|
|
|
|
This directory contains all the machine configuration files. If you set
|
|
``MACHINE = "qemux86"``, the OpenEmbedded build system looks for a
|
|
``qemux86.conf`` file in this directory. The ``include`` directory
|
|
contains various data common to multiple machines. If you want to add
|
|
support for a new machine to the Yocto Project, look in this directory.
|
|
|
|
.. _structure-meta-conf-distro:
|
|
|
|
``meta/conf/distro/``
|
|
---------------------
|
|
|
|
The contents of this directory controls any distribution-specific
|
|
configurations. For the Yocto Project, the ``defaultsetup.conf`` is the
|
|
main file here. This directory includes the versions and the :term:`SRCDATE`
|
|
definitions for applications that are configured here. An example of an
|
|
alternative configuration might be ``poky-bleeding.conf``. Although this
|
|
file mainly inherits its configuration from Poky.
|
|
|
|
.. _structure-meta-conf-machine-sdk:
|
|
|
|
``meta/conf/machine-sdk/``
|
|
--------------------------
|
|
|
|
The OpenEmbedded build system searches this directory for configuration
|
|
files that correspond to the value of
|
|
:term:`SDKMACHINE`. By default, 32-bit and 64-bit x86
|
|
files ship with the Yocto Project that support some SDK hosts. However,
|
|
it is possible to extend that support to other SDK hosts by adding
|
|
additional configuration files in this subdirectory within another
|
|
layer.
|
|
|
|
.. _structure-meta-files:
|
|
|
|
``meta/files/``
|
|
---------------
|
|
|
|
This directory contains common license files and several text files used
|
|
by the build system. The text files contain minimal device information
|
|
and lists of files and directories with known permissions.
|
|
|
|
.. _structure-meta-lib:
|
|
|
|
``meta/lib/``
|
|
-------------
|
|
|
|
This directory contains OpenEmbedded Python library code used during the
|
|
build process.
|
|
|
|
.. _structure-meta-recipes-bsp:
|
|
|
|
``meta/recipes-bsp/``
|
|
---------------------
|
|
|
|
This directory contains anything linking to specific hardware or
|
|
hardware configuration information such as "u-boot" and "grub".
|
|
|
|
.. _structure-meta-recipes-connectivity:
|
|
|
|
``meta/recipes-connectivity/``
|
|
------------------------------
|
|
|
|
This directory contains libraries and applications related to
|
|
communication with other devices.
|
|
|
|
.. _structure-meta-recipes-core:
|
|
|
|
``meta/recipes-core/``
|
|
----------------------
|
|
|
|
This directory contains what is needed to build a basic working Linux
|
|
image including commonly used dependencies.
|
|
|
|
.. _structure-meta-recipes-devtools:
|
|
|
|
``meta/recipes-devtools/``
|
|
--------------------------
|
|
|
|
This directory contains tools that are primarily used by the build
|
|
system. The tools, however, can also be used on targets.
|
|
|
|
.. _structure-meta-recipes-extended:
|
|
|
|
``meta/recipes-extended/``
|
|
--------------------------
|
|
|
|
This directory contains non-essential applications that add features
|
|
compared to the alternatives in core. You might need this directory for
|
|
full tool functionality.
|
|
|
|
.. _structure-meta-recipes-gnome:
|
|
|
|
``meta/recipes-gnome/``
|
|
-----------------------
|
|
|
|
This directory contains all things related to the GTK+ application
|
|
framework.
|
|
|
|
.. _structure-meta-recipes-graphics:
|
|
|
|
``meta/recipes-graphics/``
|
|
--------------------------
|
|
|
|
This directory contains X and other graphically related system
|
|
libraries.
|
|
|
|
.. _structure-meta-recipes-kernel:
|
|
|
|
``meta/recipes-kernel/``
|
|
------------------------
|
|
|
|
This directory contains the kernel and generic applications and
|
|
libraries that have strong kernel dependencies.
|
|
|
|
.. _structure-meta-recipes-multimedia:
|
|
|
|
``meta/recipes-multimedia/``
|
|
----------------------------
|
|
|
|
This directory contains codecs and support utilities for audio, images
|
|
and video.
|
|
|
|
.. _structure-meta-recipes-rt:
|
|
|
|
``meta/recipes-rt/``
|
|
--------------------
|
|
|
|
This directory contains package and image recipes for using and testing
|
|
the ``PREEMPT_RT`` kernel.
|
|
|
|
.. _structure-meta-recipes-sato:
|
|
|
|
``meta/recipes-sato/``
|
|
----------------------
|
|
|
|
This directory contains the Sato demo/reference UI/UX and its associated
|
|
applications and configuration data.
|
|
|
|
.. _structure-meta-recipes-support:
|
|
|
|
``meta/recipes-support/``
|
|
-------------------------
|
|
|
|
This directory contains recipes used by other recipes, but that are not
|
|
directly included in images (i.e. dependencies of other recipes).
|
|
|
|
.. _structure-meta-site:
|
|
|
|
``meta/site/``
|
|
--------------
|
|
|
|
This directory contains a list of cached results for various
|
|
architectures. Because certain "autoconf" test results cannot be
|
|
determined when cross-compiling due to the tests not able to run on a
|
|
live system, the information in this directory is passed to "autoconf"
|
|
for the various architectures.
|
|
|
|
.. _structure-meta-recipes-txt:
|
|
|
|
``meta/recipes.txt``
|
|
--------------------
|
|
|
|
This file is a description of the contents of ``recipes-*``.
|