Introduction
This document outlines the steps of setting up and running Android Automotive images on Linaro’s Trusted Reference Stack (TRS) using prebuilt images. When completed, you will be able to boot the Android Automotive OS (AAOS) image in a DomU (aka VM) running on top of the Xen Hypervisor using TRS in the Dom0. The AAOS image will utilize the AVA platform's frame buffer (unaccelerated) and use VirtIO serial device to enable keyboard and mouse in order to interact with OS.
If interested in building from source please refer to the following documents [1][2] for details.
Prerequisites
You will need the following to run this demo
ADLink AVA Platform
Display connected to the VGA interface
Enough disk space
x86 Linux desktop (Tested on Ubuntu 22.04.3 LTS and Debian GNU/Linux 12 (bookworm))
Prebuilt images
Prebuilt images can be downlaoded:
Flash the TRS image
TRS image can be flashed on either an NVME or a USB stick. The below script flash_trs.sh
is for flashing TRS wic image onto a block device, the block device can be either an NVMe or USB stick, it also extends the root file system partition to the end of the device to provide sufficient disk space for storing the Android Automotive OS image.
#!/bin/bash DEV=$1 sudo parted ${DEV} print echo "Please confirm if the device is right?" while : ; do read -n 1 k <&1 if [[ $k = y ]] ; then printf "\n" break else printf "\nExit\n" exit 0 fi done echo "Copy TRS image to the device ${DEV}" sudo dd bs=4M if=./trs-image-trs-qemuarm64.wic of=$DEV status=progress && sync sudo growpart $DEV 2 if [[ $DEV == *"nvme"* ]]; then ## Flash NVMe block device sudo e2fsck -f "${DEV}p2" sudo resize2fs "${DEV}p2" else ## Flash USB block device sudo e2fsck -f "${DEV}2" sudo resize2fs "${DEV}2" fi sudo parted ${DEV} print
By following below steps, you can download the prebuilt TRS wic image then flash it to NVMe or USB stick.
$ wget https://people.linaro.org/~leo.yan/arm_blueprint/aaos_on_xen/trs-image-trs-qemuarm64.wic $ sh flash_trs.sh /dev/nvmeXn1 # for flashing TRS on NVMe block device $ sh flash_trs.sh /dev/sdX # for flashing TRS on USB stick
Note 1: The shell script requires the e2fsck
and resize2fs
utilities to be at least version 1.47.0 or newer. if not available, please download the e2fsprogs
source and build it from source.
Run Android Automotive in a Xen virtual machine
Once TRS system booted up, you need to download Android automotive image (cuttlefish.tgz
) image and uncompress it into the folder (/home/leoy/android-cf-mainline/cf
), this is because the overlay images contains the absolute path so we must uncompress the Cuttlefish image into an absolute path. The commands are:
# wget https://people.linaro.org/~leo.yan/arm_blueprint/aaos_on_xen/cuttlefish.tgz # wget https://people.linaro.org/~leo.yan/arm_blueprint/aaos_on_xen/aaos_vm.cfg # wget https://people.linaro.org/~leo.yan/arm_blueprint/aaos_on_xen/u-boot.bin # mkdir -p /home/leoy/android-cf-mainline/cf/ # tar zxvf cuttlefish.tgz -C /home/leoy/android-cf-mainline/cf/
Launch Xfce4 windows manager:
# startxfce4 &
Run AAOS in a Xen virtual machine:
# export DISPLAY=:0 # xl -vvv create aaos_vm.cfg -c
Note, the xen configuration file aaos_vm.cfg
is updated to refelect the latest Android images:
# Copyright (c) 2022, Arm Limited. # # SPDX-License-Identifier: MIT name = "aaos-vm" memory = 6144 vcpus = 4 extra = " earlyprintk=xenboot console=hvc0 rw androidboot.console=hvc0 androidboot.serialconsole=1" root = "/dev/xvda2" kernel = "/home/root/u-boot.bin" disk = ['format=qcow2, vdev=xvda, access=rw, target=/home/leoy/android-cf-mainline/cf/cuttlefish/instances/cvd-1/overlay.img', 'format=qcow2, vdev=xvdb, access=rw, target=/home/leoy/android-cf-mainline/cf/cuttlefish/instances/cvd-1/persistent_composite_overlay.img', 'format=qcow2, vdev=xvdc, access=rw, target=/home/leoy/android-cf-mainline/cf/cuttlefish/instances/cvd-1/sdcard_overlay.img'] vif = ['mac=00:16:3E:74:34:32', 'mac=00:16:3e:5f:48:e4', 'mac=00:16:3E:74:34:32,script=vif-bridge,bridge=xenbr0'] virtio_qemu_domid = 0
Note, the prebuilt TRS image provided uses an outdated Xen repository, resulting in the lack of support for the option virtio = ['transport=pci, backend_type=qemu, bdf=02:00.0']
. If you are building a TRS image using the Xen and AOSP maintenance repositories located in the directory https://gitlab.com/Linaro/blueprints/automotive/xen-aosp/, it is necessary to include the virtio configuration to enable the virtio-pci bus.
We have a recorded video which has been uploaded to the server [3]. You can refer to it for how to lanch AAOS on Xen virtual machine.
[1] Xen: maintenance Xen and QEMU repos for TRS
[2] Xen: porting Android Cuttlefish on Xen Virtual Machine
[3] https://people.linaro.org/~leo.yan/arm_blueprint/aaos_on_xen/AAOS_On_Xen_Demo.MOV