Buildroot for i.MX5 and i.MX6

Published on September 11, 2012

Archived Notice

This article has been archived and may contain broken links, photos and out-of-date information. If you have any questions, please Contact Us.

We recently had a need for a quick RAM-disk image and went to the tool we've been using for years: Buildroot and took some notes along the way.

With less than 10 minutes of effort, I had a newly built RAM disk image that will work on either i.MX5x or i.MX6x boards, complete with login, and the filesystem utilities I was after. I was about to build

Try doing that, Yocto!

Getting right to the point, the steps I took were these:

Grab the latest snapshot

~/$ wget ~/$ tar zxvf buildroot-2012.08.tar.gz

Configure for i.MX

~/$ cd buildroot-2012.08 ~/buildroot-2012.08$ make menuconfig Using the kconfig interface, I chose:
  • Target ARM (Little-Endian)
  • Target Cortex A-8
  • 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
Please read for a nice (and short) guide to usage. In particular, pay attention to this one:
~/buildroot-2012.08$ make busybox-menuconfig After making those selections, a simple make resulted in a gzipped cpio archive.

Build the image

~/buildroot-2012.08$ make ~/buildroot-2012.08$ ls -l ./output/images/rootfs.cpio.gz -rw-r--r-- 1 user group 1380949 2012-09-11 13:09 ./output/images/rootfs.cpio.gz Less than 1.4MB for a working filesystem image with the tools I needed. Very nice!

Wrap it for U-Boot

In order to boot this using the 2-parameter U-Boot bootm command, all that was left is to wrap it up: ~/buildroot-2012.08$ mkimage -A arm -O linux -T ramdisk -n "Initial Ram Disk" -d output/images/rootfs.cpio.gz uramdisk.img Image Name: Initial Ram Disk Created: Tue Sep 11 15:26:51 2012 Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 1380949 Bytes = 1348.58 kB = 1.32 MB Load Address: 0x00000000 Entry Point: 0x00000000

And boot it

I booted this on an i.MX6 by hand by placing it and a kernel on an SD card like so: MX6Q SABRELITE U-Boot > mmc dev 0 MX6Q SABRELITE U-Boot > fatload mmc 0 12000000 uImage reading uImage 3837484 bytes read MX6Q SABRELITE U-Boot > fatload mmc 0 12500000 uramdisk.img reading uramdisk.img 1381013 bytes read MX6Q SABRELITE U-Boot > bootm 12000000 12500000 ## Booting kernel from Legacy Image at 12000000 ... Image Name: Linux-3.0.35-1968-gd3f7f36-02004 Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 3837420 Bytes = 3.7 MB Load Address: 10008000 Entry Point: 10008000 Verifying Checksum ... OK ## Loading init Ramdisk from Legacy Image at 12500000 ... Image Name: Initial Ram Disk Image Type: ARM Linux RAMDisk Image (gzip compressed) Data Size: 1380949 Bytes = 1.3 MB Load Address: 00000000 Entry Point: 00000000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel. ... Welcome to Buildroot buildroot login: root # For more information about hacking RAM disks, check out this post.