1# Android Bootloader (ABL)
2
3[ABL](https://source.android.com/docs/core/architecture/bootloader) is not a component of AVF, but
4it plays a crucial role in loading the necessary AVF components and initializing them in a correct
5way. This doc explains the responsibilities of ABL from the perspective of AVF.
6
7## pVM firmware (pvmfw)
8
9ABL is responsible for the followings:
10
11* locating pvmfw binary from the pvmfw partition,
12* verifying it as part of the [verified
13  boot](https://source.android.com/docs/security/features/verifiedboot) process,
14* loading it into memory, and
15* describing the region where pvmfw is loaded using DT and passing it to hypervisor.
16
17See [ABL Support](../guest/pvmfw/README.md#android-bootloader-abl_support) for more detail.
18
19ABL is also responsible for constructing the pvmfw configuration data. The data consists of the
20following info:
21
22* DICE chain (also known as BCC Handover)
23* DTBO describing [debug policy](debug/README.md#debug-policy) (if available)
24* DTBO describing [assignable devices](device_assignment.md) (if available)
25* Reference DT carrying extra information that needs to be passed to the guest VM, e.g.:
26    * Hashtree digest of the
27      [microdroid-vendor.img](microdroid_vendor_modules.md#changes-in-abl).
28
29See [Configuration Data](../guest/pvmfw/README.md#configuration-data) for more detail.
30
31## Android
32
33ABL is responsible for setting the following bootconfigs describing the status and capabilities of
34the hypervisor.
35
36* `androidboot.hypervisor.version`: free-form description of the hypervisor
37* `androidboot.hypervisor.vm.supported`: whether traditional VMs (i.e.  non-protected VMS) are
38  supported or not
39* `androidboot.hypervisor.protected_vm.supported`: whether protected VMs are supported or not
40
41Thee bootconfigs are converted into system properties by the init process.
42
43See
44[HypervisorProperties.prop](https://android.googlesource.com/platform/system/libsysprop/+/refs/heads/main/srcs/android/sysprop/HypervisorProperties.sysprop)
45for more detail.
46
47
48
49
50
51
52
53
54
55
56