Skip to main content

Yocto 1.7 - i.MX6

# Yocto Linux BSP Ver.5 User Guide for i.MX6 Series

Introduction

This guide describes how to set up the build environment and build images for the i.MX6 series Yocto BSP.


# Getting Started

Prerequisites

All operations in this guide are based on Ubuntu 12.04 LTS 64-bit only.
Please install Ubuntu 12.04 LTS 64-bit with at least 2 GB RAM.

  • ISO: ubuntu-12.04.1-desktop-amd64.iso

Install required packages

sudo apt-get install ssh
sudo apt-get install ia32-libs libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 zlib1g-dev:i386 uuid-dev:i386 liblzo2-dev:i386 libncurses5-dev:i386
sudo apt-get install bison build-essential ccache dpkg flex gcc g++ gettext intltool libarchive-zip-perl libfreetype6-dev libdbus-glib-1-dev liborbit2-dev libxml2-dev libx11-dev libgtk2.0-dev liblzo2-2 libtool m4 patch rpm tcl uboot-mkimage uuid zlib1g zlib1g-dev git gnupg flex bison gperf build-essential zip curl libc6-dev libncurses5-dev x11proto-core-dev libx11-dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 gcc-4.6 g++-4.6 cpp-4.6 gcc-4.6-multilib uuid-dev liblzo2-dev uboot-mkimage libarchive-zip-perl wget git-core unzip texinfo gawk diffstat build-essential chrpath 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 xterm
sudo apt-get install libncurses5-dev:i386 liblzo2-dev:i386 uuid-dev:i386
sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
tar zcvf ~/usr_lib_i386-linux-gnu_for_Building_Android_KK.tar.gz /usr/lib/i386-linux-gnu/{libuuid.a,libuuid.so,liblzo2.so,liblzo2.a}
sudo apt-get install uuid-dev liblzo2-dev
sudo tar zxvf ~/usr_lib_i386-linux-gnu_for_Building_Android_KK.tar.gz -C /

Install JDK

Download jdk-6u45-linux-x64.bin from Oracle and put it into ~/FILES/, then:

cd /usr/lib
sudo ~/FILES/jdk-6u45-linux-x64.bin
sudo mkdir jvm
cd jvm
sudo mv ../jdk1.6.0_45 .
cd jdk1.6.0_45/
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.6.0_45/jre/bin/java 2
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.6.0_45/bin/javac 2
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.6.0_45/bin/jar 2
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.6.0_45/bin/javap 2
sudo update-alternatives --install /usr/bin/javadoc javadoc /usr/lib/jvm/jdk1.6.0_45/bin/javadoc 2
sudo update-alternatives --config javap
sudo update-alternatives --config javadoc
sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config jar
cd ~/
sudo sh -c 'echo "JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45" >> /etc/environment'

If you have trouble setting up the build environment, consider using Docker.


Conventions

  • ${PREBUILT_IMAGE} : compressed prebuilt image (*.img.gz)
  • ${BSP_TARBALL} : BSP tarball (*.tgz)
  • ${BSP_HOME} : BSP home directory
  • ${BDIR} : build directory (e.g. build-x11)
  • ${MX6PROC} : i.MX6 processor code (mx6q Quad/Dual, mx6dl Dual Lite/Solo)
  • ${IMX6PROC} : i.MX6 processor name (imx6q / imx6dl)
  • ${BOARD} : target board (ubc220 / rom3420 / rom5420 / rom7420 / rsb4410 / rsb6410 / ubcds31 / wise3310)
  • ${BOARD_REV} : board revision (a1 / a2 / b1)
  • ${MC} : machine code = ${IMX6PROC}${BOARD}${BOARD_REV}
    e.g. imx6dlubc220a1, imx6qrom5420b1
  • ${MEM_SIZE} : memory size (512M / 1G / 2G)
  • ${SD_DEVICE} : SD device node in Ubuntu (e.g. /dev/sdf)
  • ${SDCARD_IMAGE} : sdcard image built by bitbake (*.sdcard)
  • ${UBOOT} : U-Boot version (e.g. 2013.04-r0)
  • ${KERNEL} : Linux kernel version (e.g. 3.14.28-r0)
  • ${POKY} : Yocto poky version (e.g. 1.7)

Introducing BSP

The BSP is based on the Yocto Project with NXP/Freescale enhancements for i.MX6 and Advantech board support.

