Ka-Ro electronics GmbH Aachen
Ka-Ro electronics GmbH
Pascalstr. 22, D-52076 Aachen, Germany
technologie architects
Home > Produkte > TX-Standard > TX6UL Cortex-A7 > Getting-Started > Yocto Guide - Rocko 

TX6 Setup for Yocto Project 2.4 (Rocko)

The Yocto version of Rocko is the only currently supported version, older versions are neither supported nor recommended for further use.

Users using older Yocto releases should update to the current one using the repo tool, as given below.


This guide is based on the NXP/Freescale Yocto Project User's Guide (IMXLXYOCTOUG)

The instructions for setting up and building Linux in the Yocto Project were adopted to our products and the ARMSDK environment.

Documentation is available online at nxp.com.
i.MX Software and Development Tools

A list of helpful bitbake commands can be found here:
NXP/Freescale - Useful bitbake commands

A cheat sheet for bitbake:
Bitbake Cheat Sheet

Ka-Ro specific sources can, beside our normal git server, also be found on our Github presence:
Ka-Ro @ github

Ka-Ro specific documentation can also be found on our Github presence (@repository: welcome):
Ka-Ro electronics - Documentation Repo @ github

Ka-Ro support can be reached here:


For Yocto a Linux Host Machine is needed.

For this purpose Ka-Ro used to offer a Virtual Appliance, called ARMSDK VM, while this can still be used it's not recommended anymore.

We now recommend to grab a solution from a provider of for virtual appliances like osboxes.org. Like these (recommended: devuan):




An important consideration is the hard disk space required for the virtual appliance. It is recommended that at least 120 GiB is provided, if not 500 GiB.

Should there be not enough space in the VA solution it can always be extended by adding a new HDD to the VM and mounting from a general mount point into the directory structure of development user in the VA, e.g. here.

Host packages

The Yocto framework requires (build) dependencies, packages that need to be installed/available on the host system for the builds like documented herein to pass successfully.

Example for Debian based (e.g. Devuan / Debian / Ubuntu) distribution:

First of all update your local repository:

sudo apt-get update

Install essential Yocto Project host packages:

sudo apt-get install gawk wget git-core diffstat unzip \
texinfo gcc-multilib build-essential chrpath socat

i.MX layers host packages:

sudo apt-get install libsdl1.2-dev xterm sed cvs \
subversion coreutils texi2html docbook-utils \
python-pysqlite2 help2man make gcc g++ desktop-file-utils \
libgl1-mesa-dev libglu1-mesa-dev mercurial autoconf \
automake groff curl lzop asciidoc u-boot-tools

Upgrade git version

A git version of ≤ has bugs which will break builds. Please ensure a current version of git is installed.

Check installed version:

git --version

Update your local repository if not already just done before:

sudo apt-get update

Hererafter an upgrade example for users of a VA's with an older Debian (>Wheezy) like the the one Ka-Ro offered.

Upgrade to git version 1.9.1 on ARMSDK-VM v7 - Debian Wheezy:

sudo apt-get remove git
sudo apt-get install git-man/wheezy-backports git/wheezy-backports

Setting up git

