• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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