Yocto Linux BSP Ver.6 User Guide for i.MX6 Series
Introduction
This guide describes how to set up the build environment and build images for the i.MX6 Yocto BSP (Version 6). It also covers flashing, customization, SDK setup, and manual builds of U-Boot and the Linux kernel.
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 1.6u45
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 for a faster and cleaner setup.
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 SoC code:mx6q(Quad/Dual),mx6dl(Dual Lite/Solo)${IMX6PROC}: i.MX6 SoC name:imx6q/imx6dl${BOARD}: target board:rom5420/ubc220/rom7421/rom3420/rom7420/rsb4410/rsb4411/rsb6410/ubcds31/wise3310${BOARD_REV}: board revision:a1/a2/b1${MC}: machine code =${IMX6PROC}${BOARD}${BOARD_REV}- e.g.
imx6dlrom5420b1,imx6qrom7421a1,imx6qrsb4411a1
- e.g.
${MEM_SIZE}: memory size (512M/1G/2G)${SD_DEVICE}: SD device node (e.g./dev/sdf)${SDCARD_IMAGE}: sdcard image built by bitbake (*.sdcard)${UBOOT}: U-Boot version (e.g.2015.04)${KERNEL}: Linux kernel version (e.g.3.14.52)${TOOLCHAIN}: toolchain directory (e.g./opt/fsl-imx-x11/3.14.52-1.1.0)
System Recovery
If the system becomes unbootable, recreate the SD card (from prebuilt or built image as above) and re-flash the full system to on-board eMMC following the Flashing section.