1package { 2 default_applicable_licenses: ["Android-Apache-2.0"], 3} 4 5microdroid_shell_and_utilities = [ 6 "reboot", 7 "sh", 8 "strace", 9 "toolbox", 10 "toybox", 11] 12 13microdroid_rootdirs = [ 14 "dev", 15 "proc", 16 "sys", 17 18 "system", 19 "vendor", 20 "debug_ramdisk", 21 "mnt", 22 "data", 23 24 "apex", 25 "linkerconfig", 26 "second_stage_resources", 27] 28 29microdroid_symlinks = [ 30 { 31 target: "/sys/kernel/debug", 32 name: "d", 33 }, 34 { 35 target: "/system/etc", 36 name: "etc", 37 }, 38 { 39 target: "/system/bin", 40 name: "bin", 41 }, 42] 43 44android_system_image { 45 name: "microdroid", 46 use_avb: true, 47 avb_private_key: ":microdroid_sign_key", 48 avb_algorithm: "SHA256_RSA4096", 49 avb_hash_algorithm: "sha256", 50 partition_name: "system", 51 deps: [ 52 "init_second_stage", 53 "microdroid_build_prop", 54 "microdroid_init_debug_policy", 55 "microdroid_init_rc", 56 "microdroid_ueventd_rc", 57 "microdroid_launcher", 58 59 "libbinder", 60 "libbinder_ndk", 61 "libstdc++", 62 "secilc", 63 64 // "com.android.adbd" requires these, 65 "libadbd_auth", 66 "libadbd_fs", 67 68 // "com.android.art" requires 69 "heapprofd_client_api", 70 "libartpalette-system", 71 72 "apexd.microdroid", 73 "debuggerd", 74 "linker", 75 "cgroups.json", 76 "task_profiles.json", 77 "public.libraries.android.txt", 78 79 "microdroid_event-log-tags", 80 "microdroid_file_contexts", 81 "microdroid_manifest", 82 "microdroid_plat_sepolicy_and_mapping.sha256", 83 "microdroid_property_contexts", 84 "mke2fs.microdroid", 85 86 "libvm_payload", // used by payload to interact with microdroid manager 87 88 "prng_seeder_microdroid", 89 90 // Binaries required to capture traces in Microdroid. 91 "atrace", 92 "traced", 93 "traced_probes", 94 "perfetto", 95 ] + microdroid_shell_and_utilities, 96 multilib: { 97 common: { 98 deps: [ 99 // non-updatable & mandatory apexes 100 "com.android.runtime", 101 102 "microdroid_plat_sepolicy.cil", 103 "microdroid_plat_mapping_file", 104 "microdroid_crashdump_initrd", 105 ], 106 }, 107 lib64: { 108 deps: [ 109 "apkdmverity", 110 "authfs", 111 "authfs_service", 112 "encryptedstore", 113 "microdroid_kexec", 114 "microdroid_manager", 115 "zipfuse", 116 ], 117 }, 118 }, 119 arch: { 120 // b/273792258: These could be in multilib.lib64 except that 121 // microdroid_crashdump_kernel doesn't exist for riscv64 yet 122 arm64: { 123 deps: [ 124 "microdroid_crashdump_kernel", 125 ], 126 }, 127 x86_64: { 128 deps: [ 129 "microdroid_crashdump_kernel", 130 ], 131 }, 132 }, 133 linker_config_src: "linker.config.json", 134 base_dir: "system", 135 dirs: microdroid_rootdirs, 136 symlinks: microdroid_symlinks, 137 file_contexts: ":microdroid_file_contexts.gen", 138 // For deterministic output, use fake_timestamp, hard-coded uuid 139 fake_timestamp: "1611569676", 140 // python -c "import uuid; print(uuid.uuid5(uuid.NAMESPACE_URL, 'www.android.com/avf/microdroid/system'))" 141 uuid: "5fe079c6-f01a-52be-87d3-d415231a72ad", 142} 143 144prebuilt_etc { 145 name: "microdroid_init_rc", 146 filename: "init.rc", 147 src: "init.rc", 148 relative_install_path: "init/hw", 149 installable: false, // avoid collision with system partition's init.rc 150} 151 152prebuilt_etc { 153 name: "microdroid_ueventd_rc", 154 filename: "ueventd.rc", 155 src: "ueventd.rc", 156 installable: false, // avoid collision with system partition's ueventd.rc 157} 158 159prebuilt_root { 160 name: "microdroid_build_prop", 161 filename: "build.prop", 162 src: "build.prop", 163 arch: { 164 x86_64: { 165 src: ":microdroid_build_prop_gen_x86_64", 166 }, 167 arm64: { 168 src: ":microdroid_build_prop_gen_arm64", 169 }, 170 }, 171 installable: false, 172} 173 174genrule { 175 name: "microdroid_build_prop_gen_x86_64", 176 srcs: [ 177 "build.prop", 178 ":buildinfo.prop", 179 ], 180 out: ["build.prop.out"], 181 cmd: "(echo '# build properties from buildinfo.prop module' && " + 182 "grep ro\\.build\\.version\\.codename= $(location :buildinfo.prop) && " + 183 "grep ro\\.build\\.version\\.release= $(location :buildinfo.prop) && " + 184 "grep ro\\.build\\.version\\.sdk= $(location :buildinfo.prop) && " + 185 "grep ro\\.build\\.version\\.security_patch= $(location :buildinfo.prop) && " + 186 "grep ro\\.build\\.version\\.known_codenames= $(location :buildinfo.prop) && " + 187 "cat $(location build.prop) && " + 188 "echo ro.product.cpu.abilist=x86_64 && " + 189 "echo ro.product.cpu.abi=x86_64) > $(out)", 190} 191 192genrule { 193 name: "microdroid_build_prop_gen_arm64", 194 srcs: [ 195 "build.prop", 196 ":buildinfo.prop", 197 ], 198 out: ["build.prop.out"], 199 cmd: "(echo '# build properties from buildinfo.prop module' && " + 200 "grep ro\\.build\\.version\\.codename= $(location :buildinfo.prop) && " + 201 "grep ro\\.build\\.version\\.release= $(location :buildinfo.prop) && " + 202 "grep ro\\.build\\.version\\.sdk= $(location :buildinfo.prop) && " + 203 "grep ro\\.build\\.version\\.security_patch= $(location :buildinfo.prop) && " + 204 "grep ro\\.build\\.version\\.known_codenames= $(location :buildinfo.prop) && " + 205 "cat $(location build.prop) && " + 206 "echo ro.product.cpu.abilist=arm64-v8a && " + 207 "echo ro.product.cpu.abi=arm64-v8a) > $(out)", 208} 209 210android_filesystem { 211 name: "microdroid_vendor", 212 partition_name: "vendor", 213 use_avb: true, 214 deps: [ 215 "microdroid_fstab", 216 "microdroid_precompiled_sepolicy.plat_sepolicy_and_mapping.sha256", 217 "microdroid_vendor_manifest", 218 "microdroid_vendor_compatibility_matrix", 219 ], 220 multilib: { 221 common: { 222 deps: [ 223 "microdroid_vendor_sepolicy.cil", 224 "microdroid_plat_pub_versioned.cil", 225 "microdroid_plat_sepolicy_vers.txt", 226 "microdroid_precompiled_sepolicy", 227 ], 228 }, 229 }, 230 avb_private_key: ":microdroid_sign_key", 231 avb_algorithm: "SHA256_RSA4096", 232 avb_hash_algorithm: "sha256", 233 file_contexts: ":microdroid_vendor_file_contexts.gen", 234 // For deterministic output, use fake_timestamp, hard-coded uuid 235 fake_timestamp: "1611569676", 236 // python -c "import uuid; print(uuid.uuid5(uuid.NAMESPACE_URL, 'www.android.com/avf/microdroid/vendor'))" 237 uuid: "156d40d7-8d8e-5c99-8913-ec82de549a70", 238} 239 240logical_partition { 241 name: "microdroid_super", 242 sparse: true, 243 size: "auto", 244 default_group: [ 245 { 246 name: "system_a", 247 filesystem: ":microdroid", 248 }, 249 { 250 name: "vendor_a", 251 filesystem: ":microdroid_vendor", 252 }, 253 ], 254} 255 256android_filesystem { 257 name: "microdroid_ramdisk", 258 deps: [ 259 "init_first_stage", 260 ], 261 dirs: [ 262 "dev", 263 "proc", 264 "sys", 265 266 // TODO(jiyong): remove these 267 "mnt", 268 "debug_ramdisk", 269 "second_stage_resources", 270 ], 271 type: "compressed_cpio", 272} 273 274android_filesystem { 275 name: "microdroid_vendor_ramdisk", 276 deps: [ 277 "microdroid_fstab", 278 ], 279 base_dir: "first_stage_ramdisk", 280 type: "compressed_cpio", 281 symlinks: [ 282 { 283 target: "etc/fstab.microdroid", 284 name: "first_stage_ramdisk/fstab.microdroid", 285 }, 286 { 287 target: "first_stage_ramdisk/lib", 288 name: "lib", 289 }, 290 ], 291} 292 293genrule { 294 name: "microdroid_bootconfig_arm64_gen", 295 srcs: [ 296 "bootconfig.common", 297 "bootconfig.arm64", 298 ], 299 out: ["bootconfig"], 300 cmd: "cat $(in) > $(out)", 301} 302 303genrule { 304 name: "microdroid_bootconfig_x86_64_gen", 305 srcs: [ 306 "bootconfig.common", 307 "bootconfig.x86_64", 308 ], 309 out: ["bootconfig"], 310 cmd: "cat $(in) > $(out)", 311} 312 313prebuilt_etc { 314 name: "microdroid_fstab", 315 src: "fstab.microdroid", 316 filename: "fstab.microdroid", 317 installable: false, 318} 319 320// python -c "import hashlib; print(hashlib.sha256(b'bootloader').hexdigest())" 321bootloader_salt = "3b4a12881d11f33cff968a24d7c53723a8232cde9a8d91e29fdbd6a95ae6adf0" 322 323// Note that keys can be different for filesystem images even though we're using the same key 324// for microdroid. However, the key signing VBmeta should match with the pubkey embedded in 325// bootloader. 326filegroup { 327 name: "microdroid_sign_key", 328 srcs: [":avb_testkey_rsa4096"], 329} 330 331vbmeta { 332 name: "microdroid_vbmeta", 333 partition_name: "vbmeta", 334 private_key: ":microdroid_sign_key", 335 partitions: [ 336 "microdroid_vendor", 337 "microdroid", 338 ], 339} 340 341prebuilt_etc { 342 name: "microdroid.json", 343 src: "microdroid.json", 344} 345 346prebuilt_etc { 347 name: "microdroid_vendor_manifest", 348 src: "microdroid_vendor_manifest.xml", 349 filename: "manifest.xml", 350 relative_install_path: "vintf", 351 installable: false, 352} 353 354prebuilt_etc { 355 name: "microdroid_vendor_compatibility_matrix", 356 src: "microdroid_vendor_compatibility_matrix.xml", 357 filename: "compatibility_matrix.xml", 358 relative_install_path: "vintf", 359 installable: false, 360} 361 362prebuilt_etc { 363 name: "microdroid_manifest", 364 src: "microdroid_manifest.xml", 365 filename: "manifest.xml", 366 relative_install_path: "vintf", 367 installable: false, 368} 369 370prebuilt_etc { 371 name: "microdroid_event-log-tags", 372 src: "microdroid_event-log-tags", 373 filename: "event-log-tags", 374 installable: false, 375} 376 377filegroup { 378 name: "microdroid_bootconfig_debuggable_src", 379 srcs: ["bootconfig.debuggable"], 380} 381 382filegroup { 383 name: "microdroid_bootconfig_normal_src", 384 srcs: ["bootconfig.normal"], 385} 386 387// python -c "import hashlib; print(hashlib.sha256(b'initrd_normal').hexdigest())" 388initrd_normal_salt = "8041a07d54ac82290f6d90bac1fa8d7fdbc4db974d101d60faf294749d1ebaf8" 389 390avb_gen_vbmeta_image { 391 name: "microdroid_initrd_normal_hashdesc", 392 src: ":microdroid_initrd_normal", 393 partition_name: "initrd_normal", 394 salt: initrd_normal_salt, 395 enabled: false, 396 arch: { 397 // Microdroid kernel is only available in these architectures. 398 arm64: { 399 enabled: true, 400 }, 401 x86_64: { 402 enabled: true, 403 }, 404 }, 405} 406 407// python -c "import hashlib; print(hashlib.sha256(b'initrd_debug').hexdigest())" 408initrd_debug_salt = "8ab9dc9cb7e6456700ff6ef18c6b4c3acc24c5fa5381b829563f8d7a415d869a" 409 410avb_gen_vbmeta_image { 411 name: "microdroid_initrd_debug_hashdesc", 412 src: ":microdroid_initrd_debuggable", 413 partition_name: "initrd_debug", 414 salt: initrd_debug_salt, 415 enabled: false, 416 arch: { 417 // Microdroid kernel is only available in these architectures. 418 arm64: { 419 enabled: true, 420 }, 421 x86_64: { 422 enabled: true, 423 }, 424 }, 425} 426 427avb_add_hash_footer { 428 name: "microdroid_kernel_signed", 429 src: ":empty_file", 430 filename: "microdroid_kernel", 431 partition_name: "boot", 432 private_key: ":microdroid_sign_key", 433 salt: bootloader_salt, 434 enabled: false, 435 arch: { 436 arm64: { 437 src: ":microdroid_kernel_prebuilts-6.1-arm64", 438 enabled: true, 439 }, 440 x86_64: { 441 src: ":microdroid_kernel_prebuilts-6.1-x86_64", 442 enabled: true, 443 }, 444 }, 445 include_descriptors_from_images: [ 446 ":microdroid_initrd_normal_hashdesc", 447 ":microdroid_initrd_debug_hashdesc", 448 ], 449} 450 451prebuilt_etc { 452 name: "microdroid_kernel", 453 src: ":empty_file", 454 relative_install_path: "fs", 455 arch: { 456 arm64: { 457 src: ":microdroid_kernel_signed", 458 }, 459 x86_64: { 460 src: ":microdroid_kernel_signed", 461 }, 462 }, 463} 464