After making sure the most recent git version (at least > is available, as described above, the tool should also be configured.

The (non-root) user working directly with the sources needs to be defined. If not defined, either the git tool or the hereafter mentioned repo tool will call this irregularity to the attention of the user. A proper setup is a requirement for the handling of the sources as governed by the git VCS, as git uses these information in conjunction with it's source management features.

Setup git with the commands below:

git config --global user.name "Your Name"
git config --global user.email "Your Email"
git config --list

Setting up the repo utility

The repo tool (available/more here, here and here) is a Google developed and maintained aggregator script, built on top of git. It's intended purpose - in it's origin: Android development - is to simplify handling of distributed project sources (e.g.: kernel, bash, core-utils, etc.) by conflating multiple source repositories into one project framework to create a consistent and repeatably buildable distribution.

Thus does the repo tool complement very well the layered nature of the Yocto Project, making it among other things easier for customers to either just generally expand or add their own layers to the BSP.

To install the repo utility, perform these steps:

mkdir ~/bin
curl http://commondatastorage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo

Yocto Project Setup

The BSP Release directory contains a "sources" directory, which contains the recipes used to build, one or more build directories, and a set of scripts used to set up the environment. The Yocto Project layers are downloaded to the "sources" directory. This sets up the recipes that are used to build the project. The following example shows how to download the BSP recipe layers. For this example, a directory called karo-yocto-rocko is created for the project (usually under a directory like '$HOME/projects/' is recommend).

Use the stable branch "rocko":

mkdir karo-yocto-rocko
cd karo-yocto-rocko
repo init --no-clone-bundle -u https://github.com/karo-electronics/karo-bsp -b rocko
repo sync

When this process is completed, the source code is checked out into the directory "sources" under the working directory (in example above "karo-yocto-rocko").

The above given repo command deviates from the standard command as to overcome an error (specifically a http 404 error) when using 'repo init'. The standard command would be:

repo init -u https://github.com/karo-electronics/karo-bsp -b rocko


User should update the codebase periodically, which can be performed via the following command:

repo sync

After a prolonged timespan an update is strongly recommended.

If errors occur during repo initialization, try deleting the '.repo' directory and running the repo initialization command again.

Choosing a machine

This release supports the following machines. Depending on the target to be compiled choose the machine configuration that matches your TXCOM module.

The user has to differentiate between payload software, like the operating system (GNU/Linux), and the bootloader (U-Boot), thus there are in below given table two different settings for "MACHINE=".

This is an effect for the BSP as the U-Boot bootloader requires a different toolchain to be compiled with.

TXCOM number TXCOM name
NAND Modules
imx6q-tx6-nand TX6Q-1010 (Legacy)
tx6q-1030 TX6Q-1030 TX6Q/1000/1024S/128F
TX6Q-1110 (Legacy)
tx6q-1130 TX6Q-1130 TX6Q/1000/1024S/128F/LVDS
eMMC Modules
imx6q-tx6-emmc tx6q-1036 TX6Q-1036 TX6Q/1000/1024S/8GF
eMMC Modules
imx6qp-tx6-emmc tx6q-8037 TX6Q-8037 TX6QP/800/1GS/8GF/I
tx6q-8137 TX6Q-8137 TX6QP/800/1GS/8GF/LVDS
NAND Modules
imx6dl-tx6-nand TX6U-8010 (Legacy)
tx6u-8030 TX6U-8030 TX6DL/800/1024S/128F/I
TX6U-8110 (Legacy)
tx6u-8130 TX6U-8130 TX6DL/800/1024S/128F/I/LVDS
eMMC Modules
imx6dl-tx6-emmc tx6u-8033 TX6U-8033 TX6DL/800/1024S/4GF/E85
tx6u-8133 TX6U-8133 TX6DL/800/1024S/4GF/E85/LVDS
NAND Modules
imx6dl-tx6-nand tx6s-8034 TX6S-8034 TX6S/800/256S/128F/I
tx6s-8134 TX6S-8134 TX6S/800/256S/128F/I/LVDS
eMMC Modules
imx6dl-tx6-emmc tx6s-8035 TX6S-8035 TX6S/800/512S/4GF/E85
tx6s-8135 TX6S-8135 TX6S/800/512S/4GF/E85/LVDS
NAND Modules
imx6ul-tx6-nand txul-5010 TXUL-0010 (Legacy)
TXUL-5010 TX6UL/528/256S/128F/I
eMMC Modules
imx6ul-tx6-emmc txul-5011 TXUL-0011 (Legacy)
TXUL-5011 TX6UL/528/256S/4GF/E85
eMMC Modules
imx6ull-txul-emmc txul-8013 TXUL-8013 TX6ULL/800/512S/4GF/E85

Set the above given, depending on your intended workload, as value in the machine configuration variable:


Set up the environment

The command to setup of the Yocto environment in it's general form looks like the following:

MACHINE=<MACHINE> source ./setup-environment <build-directory>

Where the user has to insert a value, fitting the desired target TXCOM and software target, from the above table, and choose a name for the build directory to be created by the "setup-environment" script, to look like such:

  • GNU/Linux:

MACHINE=imx6dl-tx6-emmc source ./setup-environment build-gnulinux

  • U-Boot:

MACHINE=tx6u-8033 source ./setup-environment build-bootloader

The user has to differentiate between payload software, like the operating system (GNU/Linux), and the bootloader (U-Boot), thus there are in above given table two different settings for "MACHINE=".

This is an effect for the BSP as the U-Boot bootloader requires a different toolchain to be compiled with.

Choosing an image target

Choose an image target to build, e.g. (for more see below):

  • karo-image-minimal
    This builds a minimal image consisting of:

    1. Kernel (Linux)
      incl. DTB (Device Tree Blob)
    2. RFS (GNU)

  • u-boot
    This builds a minimal image consisting of:

    1. Bootloader (U-Boot)

The RFS (short for: root file system, also: rootfs) in this instance is a low key file system generally intended for either first steps and/or headless systems. It includes all the general standard tools of a GNU/Linux distribution, but misses features like a X11 server, etc.

Additional packages

In Yocto layers provide recipes that provide packages, which themselves can either be specific programs (e.g. bash) or a suite of programs (e.g. Qt SDK). The before mentioned recipes define how these packages are baked (hence: bitbake) into the image.

Additional packages can therefore be added to images by providing an appropriate layer. A comprehensive listing of available, predefined layers can be found (e.g.) here:


Building an image target

bitbake <image>


  • For building core-image-minimal:

bitbake karo-image-minimal

  • For building Linux kernel and kernel modules only:

bitbake linux-karo

  • For building U-Boot only:

bitbake u-boot

  • A BSP with X server and GUI can be configured and built using:

MACHINE=imx6q-tx6-emmc DISTRO=karo-x11 source ./setup-environment build-imx6q-tx6-emmc
bitbake karo-image-x11


To re-initialize the build environment when the session was exited, run the following command in the directory above the build directory:

source ./setup-environment <build directory>

Image Deployment

After a build is complete, the created image resides in the "tmp/deploy/images" sub-directory. An image is, for the most part, specific to the machine set in the environment setup. Each image build creates a U-Boot, a kernel, and an image type based on the IMAGE_FSTYPES defined in the machine configuration file.

The following files are created for Ka-Ro TX modules:

u-boot-<machine>-<version>-.binU-Boot binaries
uImageKernel image
modules-<machine>.tgzKernel modules
© Ka-Ro electronics GmbH, Pascalstr. 22, D-52076 Aachen, Germany