Android Lollipop 5.0.0 ga release for i.MX6 boards

Published on June 24, 2015

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 are glad to release a new version of Android 5.0.0 (Lollipop) for all our platforms: BD-SL-i.MX6 (SABRE Lite), Nitrogen6x, Nitrogen6_Max, Nitrogen6_Lite and Nitrogen6_VM.

This release went under the same testing as our KitKat release.

We now recommend either KitKat 4.4.3 or Lollipop 5.0.0 for new designs. The selection will depend on customer preferences, knowing that Lollipop offers the latest API with a shiny UI but is also more memory hungry.

For the impatient

You can download images from here:

UPDATE 20160204: Images has been updated so they now include:

As usual, you'll need to register on our site and agree to the EULA because it contains Freescale content. The image is a 4GB SD card image that can be restored using zcat and dd under Linux or Alex Page's USB Image Tool under Windows.

What's new?

First of all, this release includes all the features that were previously available in our last Android 4.4.3 release. We will only describe the changes brought either by the OS update itself or changes in features that have been enabled in last release.


SELinux in Android

A security blog post will be created to cover this subject in detail. This section will try to summarize the main differences between KitKat and Lollipop releases and how to work with SELinux enforcement.

SEAndroid was also enabled in KitKat, but most of the security domains were set to be permissive, and denials were logged but not actually applied. All domains are enforced in Lollipop, so the policies must be configured properly for the system to behave as expected.

Check out this link to look at the different policies we've created.

Since SELinux can impede development, we've added a trigger to the boot script that allows you to disable enforcement during development.

  • If you want to be permissive (denials logged in dmesg but not enforced)
U-Boot > setenv selinux permissive
  • If you want to disable selinux completely (no logs)
U-Boot > setenv selinux disabled

More info:

Android runtime (ART)

You may not have noticed, but you had a choice of Java virtual machines in Kitkat, and could choose between the new "Android runtime" VM (ART), and the Dalvik VM used in previous versions of Android. In Lollipop, ART is the only choice.

More info:

WiFi Tethering

WiFi Tethering is now enabled and has been tested with both TiWi-BLE (WL1271) and Ampak GB86xx (BCM4330) modules.


NOTE: Android disables WiFi STA mode when the tethering is enabled. The use case tested is to have a connection available from the Ethernet port which is then shared through the hotspot.

WiFi Direct status

After some more testing on this feature, it appeared that on the TiWi-BLE module, used on Nitrogen6x and Nitrogen6_max, enabling the WiFi Direct feature may cause the Bluetooth not to perform normally (disconnection, sound cutting off etc...).

Therefore, for those experiencing Bluetooth issues that may come from this, we've added an option to disable WiFi Direct without having to re-build an image. It only requires to set a persistent property and reboot the device:

~/myandroid$ adb shell setprop persist.sys.wifidirect disabled ~/myandroid$ adb reboot

On the opposite, in order to re-enable the WiFi Direct feature, issue the following commands:

~/myandroid$ adb shell setprop persist.sys.wifidirect enabled ~/myandroid$ adb reboot


Just like last release, this one has OTA updates enabled for our platforms. However it is to be noted that upgrading from KitKat to Lollipop using OTA for various reasons:

  1. boot and recovery partitions have been switched to ext4 instead of FAT for convenience
    • Recovery console doesn't provide any mechanism to re-partition a device during update
  2. OTA in lollipop uses block-based updates which cannot be applied on KitKat

We also invite you to look at our security post about OTA to get more information.

File Manager

Although this application has been added to a recent update of the KitKat release, here is a note about the open-source Cyanogenmod CMFileManager which is now a default application to our builds. This is intended to help customers navigate through their storages (internal or external). It can also be used to edit a text file as well as installing an .apk application or even start playing a video.


Performance comparison

Memory usage

As mentioned above, Lollipop is more memory hungry than KitKat was so we wanted to share memory consumption at boot up:

  • Nitrogen6x/BDSL: 450MB used (378MB in KK)
  • Nit6xlite: 400MB used (340MB in KK)

As you can see, there is about 20% increase of used memory at boot up.

Browser capabilities

Lollipop brings an updated libwebviewchromium which means the Browser and more generally any webview-based application supports more features.

Here is a non-exhaustive list of benchmarks showing the evolution of the Browser between both releases:

  • 477/555 (396/555 in KK)
  • octane benchmark: 2294 (2092 in KK)
  •; webcam and microphone features now working 

Easter egg

As usual, this Android version comes with its own Easter egg, this time it is a flappy bird-like game. We let you discover how to access it, feel free to share your highest score.


Source code access

The sources for this release are in the boundary-imx-l5.0.0_1.0.0-ga branch of our new android-manifest Github project.

For the newcomers

If you haven't built our Android software from sources, there are multiple steps to the process to fulfill some of the licensing agreements. You'll first need to:

After that, you'll need to install the Google repo tool, and initialize a new repository more or less as follows:

~/$ curl > ~/bin/repo ~/$ chmod a+x ~/bin/repo ~/$ mkdir myandroid ~/$ cd myandroid ~/myandroid$ ~/bin/repo init -u git:// -b boundary-imx-l5.0.0_1.0.0-ga ~/myandroid$ repo sync

Note that this will download over 15GiB of source code and tools, so it will take a while.

If you're not familiar with repo, you should check out the notes in the AOSP documentation. It's a very nice tool for consolidating multiple source code repositories into a single project, and has lots of features for tracking changes across the various packages. The file .repo/manifests/default.xml consolidates the almost 400 packages that comprise our Android release.

You can see the structure here in our Github repository:

Once you've sync'd your repository, make sure you have all the tools to build Android ( as well as the one required by Freescale:

~/myandroid$ sudo apt-get install uuid uuid-dev ~/myandroid$ sudo apt-get install zlib1g-dev liblz-dev ~/myandroid$ sudo apt-get install liblzo2-2 liblzo2-dev ~/myandroid$ sudo apt-get install lzop ~/myandroid$ sudo apt-get install git-core curl ~/myandroid$ sudo apt-get install u-boot-tools

Note: Lollipop now requires that you use OpenJDK v7 instead of SunJDK v6

~/myandroid$ sudo apt-get install openjdk-7-jdk

Optionally, you can update the default Java version by running:

~/myandroid$ sudo update-alternatives --config java ~/myandroid$ sudo update-alternatives --config javac

Or you can just point to the JDK to be used before sourcing the environment:

~/myandroid$ export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 ~/myandroid$ export PATH=$JAVA_HOME/bin/:$PATH

The next step is to choose the target board and build:

~/myandroid$ source build/ ~/myandroid$ lunch ... choose Nitrogen6x or Nit6xlite from the list of boards and then build ~/myandroid$ make 2>&1 | tee build.out

A full build will take upwards of 3 hours, but incremental builds are pretty speedy if you're changing things.


As always, let us know your experiences (both good and bad) when you test out this image.