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 (mx6qQuad/Dual,mx6dlDual 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.tgz7420A1= ROM-7420 A1LB= Linux BSPV5080= Version 5.0.80
-
7420A1LIV5080_DualQuad_2016-03-09.img.gzLI= 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.