Getting Started With Yocto using Repo to build RPM Packages

This document applies to Xilinx Releases v2016.1 and later. 

Table of Contents

Repo is a repository management tool that is built on top of Git. Repo unifies the many Git repositories when necessary, and automates parts of the development workflow. Repo is not meant to replace Git, only to make it easier to work with Git in the context of development.The repo command is an executable Python script that you can put anywhere in your path. In working with the source files, you will use Repo for across-network operations. For example, with a single Repo command you can download files from multiple repositories into your local working directory.
More details about repo tool is present at

Step 1: Preparing the Build Environment

Create an empty directory and step into it

Install sstate-cache if desired

Xilinx provide an sstate-cache for each release which also contains downloads. If you wish to use it, download and extract the tarball 'sstate-rel-v2017.2.tar.gz' (e.g.) here - the directory will be called sstate-rel-v2017.2 (e.g.)

Install Repo

Fetch all sources into an empty directory

Release 2017.1 and above :

where current-release is rel-v2017.1 etc

Release 2016.1 to 2016.4:
where current-release is rel-v2016.3 or rel-v2016.1 etc

Source environment

Edit configuration files

You should be in the 'build' directory at this point. You may need to edit the following files in the 'conf' directory:
  1. Edit bblayers.conf so that it has the appropriate layers for your build.
  2. Edit local.conf to reflect your choices for the build. If using the sstate-cache downloaded above, you need these lines:
    1. SSTATE_DIR ?= "${TOPDIR}/../sstate-rel-v2017.2/aarch64/sstate-cache"
    2. DL_DIR ?= "${TOPDIR}/../sstate-rel-v2017.2/downloads"

Step 2: Build using bitbake

You can choose between 'petalinux-image', 'petalinux-image-minimal' and 'petalinux-image-full' below.

Release 2016.1 to 2016.4:

Below information is applicable only to Releases 2016.1 to 2016.4
  1. Following has to be present in your configuration (local.conf or override.conf)
DISTRO = "petalinux"
PACKAGE_CLASSES = "package_rpm"
TCMODE = "external-xilinx"
XILINX_VER_MAIN = "<current-release>"

EXTERNAL_TOOLCHAIN_zynq = "<path-to-xilinx-SDK>/SDK/<current-version>/gnu/aarch32/lin/gcc-arm-linux-gnueabi"

EXTERNAL_TOOLCHAIN_microblaze = "<path-to-xilinx-SDK>/SDK/<current-version>/gnu/microblaze/linux_toolchain/lin32_le"

EXTERNAL_TOOLCHAIN_aarch64 = "<path-to-xilinx-SDK>/SDK/<current-version>/gnu/aarch64/lin/aarch64-linux"

XILINX_SDK_TOOLCHAIN = "<path-to-xilinx-SDK>/SDK/<current-version>"
<current-version> will be 2016.3, 2016.1 etc
<current-release> will be 2016.3, 2016.1 etc

Re-running bitbake

If you need to run bitbake again, for example if your build failed the first time, locate the oe-init-buildenv script at the top of the 'core' git repository that was downloaded in Step 1. Then run:
$ source path_to_oe-init-buildenv path_to_build_dir
This will set up your paths correctly, and drop you into the build directory. Run Step2 at this point.

Xilinx Yocto