Understanding and Running Yocto Build Print


Emcraft Yocto Overview

Emcraft maintains and supports a Yocto distribution and build for the Emcraft i.MX 8M Mini kit. Key features of the Emcraft Yocto distribution are as follows:

  • Based on the NXP i.MX Linux release L5.4.3_1.0.0 distribution.
  • U-Boot version 2019.04.
  • Linux kernel version 5.4.3.
  • Yocto project 3.0 (Zeus).
  • Specifically customized and configured for the Emcraft i.MX 8M Mini kit.
  • Enhanced by Emcraft to provide various advanced capabilities.
  • Build validated explicitly on Fedora 27, Ubuntu 16 and Ubuntu 18 host distributions.
  • Maintained at an Emcraft public Git repositories at https://gitlab.com.


Getting Access to Emcraft Yocto

Emcraft maintains and supports a Yocto layer for the Emcraft i.MX 8M Mini kit in a private repository at https://gitlab.com. This meta-layer is the Emcraft customization of the NXP Yocto build and software baseline for the i.MX 8M Mini microprocessor. The meta-layer is installed on top of the NXP Yocto distribution and build environment.

The Yocto layer for the Emcraft i.MX 8M Mini kit is available at the following gitlab location:
gitlab.com:/emcraft/imx8mm/cube/meta-emcraft-imx8mm.git


Setting Up Yocto Build Linux Host

The Yocto build for the target board is run on a Linux cross-development host. The following Linux hosts are explicitly validated and supported:

  • Fedora 27 and later. Run the command below to install the packages necessary for the Yocto build:

    [psl@i7 ~]$ sudo dnf install gawk make wget tar bzip2 gzip python3 unzip perl patch \
    diffutils diffstat git cpp gcc gcc-c++ glibc-devel texinfo chrpath \
    ccache perl-Data-Dumper perl-Text-ParseWords perl-Thread-Queue perl-bignum socat \
    python3-pexpect findutils which file cpio python python3-pip xz bzip2-devel zlib-devel

  • Ubuntu 16.04 (LTS) and later. Run the command below to install the packages necessary for the Yocto build:

    [psl@u16 ~]$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib \
    build-essential chrpath socat cpio python python3 python3-pip python3-pexpect \
    xz-utils debianutils iputils-ping libbz2-dev libz-dev

    [psl@u16 ~] sudo dpkg-reconfigure dash # Say "No" to use "dash" as the default system shell.


Setting Up Yocto Build

Perform the following step-wise procedure in order to set up the Yocto build for the target board. This procedure is performed only once, at the build setup time:

  1. Add the public ssh key from your build machine to your gitlab account.
  2. In an arbitrary directory on the Linux development host, set up the NXP Linux 5.4.3_1.0.0 Yocto build environment:

    [psl@i7 ~]$ mkdir yocto-build && cd yocto-build
    [psl@i7 yocto-build]$ repo init -u https://source.codeaurora.org/external/imx/imx-manifest -b imx-linux-zeus -m imx-5.4.3-1.0.0.xml
    [psl@i7 yocto-build]$ repo sync
    ...
    [psl@i7 yocto-build]$ ls -l
    lrwxrwxrwx 1 psl psl 43 May 13 16:44 imx-setup-release.sh -> sources/meta-imx/tools/imx-setup-release.sh
    lrwxrwxrwx 1 psl psl 19 May 13 16:44 README -> sources/base/README
    lrwxrwxrwx 1 psl psl 23 May 13 16:44 README-IMXBSP -> sources/meta-imx/README
    lrwxrwxrwx 1 psl psl 30 May 13 16:44 setup-environment -> sources/base/setup-environment
    drwxrwxr-x 14 psl psl 4096 May 16 16:37 sources
    [psl@i7 yocto-build]$

  3. For detailed information on specifics of the NXP Yocto distribution, refer to the NXP Linux 5.4.3 documentation available at: https://www.nxp.com/design/i-mx-developer-resources/i-mx-software-and-development-tools:IMX-SW.

  4. Install the Emcraft meta-emcraft-imx8mm layer on top of the NXP Yocto distribution:

    [psl@i7 yocto-build]$ cd sources
    [psl@i7 sources]$ git clone -b imx8m-ga-5.4.3-pmd https://gitlab.com/emcraft/imx8mm/cube/meta-emcraft-imx8mm.git
    ...
    [psl@i7 sources]$ ls -l
    total 48 drwxrwxr-x 4 psl psl 4096 May 13 16:44 base
    drwxrwxr-x 8 psl psl 4096 May 13 16:44 meta-browser
    drwxrwxr-x 7 psl psl 4096 May 14 20:01 meta-emcraft-imx8mm
    drwxrwxr-x 23 psl psl 4096 May 13 16:44 meta-freescale
    drwxrwxr-x 8 psl psl 4096 May 13 16:44 meta-freescale-3rdparty
    drwxrwxr-x 7 psl psl 4096 May 13 16:44 meta-freescale-distro
    drwxrwxr-x 7 psl psl 4096 May 13 16:44 meta-imx
    drwxrwxr-x 14 psl psl 4096 May 13 16:44 meta-openembedded
    drwxrwxr-x 13 psl psl 4096 May 13 16:44 meta-qt5
    drwxrwxr-x 10 psl psl 4096 May 13 16:44 meta-rust
    drwxrwxr-x 6 psl psl 4096 May 13 16:44 meta-timesys
    drwxrwxr-x 12 psl psl 4096 May 13 16:44 poky
    [psl@i7 sources]$ cd ..
    [psl@i7 yocto-build]$

  5. Set up the build directory for the target board machine configuration:

    [psl@i7 yocto-build]$ DISTRO=fsl-imx-wayland MACHINE=imx8mmcube2g EULA=yes source ./imx-setup-release.sh -b build-20191213

    Note: By specifying EULA=yes in the above command you accept the NXP EULA (End User Licensing Agreement) located in sources/meta-freescale/EULA.

  6. Copy meta-emcraft-imx8/conf/local.conf.sample as conf/local.conf to your build directory:

    [psl@i7 build-20191213]$ cp ../sources/meta-emcraft-imx8mm/conf/local.conf.sample conf/local.conf

  7. Edit conf/local.conf and adjust the DL_DIR variable to point to an arbitrary directory on your host. This is where Yocto will download the packages for the build.
  8. Optionally, enable the Yocto Shared State Cache directory (SSTATE_DIR). This will speed up builds.
  9. Add meta-emcraft-imx8mm to the end of conf/bblayers.conf:

    ...
    BBLAYERS += " ${BSPDIR}/sources/meta-openembedded/meta-filesystems "
    BBLAYERS += " ${BSPDIR}/sources/meta-qt5 "
    BBLAYERS += " ${BSPDIR}/sources/meta-emcraft-imx8mm "


