sw-announce-android

We are pleased to announce our Android 14 open-source release for all Tungsten Platforms. This includes our new Tunsgten510 SMARC and our Tungsten700 SMARC. This release is based on the great Baylibre RITA release!

Prebuilt Image

You can download the prebuilt images from here:

How to Burn

The .zip archives include all the files to be flashed using fastboot as well as a flashing script.

Connect from your machine a serial-to-USB adapter to the SERIAL header and a USB-C cable to J25 on the carrier board.

First you need to enter fastboot mode from U-Boot prompt:

=> fastboot 0

If you are unable to get into fastboot mode from U-Boot, you can follow the this blog to recover your Tungsten platform.

Finally, flash the images:

$ ./flash.sh

Note that you can also use fastboot from a Windows Host PC, see following blog post to learn how:

What’s new?

Android 14 OS updates

Google provides a list of notable changes for developers:

rita14_version

Open-source

This release is the “most open-source” Android BSP we’ve ever provided as even the GPU driver is!

It comes at the price that not all features are supported yet, but the community and Baylibre are working hard on adding those.

SELinux

This release comes with SELinux in permissive mode for easy debugging / customization.

Note that this feature only works on userdebug builds, user builds are enforced at all time.

AVB2.0

The image also supports Android Verified Boot 2.0!

So I can’t make any modification now? No, there’s a way to disable verity for userdebug builds:

$ adb root
$ adb disable-verity
$ adb reboot

At this point you will be able to modify every partition. However, it goes without saying that this disablement isn’t possible on user builds.

Linux Kernel 6.12.x

This Android release is based on a 6.12.x kernel from Google + a few upstream changed. It allows to use the GKI (Generic Kernel Image) from Google and be future proof as the 6.12 kernel is the latest LTS version available.

Supported features

  • MIPI-DSI as primary display support
  • ARM Mali GPU using open-source driver/mesa
  • Ethernet connectivity
    • This release supports both our KSZ9031 and USB LAN78xx PHYs
  • Standard peripherals & busses: I2C, SPI, GPIO, PCIe, USB
  • Wi-Fi & Bluetooth connectivity

rita14_wifi

The currently missing items are:

  • HDMI/DP display support
  • Video codecs (decode / encode)
  • Audio I2S
  • MIPI-CSI

We will update this release as soon as those features become available.

Build instructions

First and foremost, we recommend to read Baylibre RITA documentation as it is well written and includes a lot of details this section will not provide. This documentation is meant for MediaTek EVK platforms but note that most of it still applies for us as specific to the processor (Genio family).

This section will provide shorten instructions specific to our platforms.

Note that the Android BSP includes the bootloaders and kernel modules as binary files to separate the OS build from it. Therefore the instructions are split in different sections depending on what you need to modify/rebuild.

Android

Below are the instructions to fetch the OS source code:

$ repo init -u https://github.com/boundarydevices/android-manifest.git -m ezurio-rita.xml -b mtk-android-14
$ repo sync --current-branch --no-tags --optimized-fetch

Then you need to ensure your machine matches Android’s build requirements:

On top of that, you’ll need to install an extraneous package needed for GPT creation:

$ pip3 install --user pyyaml

At this stage you will be able to build the images:

$ source build/envsetup.sh
$ tungsten700-ap2a-userdebug
$ make

For Tungsten510, simply replace the tungsten700 with tungsten510 in the instructions above.

Kernel

In case you need to modify the kernel modules, here is how to get its source code:

$ repo init -u https://github.com/boundarydevices/android-manifest.git -m ezurio-kernel-6.12.xml -b mtk-android-14
$ repo sync --current-branch --no-tags --optimized-fetch

The kernel uses bazel which is as simple as a single command (applies to both 510 & 700):

$ tools/bazel run --config=fast //common:mtk_dist
$ cp -v out/mtk/dist/* <android_path>/vendor/ezurio/prebuilts/kernel/6.12/mtk/

Bootloaders

In case you need to modify the bootloaders, here is how to get its source code:

$ repo init -u https://github.com/boundarydevices/android-manifest.git -b mtk-android-14 -m ezurio-bootloaders.xml
$ repo sync --current-branch --no-tags --optimized-fetch

Before being able to build it, you need to ensure to have a few required packages:

$ sudo apt install bc bison build-essential curl flex git libssl-dev python3 python3-pip meson wget -y
$ pip3 install pycryptodome pyelftools shyaml --user

Finally, here is the build instruction for Tungsten700:

$ ./build/build_all.sh --config=build/config/boards/tungsten700.yaml
$ ./build/build_all.sh --config=build/config/boards/tungsten700.yaml --mode=debug
$ cp -v out/tungsten700/{debug,release}/* <android_path>/vendor/ezurio/prebuilts/boards/tungsten700

For Tungsten510, simply replace the tungsten700 with tungsten510 in the instructions above.

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