1.2. Building the SDK with Yocto

1.2.1. Introduction

This page provides the steps to build the Processor SDK and individual components from source. The Processor SDK build is based on the Arago Project which provides a set of layers for OpenEmbedded and the Yocto Project targeting TI platforms.

This page will provide the basic steps required to recreate the Processor SDK along with a reference of Processor SDK specific configurations, build targets, and target devices. Also, tips and suggestions are provided along with links for more in-depth information.

1.2.2. Quick Start

1.2.2.1. Prerequisites (One-time setup)

The recommended Linux distribution is Ubuntu 22.04.

The following build host packages are required for Ubuntu. The following command will install the required tools on the Ubuntu Linux distribution.

For Ubuntu 22.04, please run the following:

$ sudo apt-get update
$ # Install packages required for builds
$ sudo apt-get -f -y install \
    git build-essential diffstat texinfo gawk chrpath socat doxygen \
    dos2unix python3 bison flex libssl-dev u-boot-tools mono-devel \
    mono-complete curl python3-distutils repo pseudo python3-sphinx \
    g++-multilib libc6-dev-i386 jq git-lfs pigz zstd liblz4-tool \
    cpio file zstd lz4

By default Ubuntu uses “dash” as the default shell for /bin/sh. You must reconfigure to use bash by running the following command:

sudo dpkg-reconfigure dash

Be sure to select “No” when you are asked to use dash as the default system shell.

Large Swap File

Building large packages, especially several at a time, requires a lot of working memory for a computer. For computers with 32 GB of RAM or more, this should not be a problem. For computers with less RAM, a swap file of ~16GB may be needed to build large packages. Creating a large swap file, or resizing a small swap file to be larger will help avoid build errors for large packages.

Proxy Setup

If working behind a proxy, please see Working Behind a Network Proxy.

1.2.2.2. Build Steps

Please refer to here for the layer configuration (oeconfig-file) for a particular release of Processor SDK Linux AM62Ax. The MACHINE can be set to am62axx-evm, for example.

Note

While building images via Yocto, if you are facing locale.Error: unsupported locale setting error, it means your system is trying to use a locale setting which was not there. Run the following commands which will setup the locale and try building your target image again.

export LC_ALL="en_US.UTF-8"
export LC_CTYPE="en_US.UTF-8"
export LC_NUMERIC="en_US.UTF-8"
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
ulimit -n 4096

Processor SDK Linux AM62Ax uses the ‘oe-layersetup’ tool to configure the meta layers. If you do not have the Linux SDK package installed:

git clone https://git.ti.com/git/arago-project/oe-layersetup.git yocto-build
cd yocto-build

The Linux SDK package also has the above tool cloned at the top level. If you have it installed: .. parsed-literal:

cd <SDK INSTALL DIR>/yocto-build

Then run following commands to setup a yocto build for a specific release version and build the ‘tisdk-edgeai-image’ target.

    ./oe-layertool-setup.sh -f configs/processor-sdk-analytics/processor-sdk-analytics-<version>-config.txt
    cd build
    . conf/setenv
    echo 'ARAGO_BRAND = "edgeai"' >> conf/local.conf
    MACHINE=<machine> bitbake -k tisdk-edgeai-image

.. Note::
    The build will ~250GB of hard disk space for building the tisdk-edgeai-image.

.. note::

    If your computer is frequently crashing while running the bitbake command, edit the
    './conf/local.conf' file and set the variables: BB_NUMBER_THREADS and PARALLEL_MAKE
    to cap the number of threads bitbake can create at a time. By default bitbake tries
    to automatically figure out and set the maximum values for these variables, on your
    system, which may lead to errors.

1.2.3. Processor SDK Build Reference

The following sections provide information for configuration, build options, and supported platforms of the Processor SDK.

1.2.3.1. Layer Configuration

Please refer to here for the layer configuration for a particular release of Processor SDK Linux.

1.2.3.2. Build Options

Images

In addition to individual components packages, the following table provides a list of build targets supported. These are the <target> used in the command:

MACHINE=<machine> bitbake <target>

The “Build Output” is given relative to the deploy-ti directory.

Target

Build Output

Description

tisdk-core-bundle

images/<machine>/tisdk-core-bundle-<machine>.tar.xz

Full SDK

tisdk-default-image

images/<machine>/tisdk-default-image-<machine>.tar.xz

Target Filesystem

tisdk-edgeai-image

images/<machine>/tisdk-edgeai-image-<machine>.tar.xz

Target EdgeAI Filesystem

tisdk-adas-image

images/<machine>/tisdk-adas-image-<machine>.tar.xz

Target Adas Filesystem

tisdk-base-image

images/<machine>/tisdk-base-image-<machine>.tar.xz

Minimal Target Filesytem

tisdk-thinlinux-image

images/<machine>/tisdk-thinlinux-image-<machine>.tar.xz

Minimal Target Filesytem with docker enabled

meta-toolchain-arago-tisdk

sdk/arago-<arago-version>-<architecture>.sh

Linux glibc toolchain

mc:k3r5:meta-toolchain-arago

sdk/arago-<arago-version>-<architecture>.sh

K3R5 baremetal toolchain

Platforms

Please refer to here for the yocto build platforms supported in Processor SDK Linux AM62Ax. These are the <machine> used in the command:

MACHINE=<machine> bitbake <target>

RT Support

Run the command below, before the bitbake build command, to setup a yocto build with RT Linux Kernel:

echo "ARAGO_RT_ENABLE = \"1\"" >> conf/local.conf

This will tell the Arago yocto setup to pick up RT-Linux Kernel when building any images that depend on the Kernel. Alternatively, one can directly build the RT Kernel using below:

MACHINE=<machine> bitbake linux-ti-staging-rt

1.2.3.3. Recipes

Recipe Basics

One or more recipes can be specified for the <target> for greater granularity of recipe development and debug. Specifying a recipe name, minus the version (if the version is appended to the name), will build the recipe and all its dependencies.

For example, the command below builds only the jailhouse recipe and all the dependencies it defines.

MACHINE=<machine> bitbake jailhouse

After the bitbake command above is successfully done, arago-tmp-[toolchain]/work/<machine>-linux/jailhouse directory will be available including the original source code under the git folder, independent shared objects (.so files) under packages-split folder, and IPKs under deploy-ipks folder.

Note

Please note that the output of a recipe can be in another folder under “arago-tmp-[toolchain]/work” directory, depending on the defines of the recipe.

Forced Re-compilation

When needed, source code under the work directory (e.g., arago-tmp-[toolchain]/work/<machine>-linux/jailhouse/git) can be modified. After the modification is done, run the following commands to force recompilation with the new code and rebuilding of the recipe, e.g.,

MACHINE=<machine> bitbake jailhouse --force -c compile

MACHINE=<machine> bitbake jailhouse

Installing Package

To install a modified and rebuilt package, copy the new IPKs from the deploy-ipks folder (e.g., arago-tmp-[toolchain]/work/<machine>-linux/jailhouse/[version]/deploy-ipks) to the target system and then run the following command to install the IPKs:

opkg install [package_ipk].ipk

Cleaning a Built Recipe

A built recipe can be cleaned using:

MACHINE=<machine> bitbake <target> -c cleansstate

or

MACHINE=<machine> bitbake <target> -c cleanall

The cleansstate task will clean recipe’s work directory and remove the recipe’s output from the dependency tree used by other recipe’s during compilation.

1.2.4. See also

General information on Yocto, OpenEmbedded and Arago projects can be found at: