Skip to main content

Android 9.0 - i.MX6

IoTGateway/BSP/Android

Android BSP Version

Android 9.0.0_r35

Introduction

This document describes how to work with the RISC and ELAA Android 9.0.0 Board Support Package (BSP) release. The BSP includes bootloaders; the Android Linux kernel and root file system; and tools and documentation to ease the development, deployment, and execution of Android-based systems.

Setup Ubuntu Host Computer

Required Equipment and Software

  • Ubuntu 16.04 LTS 64bit for Android build host OS
  • 130GB free disk space for build image

Install Ubuntu

IMPORTANT! You must be able to log in as root or use sudo to have root permissions during the installation.

Go to Ubuntu releases and download 64-bit PC (AMD64) desktop image for the installation.

Docker Environment Setup

Install Docker and Use Docker Environment

Please use Docker environment to compile Android 9.0.0:

  • Android 9.0.0 Docker
  • Image Repository: advrisc/u16.04-imx6abv6
  • Image Tag: latest

Pull Docker Image from Docker Hub

docker pull advrisc/u16.04-imx6abv6
docker run --name imx6ABV6 -it advrisc/u16.04-imx6abv6 /bin/bash

Docker Container Example

Step 1: Run docker container (example)

docker run -it --name android_p9 -v /home/bsp/myandroid:/home/adv/BSP:rw advrisc/u16.04-imx6abv6 /bin/bash

Step 2: In container, change the user (example)

adv@7cc0fa834366:~$ sudo chown adv:adv -R BSP

Getting Android Source Code

  • Android: 9.0.0_r35
  • Kernel: Yocto-2.5
  • U-Boot: Yocto-2.5

Step 1: Pull Android Source Tree

First, configure git with your credentials:

git config --global user.name "Your Name"
git config --global user.email you@example.com

Then pull down the Android source tree:

mkdir myandroid
mkdir bin
cd myandroid/

curl https://storage.googleapis.com/git-repo-downloads/repo > ../bin/repo
chmod a+x ../bin/repo

../bin/repo init -u https://github.com/ADVANTECH-Corp/android-manifest.git -b p9.0.0_2.2.0-ga
../bin/repo sync

Step 2: Apply Patches to Android P9.0.0

Apply U-boot and kernel patches:

cd ~/myandroid/vendor/nxp-opensource/uboot-imx/
patch -p1 < ../../../patches_android_9.0.0_r35/9001-Uboot_Yocto_4.14.98_2.0.0-to-android-9.0.0_r35.patch

cd ~/myandroid/vendor/nxp-opensource/kernel_imx/
patch -p1 < ../../../patches_android_9.0.0_r35/9001-Linux_Yocto_4.14.98_2.0.0-to-android-9.0.0_r35.patch

cd myandroid

Supported Products

The following products are supported with their corresponding product names:

ProductProduct Name
RSB-4411A1rsb_4411_a1
ROM-5720rom5720_a1
ROM-7720rom7720_a1
ROM-5721A1rom5721_a1

Build Instructions

Environment Setup

Set the $JAVA_HOME environment variable:

export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64/

Set up the environment for building (configures the current terminal):

source build/envsetup.sh

Execute the Android lunch command. For example, if your device is RSB4411:

lunch $PRODUCT-userdebug

Where $PRODUCT is one of the supported product names listed above.

Build Components

Build Boot Loader

make bootloader -j8

The files u-boot_crc.bin & u-boot_crc.bin.crc will be located in directory: ./out/target/product/product_name

Build Boot Image

make bootimage -j8

Build DTBO Image (Kernel Device Tree)

make dtboimage -j8

Build System Image

make -j8

Burning Images

SD Card Boot

Go to Built Image File Directory

For daily build:

cd ~/image/

For local build:

cd ~/out/target/product/PRODUCT_NAME/

Flash Commands by Product

For RSB-4411:

sudo ./fsl-sdcard-partition.sh -f imx6q /dev/sdX

(Where X is the SD card device drive)

For ROM-5720:

sudo ./fsl-sdcard-partition.sh -f imx8mq /dev/sdX

For ROM-5721:

sudo ./fsl-sdcard-partition.sh -f imx8mm /dev/sdX

For ROM-7720:

