Move uboot_env.img to a new composite disk

u-boot is updated to look for the environment partition in the second
disk.

Bug: 183006588
Test: atest MicrodroidHostTestCases
Change-Id: I2e716bb85d4762f700ea7479c68ffbcfd150857c
diff --git a/apex/Android.bp b/apex/Android.bp
index bc9e084..41d2f62 100644
--- a/apex/Android.bp
+++ b/apex/Android.bp
@@ -51,6 +51,7 @@
     prebuilts: [
         "com.android.virt.init.rc",
         "microdroid_cdisk.json",
+        "microdroid_cdisk_env.json",
         "microdroid_uboot_env",
         "microdroid_bootloader",
     ],
diff --git a/microdroid/Android.bp b/microdroid/Android.bp
index 8456591..150f119 100644
--- a/microdroid/Android.bp
+++ b/microdroid/Android.bp
@@ -338,3 +338,8 @@
     name: "microdroid_cdisk.json",
     src: "microdroid_cdisk.json",
 }
+
+prebuilt_etc {
+    name: "microdroid_cdisk_env.json",
+    src: "microdroid_cdisk_env.json",
+}
diff --git a/microdroid/README.md b/microdroid/README.md
index db9ed1a..a4bfb6e 100644
--- a/microdroid/README.md
+++ b/microdroid/README.md
@@ -35,7 +35,8 @@
 $ adb shell 'cp /apex/com.android.virt/etc/uboot_env.img /data/local/tmp'
 $ adb shell 'dd if=/dev/zero of=/data/local/tmp/misc.img bs=4k count=256'
 $ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/mk_cdisk /apex/com.android.virt/etc/microdroid_cdisk.json os_composite.img'
-$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --cid=5 --disable-sandbox --bios=bootloader --serial=type=stdout --disk=os_composite.img'
+$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/mk_cdisk /apex/com.android.virt/etc/microdroid_cdisk_env.json env_composite.img'
+$ adb shell 'cd /data/local/tmp; /apex/com.android.virt/bin/crosvm run --cid=5 --disable-sandbox --bios=bootloader --serial=type=stdout --disk=os_composite.img --disk=env_composite.img'
 ```
 
 The CID in `--cid` parameter can be anything greater than 2 (`VMADDR_CID_HOST`).
diff --git a/microdroid/microdroid_cdisk.json b/microdroid/microdroid_cdisk.json
index 88b7183..591e83b 100644
--- a/microdroid/microdroid_cdisk.json
+++ b/microdroid/microdroid_cdisk.json
@@ -1,11 +1,6 @@
 {
   "partitions": [
     {
-      "label": "uboot_env",
-      "path": "uboot_env.img",
-      "read_only": true
-    },
-    {
       "label": "misc",
       "path": "misc.img",
       "read_only": true
diff --git a/microdroid/microdroid_cdisk_env.json b/microdroid/microdroid_cdisk_env.json
new file mode 100644
index 0000000..f43c4b1
--- /dev/null
+++ b/microdroid/microdroid_cdisk_env.json
@@ -0,0 +1,9 @@
+{
+  "partitions": [
+    {
+      "label": "uboot_env",
+      "path": "uboot_env.img",
+      "read_only": true
+    }
+  ]
+}
diff --git a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
index 4acdf4b..44a2952 100644
--- a/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
+++ b/tests/hostside/java/android/virt/test/MicrodroidTestCase.java
@@ -65,16 +65,23 @@
                         TEST_ROOT, TEST_ROOT, VIRT_APEX, VIRT_APEX, VIRT_APEX);
         getDevice().executeShellCommand(prepareImagesCmd);
 
-        // Create os_composite.img
+        // Create os_composite.img and env_composite.img
         String makeOsCompositeCmd =
                 String.format(
                         "cd %s; %sbin/mk_cdisk %setc/microdroid_cdisk.json os_composite.img",
                         TEST_ROOT, VIRT_APEX, VIRT_APEX);
         getDevice().executeShellCommand(makeOsCompositeCmd);
+        String makeEnvCompositeCmd =
+                String.format(
+                        "cd %s; %sbin/mk_cdisk %setc/microdroid_cdisk_env.json env_composite.img",
+                        TEST_ROOT, VIRT_APEX, VIRT_APEX);
+        getDevice().executeShellCommand(makeEnvCompositeCmd);
 
-        // Make sure that os_composite.img is created
+        // Make sure that the composite images are created
         final String compositeImg = TEST_ROOT + "/os_composite.img";
-        CommandResult result = getDevice().executeShellV2Command("du -b " + compositeImg);
+        final String envCompositeImg = TEST_ROOT + "/env_composite.img";
+        CommandResult result =
+                getDevice().executeShellV2Command("du -b " + compositeImg + " " + envCompositeImg);
         assertThat(result.getExitCode(), is(0));
         assertThat(result.getStdout(), is(not("")));
 
@@ -83,7 +90,8 @@
         String runMicrodroidCmd =
                 String.format(
                         "cd %s; %sbin/crosvm run --cid=%d --disable-sandbox --bios=bootloader"
-                                + " --serial=type=syslog --disk=os_composite.img",
+                                + " --serial=type=syslog --disk=os_composite.img"
+                                + " --disk=env_composite.img",
                         TEST_ROOT, VIRT_APEX, TEST_VM_CID);
         executor.execute(
                 () -> {