Reader “Mark” recently left a comment saying the NDA on Freescale i.MX6 resources was lifted and documentation and source code were now available for the platform. So it’s time for me to look into it, and provide an overview of Freescale i.MX6 features, list available development platforms, and have a closer look at the documentation, source code and tools for the platform.
Freescale i.MX6 Processors
In 2011, Freescale initially announced 3 processors in the i.MX6 series for consumer, industrial and automotive markets, but added 2 lite SoC in 2012, and there are now 5 members in the family:
- Freescale i.MX6SoloLite – Single Cortex A9 processor up to 1 GHz with 256KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D graphics accelerator (Vivante GC355 + GC320)
- Freescale i.MX6Solo – Single Cortex A9 core up to 1 GHz with 512KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D & 3D graphics accelerator (Vivante GC880 + GC320)
- Freescale i.MX6DualLite – Dual Cortex A9 up to 1 GHz with 512KB L2 Cache, 32-bit DDR3 and LPDDR2 memory support, and 2D & 3D graphics accelerator (Vivante GC880 + GC320)
- Freescale i.MX6Dual – Dual Cortex A9 up to 1.2 GHz with 1MB L2 Cache, 64-bit DDR3 and LPDDR2 memory support, SATA-II, and 2D & 3D graphics accelerator (Vivante GC2000 + GC355 + GC320)
- Freescale i.MX6Quad – Quad Cortex A9 up to 1.2 GHz with 1MB L2 Cache, 64-bit DDR3 and LPDDR2 memory support, SATA-II, and 2D & 3D graphics accelerator (Vivante GC2000 + GC355 + GC320)
Everything I’ve written above is actually nothing new as this was mentioned in the press releases and Freescale i.MX6 page for a while. What might be new is the internal structure of the processors.
If you want to get more overview about Freescale i.MX6 SoC features, I invite you to visit the 2 links at the beginning of this section. If you want to look into details continue reading and we’ll get to the documentation soon.
Freescale i.MX6 Development Boards
In this blog, I mainly cover low cost development boards and gadgets, and we have already several boards which are available now or soon will be:
- Freescale iMX6 Quad Sabre Lite Development Board ($179 to $199) – Freescale i.MX6Q, 1 GB RAM, dual SD card slot, 3x USB, SATA-II interface, 2x CAN etc..
- Boundary Devices Nitrogen6X Freescale i.MX6 Development Kit ($199) – Based on Freescale i.MX6Quad and very similar (and almost software compatible) to the SABRE Lite board, but it supports an optional Wi-Fi/Bluetooth module, and has been designed so that a case can be made for it (Source).
- Wandboard Development Boards ($69 and $89) – Those are 2 new boards based on Freescale i.MX6Solo (512 MB RAM) and i.MX6Dual (1 GB RAM)
Another low cost alternative would be to use the upcoming Hiapad Hi-802 mini PC ($89) based on Freescale i.MX6Quad and providing easy access to debug ports. Obviously this option offers less flexibility and features than the first 2 boards.
Freescale also provides some full-featured (and somewhat expensive) development platforms for different applications:
- i.MX 6SoloLite Evaluation Kit ($399 to $499) – Evaluation kit based on i.MX6SoloLite to develop e-Reader products. $399 is for the board only, and $499 includes an E-Ink Panel with the board.
- SABRE Board and Platform for Smart Devices ($399 and $999) – The SABRE board (MCIMX6Q-SDB) is powered by i.MX6Quad with 1GB RAM, 8GB eMMC, 2xLVDS, HDMI and LCD video outputs,, 2x SD card sockets, Gb Ethernet, SATA connector and more. The SABRE Platform is based on the SABRE board and comes with a 10.1″ LVDS display with integrated P-cap sensing.
- SABRE for Automotive Infotainment ($799) – There are actually 2 platforms: one using i.MX6Quad(1GHz) and the other i.MX6DualLite (800 MHz). Both plaforms come with 2GB DDR3 RAM, 32 MB NOR flash, a NAND flash socket, LVDS & HDMI interfaces, Ethernet, SD card socket, and more. The Quad version also comes with a SATA port.
All development platforms should be be able to support Android, Linux and Windows Embedded operating systems.
Freescale i.MX6 Documentation
BIG FAT WARNING! If you’ve been working on Chinese (and/or Taiwanese) SoCs for too long, you may be in for a shock (and may end up missing reverse-engineering the datasheet from the source code) as Freescale has released lots of document publicly (I won’t be able to list them all here) and the documentation appears to very thorough. For example, Freescale i.MX6 Reference Manual is 5739 pages long!
You can find all documents on Freescale i.MX6 Documentation page, and the most interesting (to me) are:
- i.MX 6Dual/6Quad Applications Processors for Consumer Products (169 pages) – This is the datasheet.
- i.MX 6Dual/6Quad Applications Processor Reference Manual (5739 pages) – The reference manual provides complete documentation about the different “modules” of the SoC from features, to signals and registers description and usage.
- i.MX 6 Series Fact Sheet (3 pages) – Gives a short overview of Freescale i.MX6 family
- i.MX 6Quad and i.MX 6Dual Linux GA BSP Documentation – Includes Release Notes, Reference Manual, User guide. API…
- Linux Multimedia Codecs Documentation – Includes CODECs Release Notes and User’s Guide. It explains how to use the multimedia feature with GStreamer among other things.
- i.MX 6Quad and i.MX 6Dual Android GA BSP – Documentation. Android BSP Documentation. Includes Release Notes and User’s manual.
I’ve flicked through the technical documentation and it seems really good. I’ve discovered that i.MX6Quad can boot from SPI, I2C and EIM (External Interface Module) interfaces, NAND flash, SD/MMC, SATA or USB depending on the board configuration, which looks pretty darn interesting, especially for USB and SATA boot.
I’ve also looked at Linux and Android documentation (obviously), but I’m a bit puzzled as it asks you to use Ubuntu 9.04 (Jaunty) for the build environment (LTIB), and provide links to a git repo where the kernel has not been updated for 8 months and u-boot for 4 months… But as you’ll see below we won’t need to use those as you’ll discover below. Most of the software documentation on Freescale refers to the SABRE for Smart Devices and Automotive Infotainment, so if you are using one of the low cost board may be better off checking out the vendor software documentation.
[Update: There are lots of how-tos for i.MX6 processors on imx community page]
Elements14 has documentation for the SABRE Lite Board (which it sells for $179) including a user manual describing the hardware and showing how to get started with the software (TimeLink Linux BSP), and schematics. Boundary Devices has excellent instructions on their blog, and if you have a Freescale i.MX6 device to develop on, I recommend you subscribe to their blog.
Freescale released schematics and PCB layout files for the SABRE SD and AI platforms (Cf. Printed Circuit Boards and Schematics-Schematics section on i.MX6 page). If you are more interested in SABRE Lite hardware, Boundary Devices released the following files:
- SABRE Lite Rev D PDF Schematic
- SABRE Lite Hardware User Manual
- SABRE Lite BOM
- SABRE Lite Rev D Layout
Freescale i.MX6 Linux and Android BSP & Source Code
Freescale i.MX6 Source Code
Beside linking to an outdated git repository, Freescale also provides download link to Linux Kernel 3.0.35, Android 4.0.4 and Multimedia Codecs source code:
- L3.0.35_12.09.01_ER_SOURCE (850 MB) – i.MX 6Quad and i.MX 6Dual Linux GA BSP 3.0.35 Source Code Files.
- IMX6_R13.4_ANDROID_SOURCE_CODE (171 MB) – i.MX 6Quad and i.MX 6Dual Android GA BSP Documentation, Source Code (patches) and Mfgtool for Android 4.0.4
- MM_CODECS_LINUX_12.09.01 – Multimedia Codecs Sources for i.MX 6Quad and i.MX 6Dual Linux GA BSP.
Building the Linux Kernel and U-Boot for Freescale i.MX6 SABRE Lite board
Let’s try to build u-boot and the kernel for Freescale .iMX6 uing ltib in Ubuntu 12.04 64-bit.
After downloading L3.0.35_12.09.01_ER_SOURCE, extract it, and install the LTIB package as a normal user (not as root), in a location such as /home/user/:
tar zxvf L3.0.35_12.09.01_GA_source.tar.gz
Install some dependencies (this may vary depending upon your current installation and OS):
sudo apt-get install zlib1g zlib1g-dev m4 bison tcl ncurses-dev liblzo2-dev uuid-dev librpm-dev rpm curl
Since I’m using a 64-bit build machine, I also had to install the following:
sudo apt-get install ia32-libs libc6-dev-i386 lib32z1
After spending some time trying to figure out problems, I realized Ubuntu 12.04 is not currently supported in LTIB and you need a patch, which you can apply as follows in ltib directory:
curl -L https://community.freescale.com/servlet/JiveServlet/downloadBody/93455-102-3-2835/patch-ltib-ubuntu12.04.sh | bash
Finally, you may need to edit the sudoers file (sudo visudo) to allow the current user to run rpm as root without password, and add the following line:
user ALL = NOPASSWD: /usr/bin/rpm, /opt/freescale/ltib/usr/bin/rpm
Start to build LTIB and cross your fingers:
./ltib -m config
At this point, it will install the host support packages (it will take a while) and eventually a menu will popup.
Set the platform to “Freescale iMX reference boards” (as if you had a choice), exit and save the changes. At the next menu, select platform type as “imx6q” and package profile. Exit and save the new configuration. Please note that only the profiles of Min profile, FSL gnome release packages, and mfg firmware profile pass build tests. I chose the default “Min” profile.
You can use the ./ltib -m selectype command to change the profile after the first selection.
To build U-Boot for i.MX6 SABRE Lite board, select “Choose your board for U-Boot” as “mx6q_sabrelibre”. This option is only for U-Boot, as the current default kernel configuration builds a single image that works for all i.MX6 boards except i.MX 6SoloLite boards. Close the configuration screen and save the changes. You can now build the kernel and U-Boot by running the following command:
The build failed to build busybox. To fix it, I had to edit rootfs/usr/lib/libc.so and change one line to:
GROUP ( libc.so.6 libc_nonshared.a AS_NEEDED ( ld-linux.so.3 ) )
Same thing for rootfs/usr/lib/libpthread.so:
GROUP ( libpthread.so.0 libpthread_nonshared.a )
Then type ./ltib again. When this procedure is completed, the kernel image and the U-Boot images are located at: rootfs/boot/:
ls -l rootfs/boot/
lrwxrwxrwx 1 root root 6 Nov 18 12:36 bootable_kernel -> uImage
-rw-r--r-- 1 root root 68241 Nov 18 12:35 linux.config
-rw-r--r-- 1 root root 1615837 Nov 18 12:35 System.map
-rwxr-xr-x 1 root root 739072 Nov 18 11:42 u-boot
-rwxr-xr-x 1 root root 178936 Nov 18 11:42 u-boot.bin
-rw-r--r-- 1 root root 3760504 Nov 18 12:35 uImage
-rwxr-xr-x 1 root root 14034174 Nov 18 12:35 vmlinux
-rwxr-xr-x 1 root root 3760440 Nov 18 12:35 zImage
Freescale i.MX6 Android, Linux, Ubuntu… Binary Images/Files
There are also some binary demo files for Android and Linux and closed source files (e.g. codecs):
- IMX6_R13.4_ANDROID_DEMO_IMAGE – i.MX 6Quad and i.MX 6Dual Android GA BSP Binary Demo Files.
- L3.0.35_12.09.01_DEMO_IMAGE – Linux Binary Demo Files for i.MX 6Quad and i.MX 6Dual Linux GA BSP.
- L3.0.35_12.09.01_UBUNTU_RFS – File System for the Ubuntu Images for i.MX 6Quad and i.MX 6Dual Linux GA BSP.
- AACP_CODECS_ANDROID_13.4 – AAC Plus Codec for i.MX 6Quad and i.MX 6Dual Android GA BSP.
- AACP_CODECS_LINUX_12.09.01 – AAC Plus Codec for i.MX 6Quad and i.MX 6Dual Linux GA BSP
Beside the Ubuntu root file system, Arch Linux for ARM is also said to be working on Nitrogen6X board.
There are also demo images specific to SABRE Smart Devices and Automotive Infotainment platforms. For a complete list of available files, visit Freescale i.MX6 Software & Tools page.
Boundary devices posted a binary LTIB image for i.MX6 Sabre Lite and Nitrogen6X boards as well as a short getting started guide. It might be worth having a look, although this has been done in August. Linaro has instructions to run Ubuntu 11.10 (Oneric) on the board, but it dates a bit and images have disappeared.
Finally, you could also use Timesys LinuxLink Linux BSP for SABRE Lite and Nitrogen6X boards. LinuxLink is a web based system that allows you to build custom Linux distributions for your board. I gave an overview of this web-based build system in a previous post “Timesys Unveils LinuxLink BSP/SDK for MityARM-3359 SoM (TI AM335x)“.
Freescale i.MX6 Development Tools
Again, you can check Freescale i.MX6 Software & Tools page for a list of software and hardware tools, but there appears to be 3 main software tools:
- LTIB – This is the default build system for Freescale i.MX series processors, and it widely referred to in the documentation.
- MfgTool – Tool for downloading OS images to the i.MX6. It can be downloaded separately, but is also part of IMX6_R13.4_ANDROID_SOURCE_CODE.
- IMX_CST_TOOL – Freescale Code Signing Tool for the High Assurance Boot library. Provides software code signing support designed for use with i.MX processors that integrate the HAB library in the internal boot ROM.
If you develop on hardware based on Freescale i.MX6, you’ll have to use the first 2 tools.
To be honest, I’m not exactly sure what the third tool does, but it seems required for security purpose at boot time. You need to be approved manually by Freescale before being able to download IMX_CST_TOOL.[Update: I’ve been approved to download the tool after 12 days, and what it does is to lock your hardware to only run software signed with a specific key. This means you would not be able to hack your i.MX6 device if HAB Library/ CST are in use]. This is probably not really needed if you just want to tinker with your board, but if you’re going to make a commercial product, you may need it.
Elements14 also point to Timesys LinuxLink (mentioned above) and ARM DS 5, and even if those are interesting, they may not be necessary. It all depends on your preferences and needs.
For low level debugging and board bring-up, you may want to use hardware probes such as ARIUM HS-1000S JTAG Emulator/Debugger or iSystem iC3000 ActiveEmulator debug and test tool.
If you need support for the platform for one of the low cost boards, you could check the imx community, comment in Boundary Devices blog (if you use their images) or participate in Elements14 community.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
37 Replies to “Freescale i.MX6 Resources: Development Boards, Documentation, Source Code and Tools”
I think I just came in my pants.
Nice write-up, look forward to some set top box form factor devices using the quad!
Did I already mentioned to you how good it is to have you back 😀
Great write up. Will have to go through it once more later, when the coffee really have kicked in.
Great article. I ordered a sabre lite (around $185 shipped to me) from newark.com. They are still on pre-order but say boards should ship on 11-21-12. I’ll test your build instructions once I receive it.
I was really shocked when I first found the SDK and docs for the older i.mx53. I’ve never seen any SoC vendor release so much detailed info without an NDA. I knew they would eventually do the same for the i.mx6 once it was officially released.
In addition to the properly written English documents (no poor Chinese translations here!), you also have a support forum where actual freescale employees answer your questions, post sample source code, etc. Support is unreal compared to the Chinese vendors.
Too bad freescale has not had much market success with their products. There are very few tablets, tv sticks, etc. using their chips. Hopefully they will not go out of business.
TI also have very good free documentation for the OMAP stuff, although i would say the freescale kernel bits are better written and better documented from what little i’ve seen of either.
The kobo (touch at least) uses an i.mx53, so they must be used there and about outside of chinese designs – perhaps in other e-ink devices.
Maybe this is the reason why we have this info?
Factories appear to struggle to get stock for the i.MX6 SoC, hopefully not because of production issue, but because of demand. I can see many new products (tablets, low cost boards and soms mainly) featuring i.MX6 processor.
TI has also a very good documentation and has most probably the best community thanks to the Beagleboard/Beaglebone/Pandaboard boards, but Freescale i.MX6 appears to be very price competitive for a quad core processor, and they have long term support (10 years) which fits some markets such as automotive and industrial applications.
I agree that TI is another good vendor with lots of documentation and code. But they are exiting the mobile processor market so continued support is in doubt. Is there even a low cost (<$200) TI 4470 board available somewhere?
You have the Pandaboard for instance for the OMAP. http://pandaboard.org/
Else, the i.MX is looking great, and I’m currently designing a board for my employer with it. Freescale is really more targeted to industrial and automotive, but the price of the new imx6 is really competetive also for commercial use and I think it has great potential. The imx6 will also be available for a minimum of 15(!) years since it’s an automotive product, according to Freescale’s longevity program. so the effort put into this platform will not be wasted by obsoletions and new product releases in the near future…
I really hope it picks up momentum with low-cost Tv-boxes too, since this is much more hacker friendly with proper documentation and sw.
Sure, both Kindle (3 at least) and Sony PRS T1, few of the most successful E-Book readers (IMHO) have Freescale i.MX CPUs, so they’re definitely not the least presented on the market.
If you look at “i.MX 6Dual/6Quad Applications Processor Reference Manual”, page 495, you’ll read:
“9.9.1 Vector Graphics Overview
The vector graphics processing unit (version 2) is based on the GC355 IP core.
Information about the GPU IP is currently contained in the following documents:
That last file would be great to get hands on. CNX, any ideas?
I haven’t seen such file. Maybe you’d have to contact Vivante to get it (under NDA).
Canceled my pre-order for sabre lite. After reading the source and docs for a few days, I realized the i.mx6 built-in HDMI transmitter does not support 74.176/148.352 Mhz pixel clocks. That’s a deal breaker for my application. Hopefully someone makes a board with external HDMI chip in the future. Otherwise, I’m waiting for Omap5 or maybe look into Exynos5.
0.148 MHz really makes that much difference? It’ll do 1080p @ 60fps with a pixel clock of 148.5 MHz.
I think that’s the reason (Comment by the same Mark): http://www.cnx-software.com/2012/04/08/mele-a1000-android-2-3-stb-unboxing-and-review/comment-page-2/#comment-7482
Correct. My application requires live video streaming. It must be played back at an exact rate matching the input, otherwise the decoding buffer will eventually overflow/underflow. Dropping or repeating frames like you see in all the other Arm SoC is not acceptable to me. Reading their specs and source code, Omap4, Exynos5, and Telechips seem to support all necessary video timings.
But in the reference manual, starting p.1501 there’s a list of supported video modes, and it looks like 1080p 74.18/148.35 MHz is supported. Where could you find out the issue? In the source code?
If you look at that table in the manual, you see that the 60 and 59.94Hz modes all map to the same value in the first column. They are basically treating those as equivalent modes – which they are not. You can also see that their HDMI transmitter does not support the correct clocks on page 1507 – section 18.104.22.168 : CTS Calculation. They do not support any of the clocks that require 1.001 scaling: 60/1.001 = 59.940, 24/1.001=23.976, etc.
In general, since we don’t have reference manuals to the majority of SoC out there, I usually just look at the kernel source code where they initialize the HDMI transmitter. HDMI does not have a separate clock for the audio so it must be derived from video clock using numerator/denominator scale vales that you pass down to the sink device. Any chip with correct clocks will pass down TMDS CTS and N values of 140625 and 5824 for 1080p/59.940 using 48Khz audio sampling rate. You can see other valid combinations in the HDMI 1.4 specifications – table 7-3. Most Arm SoC only support 6144 for N and 74250 or 148500 for CTS. Of course it’s possible the manuals are wrong or the source code is incomplete but I’m not wasting my time on something without proof it supports what I need.
Updated post with more info on CST Tool. It will tie the hardware and signed software together. So if you buy a device that makes use of this feature, you will not be able to tinker with it, such as changing the OS, without knowing the encryption key.
I know how to configure the kernel for the i.MX processor.
-> How can i download the boot-loader into the i.MX processor ?
-> Also i little confused in selecting which flash memory is better NAND or NOR ?
-> If i have downloaded the images into SD/MMC card then what will be the use of NAND Flash or NOR Flash?
Nothing for GC350, but I’ve just come across GC320 reference manual on etnaviv site – http://www.vivantecorp.com/Vivante_GC320_Technical_Reference_Manual_V1.0_A.pdf
@cnxsoft: Good find! Was surprised to see title page mention OMAP4470 having it, wouldn’t think they stuff completely new block in OMAP4 series. Pandaboard ES is still OMAP4460 though.
@cnxsoft: Tried installing L3.0.35_4.0.0_130424_source.tar.gz, the latest linux release and I’ve also applied the patch for ubuntu 12.04. Yet it simply refuses to install ltib. The contents of the host_config.log are as follows. Please advise.
Build path taken because: directory build, no prebuilt rpm,
Cowardly refusing to clobber existing directory:
Remove this by hand if you really want to rebuild this package from scratch
Died at ./ltib line 1392.
Started: Mon Jun 10 16:12:06 2013
Ended: Mon Jun 10 16:12:06 2013
Elapsed: 0 seconds
These packages failed to build:
little (honestly tiny) concern: in the ‘Building the Linux Kernel ..,’ section, you’re altering the same file 2 times in a row (‘rootfs/usr/lib/libpthread.so’). I guess the first is supposed to be ‘rootfs/usr/lib/libc.so?
Just stalled over it and guessed I might spare others some time.
thanks and regards for a great article,
Thanks for noticing. You must be right, so I changed it.
sudo apt-get install texinfo or sudo aptitude install texinfo and try again
Can you please suggest a software development tool for Freescale i.MX6Quad – Quad Cortex A9 . Will DS-5 will support it ??
Yes, i.MX6 processor are supported by DS5 -> https://developer.arm.com/products/software-development-tools/ds-5-development-studio/resources/supported-devices#NXP
By the way, Freescale now belongs to NXP, and all part have been rebranded. So you’d use NXP i.MX6 processors now instead of Freescale i.MX6.