September 10, 2018

Android Oreo 8.0.0 release for i.MX6 boards

We are glad to deliver the latest Android Oreo 8.0.0 GA release for most our i.MX6 platforms:

Android Oreo


For the impatient

You can download the Android Oreo images from here:

These archives include all the files to be flashed using fastboot.

First you need to enter fastboot mode which can be done from U-Boot prompt, enter the following command:

=> fastboot 0

Note that you’ll need U-Boot v2017.07 or above for this to work and the OS to boot.

Once the platform is in fastboot mode, you simply need to call the flashing script:

~/$ unzip o800*.zip -d o800-release
~/$ cd o800-release
~/o800-release$ ./device/boundary/scripts/flash_fastboot.sh

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

C:\o800-release> device\boundary\scripts\flash_fastboot.bat nitrogen6x

Some might wonder why we deliver this release as fastboot images, here are some of the reasons:

  • Fastboot is much faster than flashing regular sdcard images
    • 2 minutes vs. 15+ minutes in most cases
  • It takes the same amount of time to flash a storage, no matter its size
    • Full sdcard images would take forever when the storage is > 4GB
  • That way we don’t need to maintain many scripts/indexes since it uses GPT part names

What’s new?

This section will only describe the changes brought either by the OS update itself or modified/added features.

Android Oreo OS updates

Google provides a list of notable changes for developers:

But the main change comes in the overall architecture since Treble, more in next section.

Treble or not Treble?

Oreo brought a new architecture called Treble in order to improve BSP porting from one version of AOSP to another.

While this release isn’t entirely compliant with Treble, it did improve a lot:

  • All vendor-specific components are now properly placed under the /vendor partition
    • Platform firmwares (VPU, WiFi, BT)
    • HAL libraries (camera, lights, sensors, etc…)
    • Proprietary libraries (GPU, VPU, codecs)
    • Platform configurations (features, permissions)
    • 3rd -party apps (FslOTA, Ethernet)
  • As few changes to AOSP core framework as possible
    • No more modification to init/recovery dynamically mount partitions
      • Using GPT partition names instead
    • No more addition of filesystems support

The goal is to be able, in the future, to just flash a new OS version system.img which will work nicely with the previous vendor.img.

So you might ask:

  • Can’t we use a newer AOSP version already? Why is this an Oreo 8.0 release and not Pie 9.0?
    • Well as said above, this BSP isn’t fully Treble-compliant yet
    • Some of the NXP changes are still required inside the core components of the AOSP
    • But we’ll hopefully get there really soon, just give it a couple of release for all the engineers to know their way around Treble

If you’re interested about learning more about Treble, we recommend the following links:

Linux Kernel 4.9.x

This Android Oreo release is based on a 4.9.x kernel. It therefore benefits from all our latest drivers/fixes as well as newest Vivante graphics libraries (v6.2.2).

Also, as some people already asked about it, this kernel fixes the SPECTRE vulnerabilities found on the Cortex-A9.

Goodbye 6x_bootscript!

As mentioned in our 2017.07 U-Boot release (more than a year ago), 6x_bootscript (formerly 6q_bootscript) was introduced back in 2012 when there was no standard for booting an OS.

Since then, U-Boot included such standard:

The default bootscript name is now boot.scr for any OS which makes much more sense that our 6x_bootscript that wasn’t only for i.MX6x any more.

So what does it mean?

  1. The boot/ partition now contains a boot.scr file instead of 6x_bootscript
  2. You’ll need U-Boot v2017.07 or above for the OS to boot

Boundary Devices additions

Just like our previous releases, this one includes unique features that only Boundary Devices provides:

  • Optimized Camera HALv3 version
    • With continuous Auto-Focus support!
  • Support for new 802.11b/g/n/ac + BT4.1 Silex Module
  • Display rotation setting from U-Boot
=> setenv hwrotation 270
=> saveenv
=> reset
  • Rooted device (su)
    • A very simple su application is present, allowing only root / system / shell to use it by default
    • If you want any app to be able to use (at your own risks) add the following to your BoardConfig.mk
BOARD_SU_ALLOW_ALL := true

Source code access

For the newcomers, please make sure to read our “Android Getting Started Guide” since it contains all the information you need to download, build and flash an Android image.

For those already familiar with our releases, here is a condensed version to get the Android Oreo source code:

~/$ mkdir myandroid
~/$ cd myandroid
~/myandroid$ repo init -u git://github.com/boundarydevices/android-manifest.git \
       -b boundary-imx-o8.0.0_1.0.0-ga
~/myandroid$ repo sync
~/myandroid$ source build/envsetup.sh
~/myandroid$ lunch
... choose nitrogen6x / nit6xlite / nitrogen6sx from the list of boards 
~/myandroid$ make 2>&1 | tee build.out

 

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