Here we go again.
After successfully installing u-boot we can now move to the real deal, that is, building a minimum working system. Bare in mind that these are manual learning procedures and nothing more. I’m learning as I go, so keep in mind that many things might be done a different, yet better way(e.g. YOCTO). This was done purely for learning purposes.

Requisites:
- Matrix TBS2910 (mine V2.1)
- Mini USB cable for the OTG
- TTL-232R-3V3 for the UART
- Recent Linux Debian based environment (e.g Ubuntu 14.04)
- Git/Compilation skills
- Ethernet Cable
- TFTP Server (e.g. tftp-hpa)
Again no need for a TFTP server.
Buildroot
Buildroot lets you create a complete Linux system to put on top of our kernel. The buildroot actually installs a ARM TOOLCHAIN that you can use later.
wget http://buildroot.uclibc.org/downloads/buildroot-2014.11.tar.gz
tar -zxvf buildroot-2014.11.tar.gz
cd buildroot-2014.11
make menuconfig
Now Select the following options
- Target ARM (Little-Endian)
- Target Cortex A-9
- Under toolchain: enable large file support and WCHAR
- Under System Configuration, chose ttymxc1 as the “Port to run a getty (login prompt) on”
- Under Package Selection:Hardware, enabled dosfstools and e2fsprogs
- Under Filesystem Images, selected Output cpio – gzipped
make busybox-menuconfig
# Exit without doing nothing. Just to save
export ARCH=arm
make V=1 2>&1|tee make.out
ls output/images/
export PATH=$PATH:/path/to/u-boot/tools
There is no need to wrap buildroot for u-boot, because instead we can add it to our uImage itself.
GCC toolchain will be created under ./output/host/opt/ext-toolchain/bin/.
ROOTFS image will be created under ./output/images/rootfs.cpio.gz
Kernel 3.19
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.19.tar.xz
tar -zxvf linux-3.19.tar.xz
export ARCH=arm
# You can point to recently created buildroot toochain
export CROSS_COMPILE=arm-linux-gnueabi-
make distclean
make imx_v6_v7_defconfig
make
Before we create the uImage, we need to edit .config and add the following lines.
CONFIG_INITRAMFS_SOURCE="/path/to/buildroot/output/images/rootfs.cpio.gz"
CONFIG_INITRAMFS_ROOT_UID=0
CONFIG_INITRAMFS_ROOT_GID=0
After that:
# Export u-boot tools path in order to get mkImage
export PATH=$PATH:/path/to/u-boot/tools
make uImage LOADADDR=0x10800000
CHK include/config/kernel.release
CHK include/generated/uapi/linux/version.h
CHK include/generated/utsrelease.h
make[1]: `include/generated/mach-types.h' is up to date.
CALL scripts/checksyscalls.sh
CHK include/generated/compile.h
Kernel: arch/arm/boot/Image is ready
Kernel: arch/arm/boot/zImage is ready
Image arch/arm/boot/uImage is ready
#Finally compile Device Tree Binary
make dtbs imx6q-tbs2910.dtb
U-Boot Fix
In order to get u-boot to accept a uImage larger than 8MB you need to add a smal detail to tbs2910.h in the u-boot source.
+#define CONFIG_SYS_BOOTM_LEN (16 << 20)
Don’t forget to compile and install u-boot again. You can check my patch in order to get a update_uboot command in order to get somethings done automatically.
Now place all your files in the TFTP server.
Loading Kernel in RAM