Second release of Jellybean 4.3 Beta on i.MX6

Published on November 11, 2013

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.

How's this for timing? We just pushed a new release of the Jellybean 4.3 Beta, and immediately received a hint that the GA (General Availability) release is available.

This binary release contains some updates to our first release, largely as mentioned in the comments at the bottom of that post.

In particular, we:

  • fixed support for the early versions of i.MX6 silicon, and
  • added patches to support HDMI audio using the sys.hdmi property,
  • pulled in some patches for netfilter from the AOSP kernel,
  • added the Mozilla Fennec browser and tested WebRTC with this test page, and
  • added the Freescale Ethernet U/I application.

More detailed commentary is below, but an image for our Nitrogen6x, Nitrogen6x-SOM, or BD-SL-i.MX6 (SABRE Lite) boards is available here:

It contains kernels for both the OV5640-MIPI and OV5642 parallel (CSI) cameras with multiple uImage files in the /boot partition.

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.

Assuming your SD card presents itself as /dev/sdc, the Linux commands to extract it would be something like this:

~/Downloads$ sudo umount /dev/sdc*
~/Downloads$ zcat imx6-android-4.3-nitrogen6x-20131110.img.gz
             | sudo dd of=/dev/sdc
~/Downloads$ sync

Sources

The sources are available using branch boundary-imx_jb4.3_1.0.0-beta. If you currently have an Android build tree, you can switch to it using repo sync and repo init:
~/myandroid$ repo sync
~/myandroid$ repo init -b boundary-imx_jb4.3_1.0.0-beta

Details

As you might guess above, the majority of the changes in this release have to do with audio. We've had several putting off HDMI audio support for quite some time, and also had several customers interested in using our boards in A/V-conferencing applications, and chased down some of the details.

Fixes for early silicon

The first release of JB 4.3-Beta would consistently reset during the startup of Android when run on i.MX6 silicon revision 1.0 (Tapeout or TO 1.0).

The problem stemmed from the fact that the JB4.3 Beta image included a watchdog timer with a 10-second refresh interval and a 30-second timeout. When looking into the issue, we found that the problem was actually much bigger. In fact, the system timer was running at 1/3 the speed that it should be, such that a 1-second sleep would wait for ~3 seconds of wall time.

The fix for it involved removing some tests for TO 1.0 in the kernel.

HDMI audio

HDMI audio has been simply missing in all of our Jellybean releases. This wasn't because the driver or Android bindings weren't present, but simply because we had no switch to select between it and the SGTL5000 headphone output.

As described in this comment on the previous post, we addressed this by defining a new property, sys.hdmi. If the property is set to a non-zero value, audio will be routed to the HDMI adapter. If unset or set to zero, audio output will be routed to the headphone jack.

Note that you can add this property into build.prop to force one mode or another if you know your system configuration.

Netfilter patches

When testing Skype on the Nitrogen6X, we saw lots of messages like this on the console:
qtaguid: iface_stat: stat_update() lo not found
Looking into the problem, we found that the problem stemmed from the loopback device, and we could reproduce the error using ping:
root@nitrogen6x:/ # busybox ping -c 1 127.0.0.1
PING 127.0.0.1 (127.0.0.1): 56 daqtaguid: iface_stat: stat_update() lo not found
ta bytes
qtaguid: iface_stat: stat_update() lo not found
qtaguid: iface_stat: stat_update() lo not found
qtaguid: iface_stat: stat_update() lo not found
64 bytes from 127.0.0.1: seq=0 ttl=64 time=20.896 ms
The issue was caused by an incomplete patch set pulling in code from the AOSP kernel, and was addressed by simply cherry-picking patches to the netfilter drivers.

Note that these are also included in the new -GA kernel from Freescale.

Mozilla Browser

Along with Skype, we also tested out WebRTC for use in audio/video conferencing.

The stock Android browser does not yet support WebRTC, but we found that the Mozilla Firefox for Android browser does.

We used the Mozilla gUM test page (getUserMedia) to test things out, and things worked remarkably well. Audio and video latency appear to be low, and the quality high.

The Mozilla team makes it incredibly easy to pull in the latest nightly build, so we included that in this image.

Chrome was not so easy :(, so it's not here.

Ethernet Configuration Application

Finally, we included the .apk for the Freescale ethernet U/I from i.MX Community. This allows you to configure the ethernet adapter for static IP instead of the default DHCP.

As noted in that post, this will be a standard part of the -GA source tree, and we'll include it in our packaging.

Summary

As mentioned at the start of this post, we'll be integrating the General Availability code from Freescale as soon as we can find it, and will publish a full release that includes support for the Nitrogen6_Lite board.

As always, let us know if you have any trouble.