VAR-SOM-MX6 Ubuntu Build Ubuntu Alip NFS

From Variscite Wiki
VAR-SOM-MX6 - Ubuntu Linaro Alip-20151215 NFS development system


Ubuntu Linaro Alip is pre built file system. For more information Ubuntu based Rootfs provided by Linaro. Variscite used linaro-vivid-alip-20151215-714 image added Vivante Graphic acceleration and compile the GStreamer with i.MX6 support. The steps require to build an NFS development system:

  1. Install the toolchain.
  2. Extract the file system
  3. Build Linux kernel, modules and all relevant device tree.
    1. Deploy The Linux modules into the filesystem.
  4. Build U-boot
  5. Build the Wi-Fi modules and deploy them into the filesystem.
  6. Boot the target with the New kernel and device tree while using the fileystem.

Installing required packages

On your Ubuntu building machine:

sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm lib32ncurses5-dev

Ubuntu Alip build was tested with Ubuntu 14.04 LTS only! We know that Ubuntu 12.04 have some problems with it.

Tool Installation

The tool-chain are available for Download from: Linaro-Toolchain Install the tools:

$ sudo tar xvf ~/Downloads/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux.tar.xz -C /opt
$ export PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux/bin/:$PATH

TFTP and NFS setup

Please follow the link to the WIKI TFTP & NFS and set-up TFTP/NFS servers on your host machine.

File System

Ubuntu Linaro Alip file system available for Download from: Alip-Filesystem

$ mkdir ~/var-som-mx6-alip
$ cd ~/var-som-mx6-alip
$ sudo mkdir rootfs
$ cd rootfs
$ sudo tar xvf ~/Downloads/linaro-alip-20151215-v3.tar.bz2

Build Linux

Get sources:

$ cd ~/var-som-mx6-alip
$ git clone --branch imx_3.14.38_6qp_ga_var01 --depth 50
$ cd linux-2.6-imx/

Build the Linux kernel and device tree:

$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- imx_v7_var_ubuntu_defconfig
$ make -j6 LOADADDR=0x10008000 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- uImage
$ make -j6 LOADADDR=0x10008000 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules
$ make -j6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- dtbs

Copy uImage and device tree to the tftpboot directory. Install the modules to the root file system:

$ sudo make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules_install INSTALL_MOD_PATH=../rootfs/
$ cp arch/arm/boot/uImage /tftpboot
$ cp arch/arm/boot/dts/*var*.dtb /tftpboot

Build U-Boot

This is a single u-boot image that supports all VAR-SOM-MX6 SOM's.

Obtain sources:

$ cd ~/var-som-mx6-alip
$ git clone --branch imx_v2013.10_var4 --depth 50
$ cd uboot-imx/
Build u-boot: 
clean tree:
$ make -j6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mrproper
Choose build for SD-Card or NAND Flash:
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- mx6var_som_sd_config
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-  mx6var_som_nand_config
Build U-BOOT:
$ make -j6 ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-

Flash u-boot to the sd-card:

$ sudo dd if=SPL of=/dev/sdxxx bs=1K seek=1; sync
$ sudo dd if=u-boot.img of=/dev/sdxxx bs=1K seek=69; sync

In case of UBI copy it to the sd-card:

$ sudo cp SPL /media/rootfs/opt/images
$ sudo cp u-boot.img /media/rootfs/opt/images

Eject SD-Card gracefully from host machine.

Refer to NAND Flash Burning for a complete description.

Build the Wi-Fi drivers

Based on: WL18xx System Build Scripts

Clone the build git

$ cd ~/var-som-mx6-alip
$ git clone git://
$ cd build-utilites

Setup the environment

$ cp setup-env setup-env.sample

Edit setup-env and set:

export TOOLCHAIN_PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux/bin
export ROOTFS=/home/<me>/var-som-mx6-alip/rootfs
export KERNEL_PATH=/home/<me>/var-som-mx6-alip/linux-2.6-imx/

Change "<me>" to your true name.

Complete file example:

#                            \\\// 
#                           -(o o)- 
# This file contains the exports needed for automating the
# build process of WLAN components.
# Place this file in the same directory with
# build scripts. No need to run 'source setup-env', the build
# scripts will perfom it internaly. 
# User specific environment settings - use full PATH

# if DEFAULT toolchain path is set toolchain will be downloaded to ./toolchain.
export TOOLCHAIN_PATH=/opt/gcc-linaro-arm-linux-gnueabihf-4.9-2014.05_linux/bin

# if DEFAULT path to root filesystem is set ./fs folder will be used.
export ROOTFS=/home/variscite/var-som-mx6-alip/rootfs

#if DEFAULT kernel path is set - kernel will be downloaded (set branch to match kernel version)
export KERNEL_PATH=export KERNEL_PATH=/home/variscite/var-som-mx6-alip/linux-2.6-imx/

# if KERNEL_VARIANT below is set the build script will look for kernel specific
# patches under the patches directory:
# - patches under the pathces/driver_patches/$KERNEL_VARIANT directory would be
#   applied during "modules" build.
# - patches under the patches/kernel_patches/$/$KERNEL_VARIANT directory would
#   be applied to the kernel pointed by KERNEL_PATH in case the "patch_kernel"
#   command is used.
#   Note: the kernel is not built automatically after the patches are applied

export CROSS_COMPILE=arm-linux-gnueabihf-
export ARCH=arm

Download the source

Don't use the "sudo" version of the script for this step or you'll end up with directories owned by root instead of user.
$ ./ init

Checkout, Build, and Install

$ ./ update R8.6
This build will fail. Please move to the next step apply the patch's and run the build with the commands described below.

Patch for Bugfix & Build


$ sed -i 's/__TIMESTAMP__/"June_22_2015"/g' src/driver/drivers/net/wireless/ti/wlcore/Makefile 
$ sed -i 's/__TIMESTAMP__/"June_22_2015"/g' src/driver/drivers/net/wireless/ti/wlcore/release_version.h
$ sed -i 's/\/\* time sync \*\//return hw; \/\* time sync \*\//g' src/driver/drivers/net/wireless/ti/wlcore/main.c


$ ./ modules
$ ./ firmware
$ ./ bt-firmware

The build above will deploy the Wi-Fi modules and the relevant firmware directly into the the rootfs. Any other packages is not required because we are using the Ubuntu supplied one.

For rebuild just do the last 3 build steps.

Device Tree Information

The table below summarize all available Device Tree.

Device Tree Name
SOM type
Carrier Board type
LCD Type
Evaluation Kit name
imx6q-var-som.dtb VAR-SOM-MX6_V2 (Quad / Dual) VAR-MX6CustomBoard Capacitive/Resistive touch VAR-DVK-MX6_V2-PRO
imx6q-var-som-vsc.dtb VAR-SOM-MX6_V2 (Quad / Dual) VAR-SOLOCustomBoard Capacitive LVDS touch N/A
imx6dl-var-som.dtb VAR-SOM-MX6_V2 (DualLite/ Solo) VAR-MX6CustomBoard Capacitive/Resistive touch N/A
imx6dl-var-som-solo-vsc.dtb VAR-SOM-SOLO / VAR-SOM-DUAL VAR-SOLOCustomBoard Capacitive LVDS touch VAR-DVK-SOLO/DUAL VAR-STK-SOLO/DUAL
imx6dl-var-som-solo.dtb VAR-SOM-SOLO / VAR-SOM-DUAL VAR-MX6CustomBoard Capacitive/Resistive touch N/A
imx6q-var-dart.dtb VAR-SOM-SOLO / VAR-SOM-DUAL VAR-DT6CustomBoard Capacitive LVDS touch VAR-STK-DT6.VAR-DVK-DT6

Boot your target

Export your new rootfs directory:

$ sudo gedit /etc/exports
Add a line:
/home/<my name >/var-som-mx6-alip/rootfs *(rw,sync,no_root_squash,no_all_squash,no_subtree_check)
and restart the server:
$ sudo /etc/init.d/nfs-kernel-server restart

Make sure you have A SOM with U-Boot installed on it. You can use the nand recovery utility to install Yocto on it. Boot your target and stop at U-Boot

Select the right device tree (from the table above).
$ setenv fdt_file imx6q-var-som.dtb
$ setenv serverip <server IP Address>
$ setenv uimage uImage

$ setenv nfsroot /home/<me>/var-som-mx6-alip/rootfs
$ setenv console ttymxc0
Add rw to root=/dev/nfs
$ editenv netargs <== root=/dev/nfs rw

$ setenv bootcmd 'run netboot'
$ saveenv

Flash images to NAND

Please refer to VAR-SOM-MX6 NAND Flash burning