Once you have cloned a Yocto Linux kernel repository and the
cache repository (yocto-kernel-cache
) onto
your development system, you can consider the compilation phase
of kernel development, which is building a kernel image.
Some prerequisites exist that are validated by the build process
before compilation starts:
The
SRC_URI
points to the kernel Git repository.
A BSP build branch with Metadata exists in the
yocto-kernel-cache
repository.
The branch is based on the Yocto Linux kernel version and
has configurations and features grouped under the
yocto-kernel-cache/bsp
directory.
For example, features and configurations for the
BeagleBone Board assuming a
linux-yocto_4.12
kernel reside in the
following area of the yocto-kernel-cache
repository:
yocto-kernel-cache/bsp/beaglebone
yocto-kernel-cache
repository.
The OpenEmbedded build system makes sure these conditions exist before attempting compilation. Other means, however, do exist, such as as bootstrapping a BSP.
Before building a kernel, the build process verifies the tree
and configures the kernel by processing all of the
configuration "fragments" specified by feature descriptions
in the .scc
files.
As the features are compiled, associated kernel configuration
fragments are noted and recorded in the series of directories
in their compilation order.
The fragments are migrated, pre-processed and passed to the
Linux Kernel Configuration subsystem (lkc
) as
raw input in the form of a .config
file.
The lkc
uses its own internal dependency
constraints to do the final processing of that information and
generates the final .config
file that is used
during compilation.
Using the board's architecture and other relevant values from the board's template, kernel compilation is started and a kernel image is produced.
The other thing that you notice once you configure a kernel is that
the build process generates a build tree that is separate from
your kernel's local Git source repository tree.
This build tree has a name that uses the following form, where
${MACHINE}
is the metadata name of the
machine (BSP) and "kernel_type" is one of the Yocto Project
supported kernel types (e.g. "standard"):
linux-${MACHINE}-kernel_type
-build
The existing support in the kernel.org
tree
achieves this default functionality.
This behavior means that all the generated files for a particular
machine or BSP are now in the build tree directory.
The files include the final .config
file,
all the .o
files, the .a
files, and so forth.
Since each machine or BSP has its own separate
Build Directory
in its own separate branch of the Git repository, you can easily
switch between different builds.