Difference between revisions of "IoTGateway/BSP/Linux/iMX6/Yocto LBV3 User Guide"
(Created page with "<big><big><big>Yocto Linux BSP User Guide for iMX6 series</big></big></big> <!-- {| align="right" | __TOC__ |} --> =Getting Started= ==<span style="color:#0070c0;">Prerequi...") |
(→To update u-boot to target device) |
||
Line 284: | Line 284: | ||
===<span style="color:#0070c0;">To update u-boot to target device</span>=== | ===<span style="color:#0070c0;">To update u-boot to target device</span>=== | ||
− | :Perform the following command to transfer to | + | :Perform the following command to transfer to existed boot-up SD card |
::<code>$ dd if=u-boot_crc.bin.crc of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=512 seek=2 conv=fsync</code> | ::<code>$ dd if=u-boot_crc.bin.crc of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=512 seek=2 conv=fsync</code> | ||
::<code>$ dd if=u-boot-crc.bin of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=512 seek=3 conv=fsync</code> | ::<code>$ dd if=u-boot-crc.bin of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=512 seek=3 conv=fsync</code> |
Revision as of 07:34, 16 May 2016
Yocto Linux BSP User Guide for iMX6 series
Contents
- 1 Getting Started
- 1.1 Prerequisites
- 1.2 Conventions
- 1.3 Introducing BSP
- 1.4 Build Instructions
- 1.4.1 To create one new build environment
- 1.4.2 To continue an exist build environment
- 1.4.3 To build sdcard image for Qt 4.8.5 used
- 1.4.4 To build sdcard image for Qt 5.2.1 used
- 1.4.5 To build sdcard image without Qt
- 1.4.6 To build toolchain installer for Qt 4.8.5 used
- 1.4.7 To build toolchain installer for Qt 5.2.1 used
- 1.4.8 To build toolchain installer without Qt
- 1.4.9 To build u-boot
- 1.4.10 To build linux kernel
- 1.5 Creating boot-up on-board flash from prebuilt image
- 1.6 Creating boot-up on-board flash from built sdcard image
- 2 Customization
- 3 System Recovery
Getting Started
Prerequisites
All operations in this guide are based on Ubuntu 12.04 LTS 64bit only.
First please install Ubuntu 12.04 LTS 64bit* with minimum 2GB memory.
* ubuntu-12.04.1-desktop-amd64.iso
To install required packages
Please login and perform the following commands:
$ 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 /
To install JDK
Please download "jdk-6u45-linux-x64.bin" manually, put it to directory ~/FILES/ and perform the following commands:
$ 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"
Conventions
${PREBUILT_IMAGE} : compressed prebuilt image (*.img.gz)
${BSP_TARBALL} : BSP tarball (*.tgz)
${BSP_HOME} : home directory of the BSP
${BDIR} : build directory (e.g. build-x11)
${MX6PROC} : i.MX6 Processor
- mx6q for iMX6 Quad Core / Dual Core
- mx6dl for iMX6 Dual Lite / Solo
${IMX6PROC} : i.MX6 Processor
- imx6q / imx6dl
${BOARD} : available target boards list below
- rsb4410 / rom3420 / rom5420 / rom7420 / ubcds31 / ubc220
${MC} : machine code combined with ${IMX6PROC}${BOARD}${BOARD_REV}
- for example,
- imx6qrsb4410 for RSB-4410
- imx6qrom3420 for ROM-3420
- imx6qrom5420 for ROM-5420
- imx6qrom7420 for ROM-7420
- imx6qubcds31 for UBC-DS31
- imx6dlubc220 for UBC-220
${SD_DEVICE} : device name of SD card 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.5.3)
debug console / serial console
- serial terminal program (e.g. minicom, putty, teraterm ...) that serial port is configured to 115200 8N1
terminal console
- terminal program (e.g. gnome-terminal, xfce4-terminal ...)
Introducing BSP
- The BSP is based on Yocto Project with Freescale enhanced features for i.MX6, plus specific target board features from Advantech Inc..
Naming Rule
- The tarball/prebuilt image name is consist of the model name followed by "LB" or "LI" plus version number and released date.
- For example, 4410LBV3240_2015-03-25.tgz which "4410" stands for RSB-4410, "LB" is acronym of Linux BSP, "V3240" stands for Version 3.240.
- For example, 4410LIV3240_DualQuad_2015-03-25.img.gz which "LI" is acronym for prebuilt Linux Image, DualQuad means this image is fit for Dual Core/Quad Core.
BSP tarball
- Unpack BSP tarball to home directory by performing the following command:
$ tar xvf ${BSP_TARBALL} -C ~/
- (Every BSP with different version contains an unique folder, e.g. after unpacking 4410LBV3240_2015-03-25.tg to home directory, the directory , ~/imx6LBV3240_2015-03-25 is the BSP's home folder.)
- The description of some important folders list below:
- sources/
- meta-advantech/ : meta layer by Advantech
- meta-fsl-*/ : meta layer by Freescale
- fsl-setup-release.sh : to create one new build environment
- setup-environment : to continue an exist build environment
- sources/
Prebuilt image
- Perform the following command to build one boot-up SD card
$ gunzip -c ${PREBUILT_IMAGE} | dd of=${SD_DEVICE} bs=1M
Build Instructions
To create one new build environment
- Perform the following commands in terminal console
$ cd ${BSP_HOME}
$ MACHINE=${MC} source fsl-setup-release.sh -b ${BDIR} -e x11
- You need to read and accept the EULA.
To continue an exist build environment
- Perform the following commands in terminal console
$ cd ${BSP_HOME}
$ source setup-environment ${BDIR}
To build sdcard image for Qt 4.8.5 used
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-x11
- The file, fsl-image-x11-${MC}.sdcard, will be located in directory, ./tmp/deploy/images/${MC}, while building process finished successfully.
To build sdcard image for Qt 5.2.1 used
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-x11-qt5
- The file, fsl-image-x11-qt5-${MC}.sdcard, will be located in directory, ./tmp/deploy/images/${MC}, while building process finished successfully.
To build sdcard image without Qt
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-fb
- The file, fsl-image-fb-${MC}.sdcard, will be located in directory, ./tmp/deploy/images/${MC}, while building process finished successfully.
To build toolchain installer for Qt 4.8.5 used
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-x11 -c populate_sdk
- The installer, poky-eglibc-x86_64-fsl-image-x11-cortexa9hf-vfp-neon-toolchain-qt4-${POKY}.sh, will be located in the directory "./tmp/deploy/sdk".</code>
To build toolchain installer for Qt 5.2.1 used
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-x11-qt5 -c populate_sdk
- The installer, poky-eglibc-x86_64-fsl-image-x11-qt5-cortexa9hf-vfp-neon-toolchain-${POKY}.sh, will be located in the directory "./tmp/deploy/sdk".</code>
To build toolchain installer without Qt
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-fb -c populate_sdk
- The installer, poky-eglibc-x86_64-fsl-image-fb-cortexa9hf-vfp-neon-toolchain-${POKY}.sh, will be located in the directory "./tmp/deploy/sdk".</code>
To build u-boot
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake u-boot-imx
- The two files, u-boot_crc.bin & u-boot_crc.bin.crc, will be located in directory, ./tmp/deploy/images/${MC}.
To build linux kernel
- To create/continue a build environment
- Perform the following command in terminal console
- to show up menuconfig
$ bitbake linux-imx -c menuconfig
- to do build
$ bitbake linux-imx
- to show up menuconfig
- The two files, uImage & uImage-${IMX6PROC}-${BOARD}.dtb, will be located in directory, ./tmp/deploy/images/${MC}.
Creating boot-up on-board flash from prebuilt image
To create one boot-up SD card
- Perform the following command in terminal console
$ gunzip -c ${PREBUILT_IMAGE | dd of=${SD_DEVICE} bs=1M
To transfer whole system to on-board flash
- Boot up from SD card
- Perform the following commands in debug console
# cd /mk_inand
# ./mksd-linux.sh /dev/mmcblk0
- press y followed by Enter, if following message shows up:
- While "[Done]" shows up means the transferring is finished.
Creating boot-up on-board flash from built sdcard image
To create one boot-up SD card
- Perform the following commands in terminal console
$ pushd ${BSP_HOME}/${BDIR}/tmp/deploy/images/${MC}
$ dd if=${SDCARD_IMAGE} of=${SD_DEVICE} bs=1M
$ popd
To transfer whole system to on-board flash
- Boot up from SD card
- Insert USB stick that contains ${SDCARD_IMAGE}, USB stick will be auto mounted to /media/sda1.
- Perform the following commands in debug console
# umount /media/mmcblk0p?
# cd /media/sda1
# dd if=${SDCARD_IMAGE} of=/dev/mmcblk0 bs=4M conv=fsync
# P2START=$(fdisk -lu | grep mmcblk0p2 | awk '{print $2}')
# echo -e "d\n2\nn\np\n2\n${P2START}\n\nw\n" | fdisk -u /dev/mmcblk0
# umount /media/mmcblk0p2
# e2fsck -f -y /dev/mmcblk0p2
# resize2fs /dev/mmcblk0p2
# poweroff
Customization
Package addition
To add tcf-agent & openssh-sftp-server
- Navigate to the directory where fsl-image-x11.inc located
$ cd ${BSP_HOME}/sources/meta-advantech/recipes-fsl/images
- Add following line to fsl-image-x11.inc
IMAGE_INSTALL += " tcf-agent openssh-sftp-server "
Continue an exist build environment and build sdcard image (ref. 1.4.2, 1.4.3, 1.4.4)
To add chromium browser
- Navigate to the directory where local.conf located
$ cd ${BSP_HOME}/${BDIR}/conf
- Add following two lines to local.conf
CORE_IMAGE_EXTRA_INSTALL += "chromium"
LICENSE_FLAGS_WHITELIST="commercial"
Continue an exist build environment and build sdcard image (ref. 1.4.2, 1.4.3, 1.4.4)
Setting up SDK
- Please follow 1.4.6 or 1.4.7 to build one toolchain installer
- Perform the following command in terminal console
$ cd ${BSP_HOME}/BDIR}/tmp/deploy/sdk
$ sudo ./poky-eglibc-x86_64-fsl-image-qt5-cortexa9hf-vfp-neon-toolchain-${POKY}.sh
- Enter directory or press Enter while following question shows up:
- Just press Enter while following question shows up:
- While following message shows up means the SDK is ready.
Setting up cross compiling environment
- SDK has been set up (ref. 2.2)
- Perform the following command in terminal console
$ source /opt/poky/${POKY}/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi
Building & updating u-boot manually
To build u-boot
- The cross compiling environment has been set up. (ref. 2.3)
- Make one copy from Yocto working directory
$ mkdir -p ~/code
$ pushd ${BSP_HOME}/${BDIR}/tmp/work/${MC}-poky-linux-gnueabi/
$ rm -rf ~/code/u-boot-imx
$ cp -a ./u-boot-imx/${UBOOT}/git ~/code/u-boot-imx
$ popd
- Configure u-boot
$ cd ~/code/u-boot-imx
$ make distclean
$ make ${MX6PROC}${BOARD}__config
- Start building u-boot
$ make -j4 LDFLAGS=
- The two files, u-boot-crc.bin & u-boot-crc.bin.crc, are located in directory "~/code/u-boot-imx".
To update u-boot to target device
- Perform the following command to transfer to existed boot-up SD card
$ dd if=u-boot_crc.bin.crc of=${SD_DEVICE} bs=512 seek=2 conv=fsync
$ dd if=u-boot-crc.bin of=${SD_DEVICE} bs=512 seek=3 conv=fsync
- Make sure new u-boot does work then perform the following commands to transfer to on-board flash
# dd if=u-boot_crc.bin.crc of=/dev/mmcblk0 bs=512 seek=2 conv=fsync
# dd if=u-boot-crc.bin of=/dev/mmcblk0 bs=512 seek=3 conv=fsync
Building & updating kernel/modules/dtb manually
To build kernel/modules/dtb
- The cross compiling environment has been set up. (ref. 2.3)
- Make one copy from Yocto working directory
$ mkdir -p ~/code
$ pushd ${BSP_HOME}/${BDIR}/tmp/work/${MC}-poky-linux-gnueabi/
$ rm -rf ~/code/linux-imx
$ cp -a ./linux-imx/${KERNEL}/git ~/code/inux-imx
$ popd
- Configure linux kernel
$ cd ~/code/linux-imx
$ make distclean
$ make imx_v7_adv_defconfig
$ make menuconfig PKG_CONFIG_SYSROOT_DIR= PKG_CONFIG_PATH=
- Start building linux kernel
$ make -j4 zImage LOADADDR=0x10008000 LDFLAGS=
- The kernel image file, zImage, is located in the directory "./arch/arm/boot/".
- Start building kernel modules
$ make -j4 modules LDFLAGS=
- Copy all modules to a temporary rootfs directory, "~/temp/rootfs"
$ make modules_install INSTALL_MOD_PATH=~/temp/rootfs
- Start building device tree blob
$ make -j4 ${IMX6PROC}-${BOARD}.dtb
- The device tree blob, ${IMX6PROC}-${BOARD}.dtb, is located in the directory "./arch/arm/boot/dts/".
To update kernel/modules/dtb to target device
- Copy zImage & ${IMX6PROC}-${BOARD}.dtb to the 1st partition of SD card
- Copy modues to the 2nd partition of SD card.
- Make sure all new linux kernel, device tree and kernel modules work well, then copy all of them to the on-board flash
System Recovery
Please refer to 1.5 & 1.6 to create a boot-up SD card and transfer whole system to on-board flash.