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](../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
26
27See [Configuration Data](../pvmfw/README.md#configuration-data) for more detail.
28
29## Android
30
31ABL is responsible for setting the following bootconfigs describing the status and capabilities of
32the hypervisor.
33
34* `androidboot.hypervisor.version`: free-form description of the hypervisor
35* `androidboot.hypervisor.vm.supported`: whether traditional VMs (i.e.  non-protected VMS) are
36  supported or not
37* `androidboot.hypervisor.protected_vm.supported`: whether protected VMs are supported or not
38
39Thee bootconfigs are converted into system properties by the init process.
40
41See
42[HypervisorProperties.prop](https://android.googlesource.com/platform/system/libsysprop/+/refs/heads/main/srcs/android/sysprop/HypervisorProperties.sysprop)
43for more detail.
44
45
46
47
48
49
50
51
52
53
54