Android 10 on BeagleBone Black

Karim Yaghmour

At Opersys we’ve had the opportunity to use a very wide range of Android-capable boards over the years. One family of boards we had always enjoyed using were the BeagleBones. It was therefore with a bit of regret that we had to abandon it as an Android target around JellyBean given the lack of support for Android by Texas Instruments (TI). Recently, however, it was with a certain degree of excitement that we got a mandate to help E-SMART port a headless Android 10 to the BeagleBone Black. E-SMART provides an intelligent speed adaptation solution to the transportation industry that lets fleet administrators set a maximum allowed speed limit for every speed zone, thus capping the vehicle’s maximum speed automatically on all roads.

For E-SMART, the primary motivation for porting Android 10 to the BeagleBone Black was to replace off-the-shelf mass produced Android phones with a more stable and consistent platform that could still run Android code. On the software side, many telematics maps systems offer proprietary Android SDKs but few other options, hence the need for using Android as the operating system platform.  On the hardware side, the BeagleBone Black offers an industrial-strength, customizable hardware platform with more generous tolerance to vibrations and temperature variations than consumer-grade phones. Unlike most Android systems this one didn’t, however, require a GUI as it is deeply embedded inside the moving vehicle and therefore has no human-machine interface.

Today we are happy to make this port publicly available.  As with many things that we do at Opersys, this work was built on the shoulders of giants. Our port is based on the work done previously by Chris Simmonds on getting Android 5 and 6 to work on the BeagleBone Black as well as Robert C. Nelson’s Linux kernel and kernel configuration for BeagleBones.  While our specific port is based on 10.0.0_r2, the latest version available at the start of the project, this work should be reusable with more recent versions of the AOSP.

Despite being enthusiastic about having Android 10 running on the BeagleBone Black, it remains that that board has important limitations when compared to the typical hardware used to run this version of Android. We therefore needed to make some compromises. First and foremost there are no Android 10-compatible display drivers and graphics acceleration libraries for the BeagleBone Black.  We’ve worked around this by enabling VKMS in the kernel and using a Gralloc driver that is able to interface with DRI while SwiftShader fills in for the missing OpenGL ES implementation. Altogether, those 3 components allow SurfaceFlinger, and the rest of the framework, to start. We’d especially like to thank Alistair Delva for pointing us in the right direction those aspects figured out.

In short, the port has the following limitations:

  • NO DISPLAY, not even through remote display viewer like Vyzor. This is strictly a headless port and will remain so for the foreseeable future.
  • Very constrained memory. While Android 10 is able to run within the BBB’s 512MB, it’s likely one of the lowest memory configurations this version could tolerate. There’s in fact little room for applications.
  • No wireless or ethernet in the framework, but it is possible to manually enable networking through the ADB console.

Working:

– Android Framework

– Serial port console

– ADB

In progress:

– eMMC booting

Untested:

– Sound

– Ethernet

– Other BeagleBone variants