Android KitKat 4.4.3 ga release for i.MX6 boards

Published on April 30, 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 4.4.3 (KitKat) for all our platforms: BD-SL-i.MX6 (SABRE Lite), Nitrogen6x, Nitrogen6_Max, Nitrogen6_Lite and Nitrogen6_VM.

We've done extensive testing of this release, and it brings quite a few new features which we hope you'll enjoy.

Because of this, we're now recommending that this release be used for all new designs and that customers using KK4.4.2 for our off-the-shelf platforms consider migrating.

We will continue to support KK4.4.2 and JB4.3 for existing customers, but our efforts there will be limited to bug fixes and security updates.


For the impatient

You can download images from here:

UPDATE: those images have been updated for various OTA and display fixes (from 20150429 to 20150511).
UPDATE-2: images updated again for better external storage management and file manager app (from 20150511 to 20150610).
UPDATE-3: images updated to match NXP 4.4.3_2.0.1 release which improves graphics and multimedia stability/performances (from 20150610 to 20160816).
UPDATE-4: images updated to support new eMMC 5.0 (>= 20170515).
UPDATE-5: images updated to support new GSLx680 touch controllers & USB multi touch (>= 20171004).
UPDATE-6: images updated to support display configuration from U-Boot (>= 20171213).

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?

The following are the highlights of the updates in this release.

Kernel

      • Linux kernel bumped to version 3.10.53

The kernel is based on Linux kernel 3.10.53  with support for device tree. This makes it easier to customize for new hardware or other use cases as described in our "What's a board" post.

The main difference users will notice is the addition device tree files (.dtb files) in the boot partition next to the kernel (uImage).

Wi-Fi & Bluetooth

      • Wi-Fi and BT support for all platforms

Both TiWi-BLE (WL1271) and Ampak GB86xx (BCM4330) modules, respectively for Nitrogen6x/Max and Nit6xLite, are supported in this version.

bluetooth

      • Wi-Fi Direct is enabled

Testing has been limited to connecting to another Wi-Fi Direct device (Moto G). This should enable the use of Miracast devices allowing to cast the entire screen to a wireless display.

wifidirect_menuwifidirect_connected

Audio and Video

      • Add missing audio and video codecs

Testing showed that a couple of audio and video codecs were missing from our releases. Everything is now handled in hardware for the best performance. As usual, we recommend the Tears of Steel high quality videos for testing.

We also included the Cactus Player into our build for an easy-to-use video player.

tearsofsteel

      • Add USB audio support

Both USB Accessory and USB DAC support have been enabled but not tested. Let us know if you are interested in those modes.

Super User

This package allows applications to be granted root access after approval via a pop-up.

authorize-browser

This feature is disabled by default. In order for it to work you need start the service as follows:

~/$ adb shell 'setprop persist.sys.root_access 3'

You can also configure this and see logs of application activity through Settings > Superuser.

superuser_log

External storage

      • Auto-mount of USB drive and SD card as external storage

A USB drive is now automatically mounted as /storage/udisk/ and an SD card will be mounted under /storage/extsd/ if not used as booting device. Both need to be formatted as FAT, otherwise they will not be recognized properly.

The image configures /dev/block/mmcblk2 as the external drive. This is:

      • the top (micro) SD connector on Nitrogen6x
      • The micro SD connector on Nitrogen6_Max
      • The bottom (full-size) SD connector on BD-SL-i.MX6 (SABRE Lite)

This behavior can be changed by commenting/un-commenting the right line in the file device/boundary/nitrogen6x/fstab.freescale.

ext_storage

Refer to the KitKat new external storage limitation for the compliance details and directory structure.

OTA updates

      • OTA support enabled

We'll publish notes about how to use this in a separate post.

ota_update_available

Miscellaneous

      • Device folder clean-up
        • simplified init.rc and ueventd.rc
        • removed deprecated inits
      • Various build enhancements
        • bootimage target
        • Parallel build fixup
      • Various HAL fixes (backlight, Wi-Fi...)
        • Backlight device automatically detected
        • Wi-Fi Direct interface created if needed
      • OpenSSL vulnerability fix
        • Fix early CCS issue as required by CTS
      • CTS testing
        • Ensured hardware features are properly advertised

Source code access

The sources for this release are in the boundary-imx-kk4.4.3-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-kk4.4.3_2.0.1-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

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-kk.out

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

Useful tips

If your latest modifications only affect kernel, ramdisk or bootscript, you do not need to start a full build but use the bootimage target instead.

~/myandroid$ make bootimage

This will only update the components under the boot/ output folder which then can be updated as follows as an example:

~/myandroid$ adb push $OUT/boot/imx6q-nitrogen6x.dtb /boot ~/myandroid$ adb push $OUT/boot/uImage /boot ~/myandroid$ adb push $OUT/boot/6x_bootscript /boot ~/myandroid$ adb push $OUT/boot/uramdisk.img /boot

Those modifications require a reboot in order to take effect:

~/myandroid$ adb reboot

If on the other hand the modification only affect a specific package, you can rebuild only that latter by issuing:

~/myandroid$ mmm hardware/libhardware_legacy/

You can even force the rebuild in case the Android.mk doesn't see any obvious change that require re-building:

~/myandroid$ mmm -B hardware/libhardware_legacy/

Then the Android build process allows you to just send over changes to a USB-connected board using adb sync which requires to remount the system partition first:

~/myandroid$ adb remount ~/myandroid$ adb sync

If you're changing system components, the best is to reboot as explained above but you could stop and restart the Android GUI.

~/myandroid$ adb shell 'stop && start'

 

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