Naming Rule

  • 7420A1LBV5080_2016-03-09.tgz

    • 7420A1 = ROM-7420 A1
    • LB = Linux BSP
    • V5080 = Version 5.0.80
  • 7420A1LIV5080_DualQuad_2016-03-09.img.gz

    • LI = Linux Image (prebuilt)
    • DualQuad = for Dual/Quad

BSP tarball

tar xvf ${BSP_TARBALL} -C ~/

Prebuilt image

gunzip -c ${PREBUILT_IMAGE} | sudo dd of=${SD_DEVICE} bs=1M
sync

Build Instructions

Create new build environment

cd ${BSP_HOME}
MACHINE=${MC} source fsl-setup-release.sh -b ${BDIR} -e x11

Continue existing build environment

cd ${BSP_HOME}
source setup-environment ${BDIR}

Build sdcard image

bitbake fsl-image-qt5

Output: fsl-image-qt5-${MC}.sdcard

Build toolchain installer

bitbake meta-toolchain-qt5

Output:
poky-eglibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-${POKY}.sh

Build U-Boot

bitbake u-boot-imx

Output: u-boot_crc.bin, u-boot_crc.bin.crc

Build Linux kernel

bitbake linux-imx -c menuconfig   # config
bitbake linux-imx # build

Outputs: zImage, ${IMX6PROC}-${BOARD}-${BOARD_REV}.dtb


Flashing

From prebuilt image

gunzip -c ${PREBUILT_IMAGE} | sudo dd of=${SD_DEVICE} bs=1M
sync

Run on target:

cd /mk_inand
./mksd-linux.sh /dev/mmcblk0

From built sdcard image

pushd ${BSP_HOME}/${BDIR}/tmp/deploy/images/${MC}
sudo dd if=${SDCARD_IMAGE} of=${SD_DEVICE} bs=1M
sync
popd

Insert USB stick with ${SDCARD_IMAGE} and run:

umount /media/mmcblk0p?
cd /media/sda1
sudo dd if=${SDCARD_IMAGE} of=/dev/mmcblk0 bs=4M conv=fsync
P2START=$(fdisk -lu | grep mmcblk0p2 | awk '{print $2}')
echo -e "d
2
n
p
2
${P2START}

w
" | sudo fdisk -u /dev/mmcblk0
sudo e2fsck -f -y /dev/mmcblk0p2
sudo resize2fs /dev/mmcblk0p2
sudo poweroff

Customization

Add tcf-agent & sftp

Edit fsl-image-adv.inc:

IMAGE_INSTALL += " tcf-agent openssh-sftp-server "

Add Chromium

Edit local.conf:

CORE_IMAGE_EXTRA_INSTALL += "chromium"
LICENSE_FLAGS_WHITELIST = "commercial"

SDK

Build installer, then run:

cd ${BSP_HOME}/${BDIR}/tmp/deploy/sdk
sudo ./poky-eglibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-${POKY}.sh

Cross-compile environment

source /opt/poky/${POKY}/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi

Manual U-Boot

Copy sources:

mkdir -p ~/code
cp -a ${BSP_HOME}/${BDIR}/tmp/work/${MC}-poky-linux-gnueabi/u-boot-imx/${UBOOT}/git ~/code/u-boot-imx
cd ~/code/u-boot-imx
make distclean
make ${MX6PROC}${BOARD}${BOARD_REV}_${MEM_SIZE}_config
make -j4 LDFLAGS=

Flash:

sudo dd if=u-boot_crc.bin.crc of=${SD_DEVICE} bs=512 seek=2 conv=fsync
sudo dd if=u-boot-crc.bin of=${SD_DEVICE} bs=512 seek=3 conv=fsync

Manual Kernel

mkdir -p ~/code
cp -a ${BSP_HOME}/${BDIR}/tmp/work/${MC}-poky-linux-gnueabi/linux-imx/${KERNEL}/git ~/code/linux-imx
cd ~/code/linux-imx
make distclean
make imx_v7_adv_defconfig
make menuconfig
make -j4 zImage LOADADDR=0x10008000
make -j4 modules
make modules_install INSTALL_MOD_PATH=~/temp/rootfs
make -j4 ${IMX6PROC}-${BOARD}-${BOARD_REV}.dtb

System Recovery

Recreate SD and re-flash system as described above.