Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

This wiki shows how to create a custom layer in an open source Xilinx Yocto flow.  After creating the layer, it provides an example of creating your own machine based on a ZCU102 configuration.

Releases Supported

Xilinx Yocto rel-v2018.1 and later (Rocko 2.4)

Prerequisites

Yocto Supported Linux Distro

  • Dedicated or virtual Linux machineBare-metal Linux or Virtual Machine
  • Yocto Project Reference Manual: Supported Linux DistributionsDocumentation

Xilinx Tools Dependencies

...

Note

These dependencies are not required for rel-v2018.

...

3 and later releases.

Xilinx Open Source Yocto Installation

Info
titleXilinx Tools Path

Don't forget to edit the path and version variables in local.conf to point to the current SDK root directory.

Creating Your Custom Layer

You may create your custom layer manually by copying an existing layer.conf, however, Yocto provides some helper scripts to automate it.  The bitbake-layers create-layer script will generate a base layer with a default priority of 6.  Once the layer is created, you can either add the layer to bblayers.conf manually or use the bitbake-layers add-layer to automate it.  Note that adding it manually will be faster, but may increase the likelihood of typos or syntax errors.  The sequence below is an example of how to apply these scripts.  You may cut-and-paste the commands below into a local script to further automate this flow.  The resulting layer.conf and bblayers.conf are shown below.

Setup the Bitbake environment.

export LAYER=example # your layer name goes here # From Yocto root directory
Code Block
languagebash
themeMidnight
titleCreate Yocto Layer
Setup Bitbake Environment
source setupsdk
# Optional: MakeBackup alocal.conf backupand copy of bblayers.conf
cp conf/bblayerslocal.conf conf/bblayerslocal.conf.bk
# Optional: Make a backup copy of local.conf
cp conf/localbblayers.conf conf/localbblayers.conf.bk
# Add a default MACHINE in local.conf or specify on the command line for bitbake-layers
echo 'MACHINE ?= "zcu102-zynqmp"' >> conf/local.conf
# Create your layer in the sources directory
cd ../sources
bitbake-layers create-layer meta-$LAYER
# Add new layer with bitbake-layers or edit bblayers.conf manually
cd ../build
bitbake-layers add-layer ../sources/meta-$LAYER
# Create your custom layer directory structure
cd ../sources/meta-

Create your custom layer.

Code Block
languagebash
themeMidnight
titleCreate Custom Yocto Layer
LAYER=$ROOT/sources/meta-example
bitbake-layers create-layer $LAYER
mkdir -p $LAYER/{conf/machine ,recipes-kernel/linux -xlnx,recipes-bsp/{u-boot/u-boot-xlnx
mkdir -p recipes-bsp/,device-tree/files}}
recipes-bsp/hdf/files recipes-bsp/fsbl/files recipes-bsp/pmu-firmware/files
Warning
titlelayer.conf
In releases rel-v2018.1 and rel-v2018.2, edit conf/layer.conf.  If there is a double backward slash “\\” in the BBFILES variable, delete one backward slash, so there is only a single backward slash “\”.  This is required for proper line continuation, otherwise your bbappend files will not be found
bitbake-layers add-layer $LAYER


Note

The environment variable ROOT is defined in the "setupsdk" script.  ROOT is not defined in the Yocto proper "oe-init-build-env" script.

Custom Layer Directory Structure

After the directory structure is created, you can begin populating the layer with recipes, bbappends, patches, cfg fragments, machine configs, etc.  The example.bb recipe is an artifact of the create-layer and can be safely deleted.  You can continue expanding your layer to include recipes for custom BSPs, applications and other open source components or stacks.  At this point, it's pretty straight forward to put your layer under Git control.

Code Block
languagebash
themeMidnight
titlelayer.conf
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"

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

BBFILE_COLLECTIONS += "meta-example"
BBFILE_PATTERN_meta-example = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-example = "6"
Code Block
languagebash
themeMidnight
titlebblayers.conf
LCONF_VERSION = "7"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  /home/emil/yocto/sources/core/meta \
  /home/emil/yocto/sources/core/meta-poky \
<...>
  /home/emil/yocto/sources/core/../meta-xilinx/meta-xilinx-bsp \
  /home/emil/yocto/sources/core/../meta-xilinx/meta-xilinx-contrib \
  /home/emil/yocto/sources/core/../meta-xilinx-tools \
  /home/emil/yocto/sources/core/../meta-petalinux \
  /home/emil/yocto/sources/core/../meta-virtualization \
  /home/emil/yocto/sources/core/../meta-openamp \
  /home/emil/yocto/sources/meta-example \
  "

BBLAYERS_NON_REMOVABLE ?= " \
    /home/emil/yocto/sources/core/meta \
"

Custom Layer Directory Structure

After the directory structure is created, you can begin populating the layer with recipes, bbappends, patches, cfg fragments, machine configs, etc.  The example.bb recipe is an artifact of the create-layer and can be safely deleted.  You can continue expanding your layer to include recipes for custom BSPs, applications and other open source components or stacks.  At this point, it's pretty straight forward to put your layer under Git control.

...

meta-example
$ tree meta-example
meta-example
├── conf
│   ├── layer.conf
│   └── machine
├── COPYING.MIT
├── README
├── recipes-bsp
│   ├── device-tree
│   │   └── files
│   └── u-boot
│       └── u-boot-xlnx
├── recipes-example
│   └── example
│       └── example.bb
└── recipes-kernel
    └── linux-xlnx


Warning

In releases rel-v2018.1 and rel-v2018.2, you may need to edit conf/layer.conf.  If there is a double backward slash “\\” in the BBFILES variable, delete one backward slash, so there is only a single backward slash “\”.  This is required for proper line continuation, otherwise your bbappend files will not be found.

Verify Your Layer

You can verify that your custom layer has been properly added to the Yocto build system by running bitbake-layers show-layers as shown below.

...

Code Block
languagebash
themeMidnight
titleconf/machine/example-zcu102-zynqmp.conf
require conf/machine/zcu102-zynqmp.conf

Now you can build bitbake your new machine by specifying the MACHINE variable on the bitbake command line.

Make sure you have sourced setupsdk and you are in the build directory when bitbaking.
Code Block
languagebash
themeMidnight
titlebitbake
$ MACHINE=example-zcu102-zynqmp bitbake petalinux-image-minimal
Info
titlebitbake

Install and Build with Xilinx Yocto

Adding a Hardware Platform to a Xilinx Yocto Layer

Customizing Device Trees in Xilinx Yocto

Xilinx Yocto Builds without an Internet Connection

References

Yocto Project Mega-Manual (2.4.4)Documentation