Difference between revisions of "IoTGateway/BSP/Linux/iMX6/Yocto LBV6 User Guide"
(Undo revision 23258 by Clayder.huang (talk)) |
|||
Line 1: | Line 1: | ||
− | + | ||
+ | {{DISPLAYTITLE:Yocto Linux BSP Ver.6 User Guide for iMX6 series}} <!-- | ||
{| align="right" | {| align="right" | ||
| <span class="fck_mw_magic" _fck_mw_customtag="true" _fck_mw_tagname="TOC" _fck_mw_tagtype="c">_</span> | | <span class="fck_mw_magic" _fck_mw_customtag="true" _fck_mw_tagname="TOC" _fck_mw_tagtype="c">_</span> | ||
|} | |} | ||
--> | --> | ||
− | + | ||
− | + | = Getting Started = | |
− | + | ||
− | + | == <span style="color:#0070c0;">Prerequisites</span> == | |
− | + | ||
− | + | All operations in this guide are based on Ubuntu 12.04 LTS 64bit only.<br/> First please install Ubuntu 12.04 LTS 64bit<sup><span style="color:red">*</span></sup> with minimum 2GB memory. | |
− | + | ||
− | + | | |
− | + | <nowiki>* ubuntu-12.04.1-desktop-amd64.iso</nowiki> | |
− | + | ||
− | $ 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 | + | === <span style="color:#0070c0;">To install required packages</span> === |
− | $ sudo apt-get install \ | + | |
− | bison build-essential ccache dpkg flex gcc g++ gettext intltool \ | + | Please login and perform the following commands: |
− | libarchive-zip-perl libfreetype6-dev libdbus-glib-1-dev liborbit2-dev \ | + | |
− | libxml2-dev libx11-dev libgtk2.0-dev liblzo2-2 libtool m4 \ | + | $ sudo apt-get install ssh |
− | patch rpm tcl uboot-mkimage uuid zlib1g zlib1g-dev \ | + | $ sudo apt-get install ia32-libs libx11-dev:i386 libreadline6-dev:i386 \ |
− | git gnupg flex bison gperf build-essential zip \ | + | libgl1-mesa-glx:i386 zlib1g-dev:i386 uuid-dev:i386 liblzo2-dev:i386 \ |
− | curl libc6-dev libncurses5-dev x11proto-core-dev libx11-dev:i386 \ | + | libncurses5-dev:i386 |
− | libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib \ | + | $ sudo apt-get install \ |
− | mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ | + | bison build-essential ccache dpkg flex gcc g++ gettext intltool \ |
− | gcc-4.6 g++-4.6 cpp-4.6 gcc-4.6-multilib uuid-dev liblzo2-dev \ | + | libarchive-zip-perl libfreetype6-dev libdbus-glib-1-dev liborbit2-dev \ |
− | uboot-mkimage libarchive-zip-perl \ | + | libxml2-dev libx11-dev libgtk2.0-dev liblzo2-2 libtool m4 \ |
− | wget git-core unzip texinfo gawk diffstat build-essential chrpath \ | + | patch rpm tcl uboot-mkimage uuid zlib1g zlib1g-dev \ |
− | sed cvs subversion coreutils texi2html \ | + | git gnupg flex bison gperf build-essential zip \ |
− | docbook-utils python-pysqlite2 help2man make gcc g++ \ | + | curl libc6-dev libncurses5-dev x11proto-core-dev libx11-dev:i386 \ |
− | desktop-file-utils libgl1-mesa-dev libglu1-mesa-dev mercurial \ | + | libreadline6-dev:i386 libgl1-mesa-glx:i386 libgl1-mesa-dev g++-multilib \ |
− | autoconf automake groff curl lzop asciidoc xterm | + | mingw32 tofrodos python-markdown libxml2-utils xsltproc zlib1g-dev:i386 \ |
− | $ sudo apt-get install libncurses5-dev:i386 liblzo2-dev:i386 uuid-dev:i386 | + | gcc-4.6 g++-4.6 cpp-4.6 gcc-4.6-multilib uuid-dev liblzo2-dev \ |
− | $ sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so | + | uboot-mkimage libarchive-zip-perl \ |
− | $ tar zcvf ~/usr_lib_i386-linux-gnu_for_Building_Android_KK.tar.gz \ | + | wget git-core unzip texinfo gawk diffstat build-essential chrpath \ |
− | /usr/lib/i386-linux-gnu/{libuuid.a,libuuid.so,liblzo2.so,liblzo2.a} | + | sed cvs subversion coreutils texi2html \ |
− | $ sudo apt-get install uuid-dev liblzo2-dev | + | docbook-utils python-pysqlite2 help2man make gcc g++ \ |
− | $ sudo tar zxvf ~/usr_lib_i386-linux-gnu_for_Building_Android_KK.tar.gz -C / | + | 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 | + | $ sudo tar zxvf ~/usr_lib_i386-linux-gnu_for_Building_Android_KK.tar.gz -C / |
− | + | ||
− | + | === <span style="color:#0070c0;">To install JDK</span> === | |
− | + | ||
− | + | Please download "jdk-6u45-linux-x64.bin" manually from [http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR Oracle Official Website] | |
− | $ sudo update-alternatives --install /usr/bin/ | + | |
− | $ sudo update-alternatives --install /usr/bin/ | + | And put it to directory ~/FILES/ and perform the following commands: |
− | $ sudo update-alternatives -- | + | |
− | $ sudo update-alternatives -- | + | $ 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 some troubles on setting up build environment, we recommend that you use Docker, and it is more safely & quickly. Please refer to [[IoTGateway/Docker|Docker]] | |
− | + | ||
− | + | == <span style="color:#0070c0;">Conventions</span> == | |
− | + | ||
− | < | + | <span style="color:purple">'''${PREBUILT_IMAGE}'''</span> : compressed prebuilt image (*.img.gz) |
− | + | ||
− | + | <span style="color:purple">'''${BSP_TARBALL}'''</span> : BSP tarball (*.tgz) | |
− | </ | + | |
− | < | + | <span style="color:purple">'''${BSP_HOME}'''</span> : home directory of the BSP |
− | </ | + | |
− | </ | + | <span style="color:purple">'''${BDIR}'''</span> : build directory (e.g. build_x11) |
− | < | + | |
− | </ | + | <span style="color:purple">'''${MX6PROC}'''</span> : i.MX6 Processor |
− | </ | + | |
− | < | + | :mx6q for iMX6 Quad Core / Dual Core |
− | </ | + | :mx6dl for iMX6 Dual Lite / Solo |
− | + | ||
− | < | + | <span style="color:purple">'''${IMX6PROC}'''</span> : i.MX6 Processor |
− | + | ||
− | < | + | :imx6q / imx6dl |
− | + | ||
− | < | + | <span style="color:purple">'''${BOARD}'''</span> : available target boards list below |
− | + | ||
− | < | + | :rom5420 / ubc220 / rom7421/ rom3420 / rom7420 / rsb4410 / rsb4411 / rsb6410 / ubcds31 / wise3310 |
− | + | ||
− | < | + | <span style="color:purple">'''${BOARD_REV}'''</span> : board revision |
− | + | ||
− | + | :a1 / a2 / b1 | |
− | + | ||
− | + | <span style="color:purple">'''${MC}'''</span> : machine code combined with <span style="color:purple">'''${IMX6PROC}${BOARD}${BOARD_REV}'''</span> | |
− | + | ||
− | + | :for example, | |
− | < | + | |
− | < | + | : |
− | + | ::<tt>imx6dlrom5420b1 for ROM-5420-Solo B1</tt> | |
− | + | ::<tt>imx6dlubc220a1 for UBC-220-Dual-Light A1</tt> | |
− | < | + | ::<tt>imx6qprom7421a1 for ROM-7421-Dual/Quad-Plus A1</tt> |
− | + | ::<tt>imx6qrom3420a1 for ROM-3420-Dual/Quad A1</tt> | |
− | + | ::<tt>imx6qrom5420a1 for ROM-5420-Dual/Quad A1</tt> | |
− | + | ::<tt>imx6qrom5420b1 for ROM-5420-Dual/Quad B1</tt> | |
− | + | ::<tt>imx6qrom7420a1 for ROM-7420-Dual/Quad A1</tt> | |
− | </ | + | ::<tt>imx6qrsb4410a2 for RSB-4410-Dual A2</tt> |
− | + | ::<tt>imx6qrsb4410a1 for RSB-4410-Dual A1</tt> | |
− | + | ::<tt>imx6qrsb4411a1 for RSB-4411-Dual/Quad A1</tt> | |
− | + | ::<tt>imx6qrsb6410a1 for RSB-6410-Dual A1</tt> | |
− | + | ::<tt>imx6qubcds31a1 for UBC-DS31-Dual A1</tt> | |
− | + | ::<tt>imx6qwise3310a1 for WISE-3310-Dual A1</tt> | |
− | + | ||
− | < | + | <span style="color:purple">'''${MEM_SIZE}'''</span> : memory size |
− | + | ||
− | < | + | :1G / 2G / 512M |
− | </ | + | |
− | </ | + | <span style="color:purple">'''${SD_DEVICE}'''</span> : device name of SD card in Ubuntu (e.g. /dev/sdf) |
− | < | + | |
− | + | <span style="color:purple">'''${SDCARD_IMAGE}'''</span> : sdcard image built by bitbake (*.sdcard) | |
− | + | ||
− | + | <span style="color:purple">'''${UBOOT}'''</span> :u-boot version(e.g. 2015.04) | |
− | < | + | |
− | </ | + | <span style="color:purple">'''${KERNEL}'''</span> : linux kernel version(e.g. 3.14.52) |
− | < | + | |
− | </ | + | <span style="color:purple">'''${TOOLCHAIN}'''</span> : toolchain installed directory(e.g. /opt/fsl-imx-x11/3.14.52-1.1.0) |
− | + | ||
− | + | 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 ...) | |
− | + | ||
− | + | == <span style="color:#0070c0;">Introducing BSP</span> == | |
− | + | ||
− | + | :The BSP is based on Yocto Project with Freescale enhanced features for i.MX6, plus specific target board features from Advantech Inc.. | |
− | + | ||
− | + | === <span style="color:#0070c0;">Naming Rule</span> === | |
− | + | ||
− | + | :The tarball/prebuilt image name is consist of the model name followed by "LB" or "LI" plus version number and released date. | |
− | + | ||
− | + | :For example, 4410A1LBV6000_2016-03-07.tgz which "4410A1" stands for RSB-<span style="color:#ff0000;">'''4410 A1'''</span>, "LB" is acronym of <span style="color:#ff0000;">'''L'''</span>inux <span style="color:#ff0000;">'''B'''</span>SP, "V6000" stands for <span style="color:#ff0000;">'''V'''</span>ersion <span style="color:#ff0000;">'''6'''</span>.<span style="color:#ff0000;">'''000'''</span> <nowiki>.</nowiki> | |
− | + | ||
− | + | ||
− | + | | |
− | + | ||
− | + | :For example, 4410A1LIV6000_DualQuad_2016-03-07.img.gz which "LI" is acronym for prebuilt <span style="color:#ff0000;">'''L'''</span>inux <span style="color:#ff0000;">'''I'''</span>mage, DualQuad means this image is fit for Dual Core/Quad Core. | |
− | + | ||
− | + | === <span style="color:#0070c0;">BSP tarball</span> === | |
− | + | ||
− | + | :Unpack BSP tarball to home directory by performing the following command: | |
− | + | ::<code>$ tar xvf <span style="color:#7030a0;">'''${BSP'''</span>'''<span style="color:#7030a0;">_TARBALL</span><span style="color:#7030a0;">}</span>''' -C ~/</code> | |
− | + | <div style="margin-left:1.498cm;margin-right:0cm;">(Every BSP with different version contains an unique folder, e.g. after unpacking 4410A1LBV6000_2016-03-07.tgz to home directory, the directory , ~/imx6LBV6000_2016-03-07 is the BSP's home folder.)</div> <div style="margin-left:0.499cm;margin-right:0cm;">The description of some important folders list below:</div> <div style="margin-left:1.499cm;margin-right:0cm;">'''sources/'''</div> <div style="margin-left:1.998cm;margin-right:0cm;">'''meta-advantech/''' : meta layer by Advantech</div> <div style="margin-left:1.998cm;margin-right:0cm;">'''meta-fsl-*/''' : meta layer by Freescale</div> <div style="margin-left:1.499cm;margin-right:0cm;">'''fsl-setup-release.sh''' : to create one new build environment</div> <div style="margin-left:1.499cm;margin-right:0cm;">'''setup-environment''' : to continue an exist build environment</div> | |
− | + | === <span style="color:#0070c0;">Prebuilt image</span> === | |
− | + | ||
− | + | :Perform the following command to build one boot-up SD card | |
− | + | ::<code>$ gunzip -c <span style="color:#7030a0;">'''${'''</span>'''<span style="color:#7030a0;">PREBUILT_IMAGE</span><span style="color:#7030a0;">}</span>''' | dd of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=1M</code> | |
− | + | ||
− | + | == <span style="color:#0070c0;">Build Instructions</span> == | |
− | + | ||
− | + | === <span style="color:#0070c0;">To create one new build environment</span> === | |
− | + | ||
− | + | :Perform the following commands in terminal console | |
− | + | ::<code>$ cd <span style="color:#7030a0;">'''${BSP_HOME}'''</span></code> | |
− | + | ::<code>$ MACHINE=<span style="color:#7030a0;">'''${MC}'''</span> source fsl-setup-release.sh -b <span style="color:#7030a0;">'''${BDIR}'''</span> -e x11</code> | |
− | + | :You need to read and accept the EULA. | |
− | + | :[[File:Accept EULA.png|RTENOTITLE]] | |
− | + | ||
− | + | === <span style="color:#0070c0;">To continue an exist build environment</span> === | |
− | + | ||
− | + | :Perform the following commands in terminal console | |
− | + | ::<code>$ cd <span style="color:#7030a0;">'''${BSP_HOME}'''</span></code> | |
− | + | ::<code>$ source setup-environment <span style="color:#7030a0;">'''${BDIR}'''</span></code> | |
− | + | ||
− | + | === <span style="color:#0070c0;">To build sdcard image</span> === | |
+ | |||
+ | :To create/continue a build environment | ||
+ | :Perform the following command in terminal console | ||
+ | ::<code>$ bitbake fsl-image-qt5</code> | ||
+ | :The file, fsl-image-qt5-<span style="color:#7030a0;">'''${MC}'''</span>.sdcard, will be located in directory, ./tmp/deploy/images/<span style="color:#7030a0;">'''${MC}'''</span>, while building process finished successfully. | ||
+ | |||
+ | === <span style="color:#0070c0">To build toolchain installer</span> === | ||
+ | |||
+ | :To create/continue a build environment | ||
+ | :Perform the following command in terminal console | ||
+ | ::<code>$ bitbake meta-toolchain-qt5</code> | ||
+ | :The below installer will be located in the directory "./tmp/deploy/sdk". | ||
+ | ::<tt>fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-<span style="color:#7030a0">'''${KERNEL}'''</span>-1.1.0.sh</tt> | ||
+ | |||
+ | === <span style="color:#0070c0;">To build u-boot</span> === | ||
+ | |||
+ | :To create/continue a build environment | ||
+ | :Perform the following command in terminal console | ||
+ | ::<code>$ bitbake u-boot-imx</code> | ||
+ | :The two files, u-boot_crc.bin & u-boot_crc.bin.crc, will be located in directory, ./tmp/deploy/images/<span style="color:#7030a0;">'''${MC}'''</span>. | ||
+ | |||
+ | === <span style="color:#0070c0">To build linux kernel</span> === | ||
+ | |||
+ | :To create/continue a build environment | ||
+ | :Perform the following command in terminal console | ||
+ | ::to do menuconfig | ||
+ | <div style="margin-left: 5em"><syntaxhighlight lang="bash"> | ||
$ bitbake linux-imx -c menuconfig | $ bitbake linux-imx -c menuconfig | ||
− | </syntaxhighlight> | + | </syntaxhighlight> |
− | + | </div> | |
− | + | : | |
− | + | :: | |
− | + | ::: | |
− | + | ::::* If you operate on docker images, please install tmux application before running this command. | |
+ | :::::<code>$ sudo apt-get install tmux</code> | ||
+ | ::to do build | ||
+ | <div style="margin-left: 5em"><syntaxhighlight lang="bash"> | ||
$ bitbake linux-imx -c compile -f | $ bitbake linux-imx -c compile -f | ||
$ bitbake linux-imx -c compile_kernelmodules -f | $ bitbake linux-imx -c compile_kernelmodules -f | ||
$ bitbake linux-imx -c deploy | $ bitbake linux-imx -c deploy | ||
− | </syntaxhighlight> | + | </syntaxhighlight> |
− | + | </div> | |
− | + | :The two files, zImage & zImage-<span style="color:#7030a0">'''${IMX6PROC}'''</span>-<span style="color:#7030a0">'''${BOARD}'''</span>-<span style="color:#7030a0">'''${BOARD'''</span>'''<span style="color:#7030a0">_REV</span><span style="color:#7030a0">}</span>'''.dtb, will be located in directory, ./tmp/deploy/images/<span style="color:#7030a0">'''${MC}'''</span>. | |
− | + | ||
− | + | == <span style="color:#0070c0;">Creating boot-up on-board flash from prebuilt image</span> == | |
− | + | ||
− | + | === <span style="color:#0070c0;">To create one boot-up SD card</span> === | |
− | + | ||
− | + | :Perform the following command in terminal console | |
− | + | ::<code>$ gunzip -c '''<span style="color:#7030a0;">${PREBUILT_IMAGE</span>''' | dd of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=1M</code> | |
− | + | ::<code>$ sync</code> | |
− | + | ||
− | + | === <span style="color:#0070c0;">To transfer whole system to on-board flash</span> === | |
− | + | ||
− | + | :Boot up from SD card | |
− | + | :Perform the following commands in debug console | |
− | + | ::<code># cd /mk_inand</code> | |
− | + | ::<code># ./mksd-linux.sh /dev/mmcblk0</code> | |
− | + | :press y followed by Enter, if following message shows up: | |
− | + | ::[[File:All data will be destroyed.png|RTENOTITLE]] | |
− | + | :While "[Done]" shows up means the transferring is finished. | |
− | + | ||
− | + | == <span style="color:#0070c0;">Creating boot-up on-board flash from built sdcard image</span> == | |
− | < | + | |
− | + | === <span style="color:#0070c0;">To create one boot-up SD card</span> === | |
− | + | ||
− | </ | + | :Perform the following commands in terminal console |
− | + | ::<code>$ pushd <span style="color:#7030a0;">'''${BSP_HOME}'''</span>/<span style="color:#7030a0;">'''${BDIR}'''</span>/tmp/deploy/images/<span style="color:#7030a0;">'''${MC}'''</span></code> | |
− | + | ::<code>$ dd if=<span style="color:#7030a0;">'''${SDCARD_IMAGE}'''</span> of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=1M</code> | |
− | < | + | ::<code>$ sync</code> |
− | + | ::<code>$ popd</code> | |
− | < | + | |
− | </ | + | === <span style="color:#0070c0;">To transfer whole system to on-board flash</span> === |
− | <dd | + | |
− | </ | + | :Boot up from SD card |
− | < | + | :Insert USB stick that contains <span style="color:#7030a0;">'''${SDCARD_IMAGE}'''</span>, USB stick will be auto mounted to /run/media/sda1. |
− | < | + | :Perform the following commands in debug console |
− | + | ::<code># umount /dev/mmcblk0p?</code> | |
− | < | + | ::<code># cd /run/media/sda1</code> |
− | </ | + | ::<code># dd if=<span style="color:#7030a0;">'''${SDCARD_IMAGE}'''</span> of=/dev/mmcblk0 bs=4M conv=fsync</code> |
− | < | + | ::<code># P2START=$(fdisk -lu | grep mmcblk0p2 | awk '{print $2}')</code> |
− | </ | + | ::<code># echo -e "d\n2\nn\np\n2\n<span style="color:#7030a0;">'''${P2START}'''</span>\n\nw\n" | fdisk -u /dev/mmcblk0</code> |
− | + | ::<code># umount /dev/mmcblk0p2</code> | |
− | < | + | ::<code># e2fsck -f -y /dev/mmcblk0p2</code> |
− | + | ::<code># resize2fs /dev/mmcblk0p2</code> | |
− | + | ::<code># poweroff</code> | |
− | + | ||
− | + | = Customization = | |
− | + | ||
− | + | == <span style="color:#0070c0;">Package addition</span> == | |
− | + | ||
− | </ | + | === <span style="color:#0070c0;">To add tcf-agent & openssh-sftp-server</span> === |
− | + | ||
− | + | :Navigate to the directory where fsl-image-adv.inc located | |
− | + | ::<code>$ cd <span style="color:#7030a0;">'''${BSP_HOME}'''</span>/sources/meta-advantech/recipes-fsl/images</code> | |
− | + | :Add following line to fsl-image-adv.inc | |
− | + | ::<code>IMAGE_INSTALL += " tcf-agent openssh-sftp-server "</code> | |
− | + | :[[IoTGateway/BSP/Linux/iMX6/Yocto_LBV5_User_Guide#To_continue_an_exist_build_environment|Continue an exist build environment]] and [[IoTGateway/BSP/Linux/iMX6/Yocto_LBV5_User_Guide#To_build_sdcard_image|build sdcard image]] | |
− | < | + | |
− | + | === <span style="color:#0070c0">To add chromium browser</span> === | |
− | + | ||
− | + | :Navigate to the directory where local.conf located | |
− | + | ::<code>$ cd <span style="color:#7030a0">'''${BSP_HOME}'''</span>/<span style="color:#7030a0">'''${BDIR'''</span>'''<span style="color:#7030a0">}</span>'''/conf</code> | |
− | + | :Add following two lines to local.conf | |
− | + | ::<code>CORE_IMAGE_EXTRA_INSTALL += "chromium"</code> | |
− | + | ::<code>LICENSE_FLAGS_WHITELIST="commercial"</code> | |
− | < | + | :[[#To_continue_an_exist_build_environment|Continue an exist build environment]] and [[#To_build_sdcard_image|build sdcard image]] |
− | + | ||
− | < | + | == <span style="color:#0070c0">Setting up SDK</span> == |
− | + | ||
− | + | :Please follow the section,[[IoTGateway/BSP/Linux/iMX6/Yocto_LBV5_User_Guide#To_build_toolchain_installer|To build toolchain installer]], to build one toolchain installer | |
− | + | :Perform the following command in terminal console | |
− | + | ::<code>$ cd <span style="color:#7030a0">'''${BSP_HOME}'''</span>/<span style="color:#7030a0">'''${BDIR}'''</span>/tmp/deploy/sdk</code> | |
− | + | ::<code>$ sudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-<span style="color:#7030a0">'''${KERNEL}'''</span>-1.1.0.sh</code> | |
− | < | + | :Enter new installed directory or just press <code>Enter</code> to use default directory. |
− | + | :While <code>Proceed[y/n]?</code> shows up, please enter the correct one. | |
− | < | + | :Waiting for the SDK installed (while the following messages show up completely) |
− | + | ::[[File:Setting up sdk 3.png|RTENOTITLE]] | |
− | + | ||
− | + | == <span style="color:#0070c0;">Setting up cross compiling environment</span> == | |
− | < | + | |
− | < | + | :SDK has been set up (ref. [[#Setting_up_SDK|Setting up SDK]]) |
− | + | :Perform the following command in terminal console | |
− | < | + | ::<code>$ source <span style="color:#7030a0;">'''${TOOLCHAIN}'''</span>/environment-setup-cortexa9hf-vfp-neon-poky-linux-gnueabi</code> |
− | </ | + | |
− | < | + | == <span style="color:#0070c0;">Building & updating u-boot manually</span> == |
− | < | + | |
− | < | + | === <span style="color:#0070c0;">To build u-boot</span> === |
− | + | ||
− | </ | + | :The cross compiling environment has been set up. (ref. [[#Setting_up_cross_compiling_environment|Setting up cross compiling environment]]) |
− | + | :Make one copy from Yocto working directory | |
− | < | + | ::<code>$ mkdir -p ~/code</code> |
− | < | + | ::<code>$ pushd <span style="color:#7030a0;">'''${BSP_HOME}'''</span>/<span style="color:#7030a0;">'''${BDIR}'''</span>/tmp/work/<span style="color:#7030a0;">'''${MC}'''</span>-poky-linux-gnueabi/</code> |
− | + | ::<code>$ rm -rf ~/code/u-boot-imx</code> | |
− | < | + | ::<code>$ cp -a ./u-boot-imx/<span style="color:#7030a0;">'''${UBOOT}'''</span>-r0/git ~/code/u-boot-imx</code> |
− | + | ::<code>$ popd</code> | |
− | + | :Configure u-boot | |
− | < | + | ::<code>$ cd ~/code/u-boot-imx</code> |
− | < | + | ::<code>$ make distclean</code> |
− | + | ::<code>$ make <span style="color:#7030a0;">'''${MX6PROC}${BOARD}${BOARD_REV}'''</span>_<span style="color:#7030a0;">'''${MEM_SIZE}'''</span>_config</code> | |
− | + | :Start building u-boot | |
− | + | ::<code>$ make -j4 LDFLAGS=</code> | |
− | + | :The two files, u-boot-crc.bin & u-boot-crc.bin.crc, are located in directory "~/code/u-boot-imx". | |
− | + | ||
− | </ | + | === <span style="color:#0070c0;">To update u-boot to target device</span> === |
− | + | ||
− | + | :Perform the following command to transfer to exist 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 of=<span style="color:#7030a0;">'''${SD_DEVICE}'''</span> bs=512 seek=3 conv=fsync</code> | |
− | </ | + | :Make sure new u-boot does work then perform the following commands to transfer to on-board flash |
− | + | ::<code># dd if=u-boot_crc.bin.crc of=/dev/mmcblk0 bs=512 seek=2 conv=fsync</code> | |
− | </ | + | ::<code># dd if=u-boot-crc.bin of=/dev/mmcblk0 bs=512 seek=3 conv=fsync</code> |
− | + | ||
− | + | == <span style="color:#0070c0;">Building & updating kernel/modules/dtb manually</span> == | |
− | + | ||
− | + | === <span style="color:#0070c0">To build kernel/modules/dtb</span> === | |
− | + | ||
− | < | + | :The cross compiling environment has been set up. (ref. [[#Setting_up_cross_compiling_environment|Setting up cross compiling environment]]) |
− | + | ||
− | < | + | :Make one copy from Yocto working directory |
− | + | ::<code>$ mkdir -p ~/code</code> | |
− | + | ::<code>$ pushd <span style="color:#7030a0">'''${BSP_HOME}'''</span>/<span style="color:#7030a0">'''${BDIR}'''</span>/tmp/work-shared/<span style="color:#7030a0">'''${MC}'''</span>/</code> | |
− | < | + | ::<code>$ rm -rf ~/code/linux-imx</code> |
− | </ | + | ::<code>$ cp -a ./kernel-source ~/code/linux-imx</code> |
− | < | + | ::<code>$ popd</code> |
− | < | + | |
− | < | + | :Configure linux kernel |
− | < | + | ::<code>$ cd ~/code/linux-imx</code> |
− | </ | + | ::<code>$ make distclean</code> |
− | + | ::<code>$ make imx_v7_adv_defconfig</code> | |
− | + | ::<code>$ make menuconfig PKG_CONFIG_SYSROOT_DIR= PKG_CONFIG_PATH=</code> | |
− | + | ||
− | + | :Start building linux kernel | |
− | + | ::<code>$ make -j4 zImage LOADADDR=0x10008000 LDFLAGS=</code> | |
− | + | ||
− | + | :The kernel image file, zImage, is located in the directory "./arch/arm/boot/". | |
− | + | ||
− | + | :Start building kernel modules | |
− | + | ::<code>$ make -j4 modules LDFLAGS=</code> | |
− | + | ||
− | + | :Copy all modules to a temporary rootfs directory, "~/temp/rootfs" | |
− | + | ::<code>$ make modules_install INSTALL_MOD_PATH=~/temp/rootfs</code> | |
− | + | ||
− | + | :Start building device tree blob | |
− | + | ::<code>$ make -j4 <span style="color:#7030a0">'''${IMX6PROC}'''</span>-<span style="color:#7030a0">'''${BOARD}'''</span>-<span style="color:#7030a0">'''${BOARD_REV}'''</span>.dtb</code> | |
− | + | ||
− | + | :The device tree blob, <span style="color:#7030a0">'''${IMX6PROC}'''</span>-<span style="color:#7030a0">'''${BOARD}'''</span>-<span style="color:#7030a0">'''${BOARD_REV}'''</span>.dtb, is located in the directory "./arch/arm/boot/dts/". | |
− | + | ||
− | + | === <span style="color:#0070c0;">To update kernel/modules/dtb to target device</span> === | |
− | + | ||
− | + | :Copy zImage & <span style="color:#7030a0;">'''${IMX6PROC}'''</span>-<span style="color:#7030a0;">'''${BOARD}'''</span>-<span style="color:#7030a0;">'''${BOARD_REV}'''</span>.dtb to the 1<sup>st</sup> partition of SD card | |
− | + | :Copy modues to the 2<sup>nd</sup> 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 [[#Creating_boot-up_on-board_flash_from_prebuilt_image|Creating boot-up on-board flash from prebuilt image]] / [[#Creating_boot-up_on-board_flash_from_built_sdcard_image|sdcard image]] to create a boot-up SD card and transfer whole system to on-board flash. | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 01:46, 27 April 2022
Contents
- 1 Getting Started
- 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 from Oracle Official Website
And 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"
If you have some troubles on setting up build environment, we recommend that you use Docker, and it is more safely & quickly. Please refer to Docker
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
- rom5420 / ubc220 / rom7421/ rom3420 / rom7420 / rsb4410 / rsb4411 / rsb6410 / ubcds31 / wise3310
${BOARD_REV} : board revision
- a1 / a2 / b1
${MC} : machine code combined with ${IMX6PROC}${BOARD}${BOARD_REV}
- for example,
-
- imx6dlrom5420b1 for ROM-5420-Solo B1
- imx6dlubc220a1 for UBC-220-Dual-Light A1
- imx6qprom7421a1 for ROM-7421-Dual/Quad-Plus A1
- imx6qrom3420a1 for ROM-3420-Dual/Quad A1
- imx6qrom5420a1 for ROM-5420-Dual/Quad A1
- imx6qrom5420b1 for ROM-5420-Dual/Quad B1
- imx6qrom7420a1 for ROM-7420-Dual/Quad A1
- imx6qrsb4410a2 for RSB-4410-Dual A2
- imx6qrsb4410a1 for RSB-4410-Dual A1
- imx6qrsb4411a1 for RSB-4411-Dual/Quad A1
- imx6qrsb6410a1 for RSB-6410-Dual A1
- imx6qubcds31a1 for UBC-DS31-Dual A1
- imx6qwise3310a1 for WISE-3310-Dual A1
${MEM_SIZE} : memory size
- 1G / 2G / 512M
${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. 2015.04)
${KERNEL} : linux kernel version(e.g. 3.14.52)
${TOOLCHAIN} : toolchain installed directory(e.g. /opt/fsl-imx-x11/3.14.52-1.1.0)
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, 4410A1LBV6000_2016-03-07.tgz which "4410A1" stands for RSB-4410 A1, "LB" is acronym of Linux BSP, "V6000" stands for Version 6.000 .
- For example, 4410A1LIV6000_DualQuad_2016-03-07.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 ~/
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
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake fsl-image-qt5
- The file, fsl-image-qt5-${MC}.sdcard, will be located in directory, ./tmp/deploy/images/${MC}, while building process finished successfully.
To build toolchain installer
- To create/continue a build environment
- Perform the following command in terminal console
$ bitbake meta-toolchain-qt5
- The below installer will be located in the directory "./tmp/deploy/sdk".
- fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-${KERNEL}-1.1.0.sh
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 do menuconfig
$ bitbake linux-imx -c menuconfig
-
-
-
- * If you operate on docker images, please install tmux application before running this command.
$ sudo apt-get install tmux
- * If you operate on docker images, please install tmux application before running this command.
-
- to do build
-
$ bitbake linux-imx -c compile -f
$ bitbake linux-imx -c compile_kernelmodules -f
$ bitbake linux-imx -c deploy
- The two files, zImage & zImage-${IMX6PROC}-${BOARD}-${BOARD_REV}.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
$ sync
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
$ sync
$ 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 /run/media/sda1.
- Perform the following commands in debug console
# umount /dev/mmcblk0p?
# cd /run/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 /dev/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-adv.inc located
$ cd ${BSP_HOME}/sources/meta-advantech/recipes-fsl/images
- Add following line to fsl-image-adv.inc
IMAGE_INSTALL += " tcf-agent openssh-sftp-server "
- Continue an exist build environment and build sdcard image
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
Setting up SDK
- Please follow the section,To build toolchain installer, to build one toolchain installer
- Perform the following command in terminal console
$ cd ${BSP_HOME}/${BDIR}/tmp/deploy/sdk
$ sudo ./fsl-imx-x11-glibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-${KERNEL}-1.1.0.sh
- Enter new installed directory or just press
Enter
to use default directory. - While
Proceed[y/n]?
shows up, please enter the correct one. - Waiting for the SDK installed (while the following messages show up completely)
Setting up cross compiling environment
- SDK has been set up (ref. Setting up SDK)
- Perform the following command in terminal console
$ source ${TOOLCHAIN}/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. Setting up cross compiling environment)
- 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}-r0/git ~/code/u-boot-imx
$ popd
- Configure u-boot
$ cd ~/code/u-boot-imx
$ make distclean
$ make ${MX6PROC}${BOARD}${BOARD_REV}_${MEM_SIZE}_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 exist 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. Setting up cross compiling environment)
- Make one copy from Yocto working directory
$ mkdir -p ~/code
$ pushd ${BSP_HOME}/${BDIR}/tmp/work-shared/${MC}/
$ rm -rf ~/code/linux-imx
$ cp -a ./kernel-source ~/code/linux-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}-${BOARD_REV}.dtb
- The device tree blob, ${IMX6PROC}-${BOARD}-${BOARD_REV}.dtb, is located in the directory "./arch/arm/boot/dts/".
To update kernel/modules/dtb to target device
- Copy zImage & ${IMX6PROC}-${BOARD}-${BOARD_REV}.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 Creating boot-up on-board flash from prebuilt image / sdcard image to create a boot-up SD card and transfer whole system to on-board flash.