sudo ./fsl-sdcard-partition.sh -f imx8qm /dev/sdX
# Or for 7GB SD card:
sudo ./fsl-sdcard-partition.sh -f imx8qm -c 7 /dev/sdX

Flash Advantech Bootloader (i.MX6 Only)

For daily build:

sudo dd if=u-boot_crc.bin.crc of=/dev/sdX bs=512 seek=2 conv=fsync
sudo dd if=u-boot_crc.bin of=/dev/sdX bs=512 seek=3 conv=fsync

For local build:

sudo dd if=obj/UBOOT_OBJ/u-boot_crc.bin.crc of=/dev/sdX bs=512 seek=2 conv=fsync
sudo dd if=obj/UBOOT_OBJ/u-boot_crc.bin of=/dev/sdX bs=512 seek=3 conv=fsync

eMMC Boot

For ROM-5720

From Build Machine:

  1. Go to ~/out/target/product/rom5720_a1
  2. Copy uuu to this directory

From Image Package:

  • For the image package, unzip the image files in Ubuntu system
  • In Image package, you will find the uuu_imx_android_flash.sh

On Carrier Board:

  1. Adjust boot jumper to serial download mode (4 on only)
  2. Connect Ubuntu PC and DUT with micro-USB cable
  3. Power on the DUT
  4. Verify connection with lsusb command:
    Bus 001 Device 104: ID 1fc9:012b NXP Semiconductors
  5. Run burning command:
    sudo ./uuu_imx_android_flash.sh -f imx8mq -a -e

For ROM-5721

  1. Go to ~/out/target/product/rom5721_a1
  2. Copy uuu to this directory
  3. Adjust boot jumper to serial download mode (4 on only)
  4. Connect PC and DUT with micro-USB cable
  5. Power on the DUT
  6. Verify connection with lsusb:
    Bus 001 Device 066: ID 1fc9:0134 NXP Semiconductors
  7. Run burning command:
    sudo ./uuu_imx_android_flash.sh -f imx8mm -a -e -c 7

For ROM-7720

  1. Go to ~/out/target/product/rom7720_a1
  2. Copy uuu to this directory
  3. Adjust boot jumper to serial download mode (3 on only)
  4. Connect PC and DUT with micro-USB cable
  5. Power on the DUT
  6. Verify connection with lsusb:
    Bus 001 Device 104: ID 1fc9:012b NXP Semiconductors
  7. Run burning command:
    sudo ./uuu_imx_android_flash.sh -f imx8qm -a -c 7
  8. Power off the DUT
  9. Adjust boot jumper to eMMC boot mode (4 on only)
  10. Power on the DUT

Display Configuration (RSB-4411 Only)

HDMI Display

setenv bootargs console=ttymxc0,115200 androidboot.console=ttymxc0 consoleblank=0 vmalloc=128M init=/init video=mxcfb0:dev=hdmi,1920x1080M@60,bpp=32 video=mxcfb1:off video=mxcfb2:off video=mxcfb3:off androidboot.processors=freescale cma=448M

Dual Display (VGA+HDMI)

Note: If kernel parameter is too long, the DUT may stop at init step during boot up. Please remove adv_boot parameter before configuring dual display.

setenv bootargs console=ttymxc0,115200 androidboot.console=ttymxc0 consoleblank=0 vmalloc=128M init=/init video=mxcfb0:dev=lcd,fbpix=RGB32,bpp=32 video=mxcfb1:dev=hdmi,1920x1080M@60,bpp=32 video=mxcfb2:off video=mxcfb3:off androidboot.processors=freescale cma=320M galcore.contiguousSize=33554432 loop.max_part=7

Known Issues

  1. Bootargs not defined: The bootargs in the kernel parameter is not defined. Please enter the following text in the bootloader, otherwise the device won't boot successfully:

    setenv bootargs console=ttymxc0,115200 androidboot.console=ttymxc0 consoleblank=0 vmalloc=128M init=/init androidboot.processors=freescale cma=448M galcore.contiguousSize=33554432 loop.max_part=7
  2. Input device requirement: Make sure there is at least one input device plugged into the DUT. The input service will always monitor the /dev/input node.

Additional Resources

Troubleshooting

  1. Build failures: Ensure you have sufficient disk space (130GB+)
  2. Docker issues: Verify Docker installation and permissions
  3. USB connection issues: Check lsusb output for proper device recognition
  4. Boot issues: Verify bootargs are properly set