android_packages_modules_Vi.../microdroid
Jiyong Park 4d43cbb0c6 Add microdroid_vendor
microdroid_vendor implements the vendor.img of microdroid. In theory,
microdroid doesn't need a vendor partition as it by definition isn't
specific to any SoC. However, init demands some files from the vendor
partition during the boot process. Until we find a way to make the
dependencies optional, let's have the vendor partition. Fortunately, it
is very small. It currently has a few number of sepolicy files only.

Bug: 180986662
Test: run microdroid following README.md
init enters into the second stage, sepolicy files are compiled, init
tries to start the servicemanager (which fails)

Change-Id: I82a66a00a8680ef1070ae7313d8e326f3ebc3112
2021-03-02 11:48:39 +09:00
..
Android.bp Add microdroid_vendor 2021-03-02 11:48:39 +09:00
README.md Add some documentation about microdroid 2021-02-26 18:55:27 +09:00
dummy_dtb.img Build vendor_boot image for microdroid 2021-02-04 23:39:09 +09:00
fstab Add microdroid_vendor 2021-03-02 11:48:39 +09:00
init.rc Add linkerconfig to microdroid 2021-02-25 18:26:14 +09:00
microdroid.pem
microdroid_file_contexts Add microdroid_file_contexts to build image 2021-02-03 14:50:28 +09:00
microdroid_vendor_file_contexts Add microdroid_vendor 2021-03-02 11:48:39 +09:00
plat_sepolicy_vers.txt Add microdroid_vendor 2021-03-02 11:48:39 +09:00
uboot-env.txt Add fstab for microdroid & add more kernel commandline params 2021-02-24 15:30:12 +09:00

README.md

Microdroid

Microdroid is a (very) lightweight version of Android that is intended to run on on-device virtual machines. It is built from the same source code as the regular Android, but it is much smaller; no system server, no HALs, no GUI, etc. It is intended to host headless & native workloads only.

Building

You need a VIM3L board. Instructions for building Android for the target, and flashing the image can be found here.

Then you build microdroid. Note that the instruction below is very likely to change in the future, because this is in active development. For example, the microdroid_* modules will eventually be included in the com.android.virt APEX, which is already in the yukawa (VIM3L) target.

$ source build/envsetup.sh
$ choosecombo 1 aosp_arm64 userdebug // actually, any arm64-based target is ok
$ m microdroid_super
$ m microdroid_boot-5.10
$ m microdroid_vendor_boot-5.10
$ m microdroid_uboot_env

Installing

Push the built files to the device. In addition to that, some other files have to be manually created, for now. In the future, you won't need these.

$ adb push device/google/cuttlefish_prebuilts/bootloader/crosvm_aarch64/u-boot.bin /data/local/tmp/bootloader
$ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_super.img /data/local/tmp/super.img
$ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_boot-5.10.img /data/local/tmp/boot.img
$ adb push $ANDROID_PRODUCT_OUT/system/etc/microdroid_vendor_boot-5.10.img /data/local/tmp/vendor_boot.img
$ adb shell mkdir /data/local/tmp/cuttlefish_runtime.1/
$ adb push $ANDROID_PRODUCT_OUT/system/etc/uboot_env.img /data/local/tmp/cuttlefish_runtime.1/
$ adb shell mkdir -p /data/local/tmp/etc/cvd_config
$ adb shell 'echo "{}" > /data/local/tmp/etc/cvd_config/cvd_config_phone.json'
$ dd if=/dev/zero of=empty.img bs=4k count=600
$ mkfs.ext4 -F empty.img
$ adb push empty.img /data/local/tmp/userdata.img
$ adb push empty.img /data/local/tmp/vbmeta.img
$ adb push empty.img /data/local/tmp/vbmeta_system.img
$ adb push empty.img /data/local/tmp/cache.img

Running

Create the composite image using assemble_cvd and run it via crosvm. In the future, this shall be done via virtmanager.

$ adb shell 'HOME=/data/local/tmp; /apex/com.android.virt/bin/assemble_cvd < /dev/null'
$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --disable-sandbox --bios=bootloader --serial=type=stdout --disk=cuttlefish_runtime/composite.img'

At this moment, this doesn't boot to the shell, but to the second-stage init.