Android Lollipop 5.0.0 ga release for i.MX6 boards
Published on June 24, 2015
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:
- l500-nitrogen6x-20160204.img.gz for Nitrogen6X, SABRE Lite and Nitrogen6_Max
- l500-nitrogen6x_bcm-20160204.img.gz for Nit6Q_W_BCOM
- l500-nit6xlite-20160204.img.gz for Nitrogen6_Lite
UPDATE 20160204: Images has been updated so they now include:
- support of our HDMI to MIPI daughter board
- support of Murata WiFi module
- support of GSLx680 touch controller
- dual display demo application
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: https://source.android.com/devices/tech/security/selinux/index.html
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: https://source.android.com/devices/tech/dalvik/index.html
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
OTA
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:
boot
andrecovery
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
- OTA in lollipop uses block-based updates which cannot be applied on KitKat
- More info: https://source.android.com/devices/tech/ota/block.html
- Also would require to take care of the
data
partition (updating info etc...)
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:
- html5test.com: 477/555 (396/555 in KK)
- octane benchmark: 2294 (2092 in KK)
- test.webrtc.org; 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 https://commondatastorage.googleapis.com/git-repo-downloads/repo
> ~/bin/repo
~/$ chmod a+x ~/bin/repo
~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ ~/bin/repo init -u git://github.com/boundarydevices/android-manifest.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 (source.android.com) 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/envsetup.sh
~/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.