Android on i.MX6 (Sabre Lite and Nitrogen6X)

Published on June 14, 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.

N.B. This image is obsolete. Please refer to the latest Jellybean image for the latest image.Another great userspace on i.MX6 is Android, and Freescale has delivered once again.

For the impatient Linux user:

To kick the tires on Android ICS (Ice Cream Sandwich) on a Sabre Lite or Nitrogen6X, you can grab the image from this link:

This image was created using dd and you can restore it to a 4GB SD card on a Linux machine like so:

~/$ bzcat imx6-ics-20120601.img.bz2
    | sudo dd bs=1M of=/dev/mmcblk0
... long time passes
~/$ sync

Note that the example above presumes that you have a built-in SD card reader. If you have a USB card reader, you may have to use /dev/sdb or /dev/sdc.

For Windows users:

For the Microsoft-inclined, we have another image at this URL:

It can be restored to an SD card using Alex Page's very nice USB Image Tool.

Boot-time details:

This disk image was provided by Freescale as a part of their IMX_ANDROID_R13.2 release, and the sources are currently only available under NDA. We modified this slightly to update the kernel to support a couple of different display types and to use a boot script.The boot script also makes use of a feature we added to U-Boot to auto-detect an HDMI panel using the Hotplug detect pin. If you look at the boot script content, you can see that the device is configured to set the primary display to HDMI if hdmidet. It also tests for a TSC2004 controller used on our 800x480 displays:

~/$ strings /media/BOOT/6q_bootscript
boot script
set bootargs console=ttymxc1,115200 init=/init rw no_console_suspend androidboot.console=ttymxc1 vmalloc=400M ;
if hdmidet ; then
	setenv bootargs $bootargs video=mxcfb0:dev=hdmi,1280x720M@60,if=RGB24 video=mxcfb1:dev=lcd,CLAA-WVGA,if=RGB666 fbmem=28M,10M,10M
else
	setenv bootargs $bootargs video=mxcfb0:dev=lcd,CLAA-WVGA,if=RGB666 video=mxcfb1:dev=hdmi,1280x720M@60,if=RGB24 fbmem=10M,28M,10M
# flush TSC2004 if present
i2c dev 2 ;
if i2c md 48 1.1 2 || i2c md 48 1.1 2 ; then
	setenv bootargs $bootargs calibration tsdev=tsc2004 ;
else
	echo "TSC2004 touch controller not found" ;
setenv bootargs $bootargs video=mxcfb2:dev=ldb,LDB-XGA,if=RGB666
${fs}load mmc ${disk}:1 10800000 uimage &&
${fs}load mmc ${disk}:1 12800000 uramdisk.img
&& bootm 10800000 12800000 ; echo "Error loading kernel image"

If you have a DVI monitor, the auto-detect may not work for you.You may also have to upgrade your U-Boot in order to get access to the hdmidet command. A U-boot image is provided on the SD card image and the upgradeu environment variable should be present. See this blog post for details.

U-Boot> run upgradeu
... count down
... reprogramming messages

System details

We chose 720P resolution for this release because we wanted to see successful operation on the largest number of panels out of the box. To reconfigure this, you'll want to hack the boot script. The tool on this web page makes that easy. See this post for background.Take a look in the root folder of the BOOT partition for startup scripts with some other display settings.This Android release is configured to play audio over the headphone jack. This is controlled in the startup scripts and a later post will describe this in more detail.