Running Yocto Build

Perform the following step-wise procedure in order to run the Yocto build for the target board:

  1. Build the bootable U-Boot, Linux kernel and root filesystem images, as well as the uuu installation tool and script, using the meta-emcraft-imx8mm/recipes-core/images/image-emcraft.bb recipe:
  2. [psl@i7 build-20191213]$ bitbake image-pmd uuu-native
    ...

    Note: If you has opened a new terminal window on the host, or the Linux has been rebooted after the Yocto build directory was set up, the setup-environment script must be used to set up the environment variables and run the build again. The full imx-setup-release.sh is not needed:

    [psl@i7 yocto-build]$ source setup-environment 
    [psl@i7 yocto-build]$

  3. Build the Yocto SDK if neccessary:
  4. [psl@i7 build-20191213]$ bitbake -c populate_sdk image-pmd
    ...


Understanding Yocto Build Product Images

Output of the Yocto build documented in Section: "Running Yocto Build" is a set of the images in tmp/deploy/images/imx8mmcube2g and tmp/deploy/sdk directories:

  • Image - Linux kernel image;
  • imx8mm-cube-tof-a65.dtb - Linux Device Tree Blob (.dtb) image;
  • imx-boot-imx8mmcube2g-sd.bin-flash_evk - U-Boot image;
  • image-pmd-debug-imx8mmcube2g.tar.bz2 - Linux root filesystem image;
  • image-pmd-debug-imx8mmcube2g.sdcard.bz2 - U-Boot, Linux kernel and root filesystem images, ready for installation to eMMC disk using the NXP uuu utility.
  • fsl-imx-wayland-glibc-x86_64-image-pmd-debug-aarch64-toolchain-5.4-zeus.sh - Yocto SDK self-extracting archive.

An archive with pre-built Yocto image and uuu scripts can be downloaded from the following link (requires registration and login): https://emcraft.com/component/jdownloads/view.download/172/1295


Understanding Yocto Build Version

The Yocto build version is defined in the local.conf file as follows:

...
IMX_DISTRO_VERSION = "beta1-20200519"
CONFIG_LINUX_LOCALVERSION = "-${IMX_DISTRO_VERSION}"
CONFIG_UBOOT_LOCALVERSION = "${CONFIG_LINUX_LOCALVERSION}"

On the target, U-Boot reports the version of release running on the target as follows:

U-Boot 2019.04-beta1-20200519+gd62847f248 (May 19 2020 - 13:43:03 +0000)
...

After booting the target, the version will be displayed at the login prompt:

...
i.MX 8M Mini Distro Release beta1-20200519 imx8mmcube2g ttymxc1

imx8mmcube2g login:

From the Linux shell, the version of release running on the target can be obtained as follows:

root@imx8mmcube2g:~# uname -a
Linux imx8mmcube2g 5.4.3-beta1-20200519+ga922dd67988c #1 SMP PREEMPT Tue May 19 10:16:49 UTC 2020 aarch64 aarch64 aarch64 GNU/Linux