I've just spent the last few weeks walking through this whole thing, so here are the steps that I recorded:
This includes using buildroot to create a rootfs and even pulls down a cross-compiler...
At the highest level there are three things to build: rootfs, kernel & u-boot.
# Unpack the following files to directories 'kernel', 'uboot' & 'rootfs':
# kernel: https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.11.4.tar.xz
# uboot: http://ftp.denx.de/pub/u-boot/u-boot-2013.10.tar.bz2
# buildroot: http://buildroot.org/downloads/buildroot-2013.08.tar.gz
# You should now have the directories:
- kernel/linux-3.11.4
- uboot/u-boot-2013.10
- rootfs/buildroot-2013.08
################################################
# Create ROOTFS (and install cross compiler):
# (note I got most of this step from boundary devices blog)
$ cd buildroot-2013.08
$ make menuconfig...
# Target ARM (Little-Endian)
# Target Cortex A-9
# Under toolchain:
# External
# Sourcery Codebench ARM 2013.05
# Downloaded and installed
# Under System Configuration, chose ttymxc0 as the Port to run a getty (login prompt) on,
# Under Target Packages->Filesystem and Flash utilities: enable dosfstools and e2fsprogs
# Under Filesystem Images, selected Output cpio - gzipped; tar the root filesystem
$ make busybox-menuconfig...
# Do nothing, just exit (this step probably isn't necessary).
$ make V=1 2>&1 | tee make.out
#
# To build a bootable ramdisk image:
$ mkimage -A arm -O linux -T ramdisk -n "Initial Ram Disk" -d output/images/rootfs.cpio.gz /tftpboot/uramdisk.img
################################################
# Build the kernel:
$ cd linux-3.11.4
$ make mrproper
$ make imx_v6_v7_defconfig
# Modified .config directly to add compiler path...
# CONFIG_CROSS_COMPILE="/home/els/imx6/pass4/rootfs/buildroot-2013.08/output/host/usr/bin/arm-none-linux-gnueabi-"
$ make V=1 2>&1 | tee make.out
# This creates 'arch/arm/boot/zImage' which then needs to have the u-boot header added with this...
$ mkimage -A arm -O linux -T kernel -C none -a 0x10008000 -e 0x10008000 -d arch/arm/boot/zImage /tftpboot/uImage
# Also copy the flattened device tree binary...
$ cp arch/arm/boot/dts/imx6q-sabresd.dtb /tftpboot
################################################
# Build u-boot:
$ cd u-boot-2013.10
$ export ARCH=arm
$ export PLATFORM=imx_v6_v7
$ export CROSS_COMPILE="TOPDIR_HERE/rootfs/buildroot-2013.08/output/host/usr/bin/arm-none-linux-gnueabi-"
$ make mx6qsabresd_config
$ make 2>&1 | tee make.out
# Install this image on your SD card (your 'of' devname may vary):
sudo dd if=u-boot.imx of=/dev/sdd bs=512 seek=2 conv=fsync
With all of the above in completed, the files 'uImage', 'imx6q-sabresd.dtb' and 'uramdisk.img' should be under /tftpboot.
So now install the SD card (SW6: 01000010) and boot to a uboot prompt, and run these commands:
U-Boot> setenv ipaddr YOUR_BOARDS_IPADDRESS
U-Boot>setenv serverip YOUR_TFTPSERVERS_IPADDRESS
U-Boot> tftpboot 0x11000000 imx6q-sabresd.dtb
U-Boot> tftpboot 0x11800000 uramdisk.img
U-Boot> tftpboot 0x12000000 uImage
U-Boot> bootm 0x12000000 0x11800000 0x11000000
This should give you a buildroot login prompt.