July 16, 2018

Android Oreo 8.1.0 release for Nitrogen8M

We are glad to deliver the latest Android Oreo 8.1 GA release for most our i.MX8MQ Nitrogen8M platform.

Android Nougat


For the impatient

You can download the Android Oreo images from here:

This archive includes all the files to be flashed using fastboot.

First you need to enter fastboot mode which can be done in two different ways:

  1. Press the “FASTBOOT” button on the board while powering it up, U-Boot should automatically start fastboot
  2. From U-Boot prompt, enter the following command:
=> fastboot 0

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

~/$ unzip o810-nitrogen8m-20180718.zip -d o810-nitrogen8m-20180718
~/$ cd o810-nitrogen8m-20180718
~/o810-nitrogen8m-20180718$ ./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:\o810-nitrogen8m-20180718> device\boundary\scripts\flash_fastboot.bat nitrogen8m

For those wishing to see how this release looks like on the platform, please make sure to read this blog post:

For those interested in performances of the i.MX8M, please make sure to read this blog post:

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

The main UI difference you might notice, compare to our previous releases for i.MX6, is the change of launcher app, since we switched from Launcher2 to Launcher3:

launcher3Google also provides a list of notable changes for developers:

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.4p1.2).

Just like our other 4.9.x branches, we will include latest security updates to it.

As of this writing, the kernel already includes fixes up to v4.9.111 although NXP only released the v4.9.78 version.

Boundary Devices additions

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

  • Optimized Camera HALv3 version
    • This releases offers continuous autofocus support for our cameras
  • 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

But the most notable change relies in the source code and its architecture. Indeed 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
      • Only sdcardfs should be used now

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.

We hope you’ll enjoy that new partitioning and that you’ll find it easier to navigate through.

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.1.0_1.3.0_8m-ga
~/myandroid$ repo sync
~/myandroid$ source build/envsetup.sh
~/myandroid$ lunch nitrogen8m-eng
~/myandroid$ make 2>&1 | tee build.out

 

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