Difference between revisions of "IoTGateway/BSP/Linux/iMX6/Yocto LBV5 User Guide"
(Created page with "<big><big><big> Yocto Linux BSP (LBV5) User Guide for iMX6 </big></big></big> <big><big> Please follow the user guide...") |
Alex.cheng (talk | contribs) (update information) |
||
(19 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | < | + | {{DISPLAYTITLE:Yocto Linux BSP Ver.5 User Guide for iMX6 series}} <!-- |
− | + | {| align="right" | |
− | </ | + | | <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. | ||
+ | <br/><nowiki>* ubuntu-12.04.1-desktop-amd64.iso</nowiki> | ||
+ | |||
+ | === <span style="color:#0070c0;">To install required packages</span> === | ||
+ | |||
+ | 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 / | ||
+ | |||
+ | === <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] | ||
+ | |||
+ | 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 [[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 | ||
− | + | :ubc220 / rom3420 / rom5420 / rom7420 / rsb4410 / 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> |
− | <code> | + | |
− | $ | + | :for example, |
− | </code> | + | |
− | < | + | ::<tt>imx6dlubc220a1 for UBC-220-Dual-Light 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>imx6qrsb4410a1 for RSB-4410-Dual A1</tt> | ||
+ | ::<tt>imx6qrsb4410a2 for RSB-4410-Dual A2</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. 2013.04-r0) | ||
+ | |||
+ | <span style="color:purple">'''${KERNEL}'''</span> : linux kernel version(e.g. 3.14.28-r0) | ||
+ | |||
+ | <span style="color:purple">'''${POKY}'''</span> : Yocto poky version(e.g. 1.7) | ||
+ | |||
+ | 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, 7420A1LBV5080_2016-03-09.tgz which "7420A1" stands for ROM-<span style="color:#ff0000;">'''7420 A1'''</span>, "LB" is acronym of <span style="color:#ff0000;">'''L'''</span>inux <span style="color:#ff0000;">'''B'''</span>SP, "V5080" stands for <span style="color:#ff0000;">'''V'''</span>ersion <span style="color:#ff0000;">'''5'''</span>.<span style="color:#ff0000;">'''0'''</span>'''<span style="color:#ff0000;">80</span>'''<nowiki>.</nowiki> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | :For example, 7420A1LIV5080_DualQuad_2016-03-09.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 7420A1LBV5080_2016-03-09.tgz to home directory, the directory , ~/imx6LBV5080_2016-03-09 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><br/> | ||
+ | :The installer, <tt>poky-eglibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-<span style="color:#7030a0">'''${POKY}'''</span>.sh</tt>, will be located in the directory "./tmp/deploy/sdk".<br/> | ||
+ | |||
+ | === <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 show up menuconfig | ||
+ | :::<code>$ bitbake linux-imx -c menuconfig</code> | ||
+ | ::::* If you operate on docker images, please install tmux application before running this command. | ||
+ | :::::<code>$ sudo apt-get install tmux</code> | ||
+ | ::to do build | ||
+ | :::<code>$ bitbake linux-imx</code> | ||
+ | :The two files, 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> === | ||
+ | |||
+ | :Boot up from SD card | ||
+ | :Insert USB stick that contains <span style="color:#7030a0;">'''${SDCARD_IMAGE}'''</span>, USB stick will be auto mounted to /media/sda1. | ||
+ | :Perform the following commands in debug console | ||
+ | ::<code># umount /media/mmcblk0p?</code> | ||
+ | ::<code># cd /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 /media/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>'''<span style="color:#7030a0">}</span>'''/tmp/deploy/sdk</code> | ||
+ | ::<code>$ sudo ./poky-eglibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-<span style="color:#7030a0">'''${POKY}'''</span>.sh</code><br/> | ||
+ | :Enter directory or press Enter while following question shows up: | ||
+ | ::[[File:Setting up sdk 1.png|RTENOTITLE]] | ||
+ | :Just press Enter while following question shows up: | ||
+ | ::[[File:Setting up sdk 2.png|RTENOTITLE]] | ||
+ | :While following message shows up means the SDK is ready. | ||
+ | ::[[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 /opt/poky/<span style="color:#7030a0;">'''${POKY}'''</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>/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/<span style="color:#7030a0;">'''${MC}'''</span>-poky-linux-gnueabi/</code> | ||
+ | ::<code>$ rm -rf ~/code/linux-imx</code> | ||
+ | ::<code>$ cp -a ./linux-imx/${KERNEL}/git ~/code/inux-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> |
− | : | ||
− | <code | ||
− | |||
− | </code> | ||
− | <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: | ||
− | < | + | === <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 07:53, 14 March 2017
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
- ubc220 / rom3420 / rom5420 / rom7420 / rsb4410 / rsb6410 / ubcds31 / wise3310
${BOARD_REV} : board revision
- a1 / a2 / b1
${MC} : machine code combined with ${IMX6PROC}${BOARD}${BOARD_REV}
- for example,
- imx6dlubc220a1 for UBC-220-Dual-Light 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
- imx6qrsb4410a1 for RSB-4410-Dual A1
- imx6qrsb4410a2 for RSB-4410-Dual A2
- 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. 2013.04-r0)
${KERNEL} : linux kernel version(e.g. 3.14.28-r0)
${POKY} : Yocto poky version(e.g. 1.7)
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, 7420A1LBV5080_2016-03-09.tgz which "7420A1" stands for ROM-7420 A1, "LB" is acronym of Linux BSP, "V5080" stands for Version 5.080.
- For example, 7420A1LIV5080_DualQuad_2016-03-09.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 installer, poky-eglibc-x86_64-meta-toolchain-qt5-cortexa9hf-vfp-neon-toolchain-${POKY}.sh, will be located in the directory "./tmp/deploy/sdk".
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
- * 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
- to show up menuconfig
- The two files, 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 /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-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 ./poky-eglibc-x86_64-meta-toolchain-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. Setting up SDK)
- 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. 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}/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/${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}-${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.