Add A/B implementation.
This CL add routines for working with A/B metadata, including A/B
selection and managing rollback indexes.
A/B metadata is stored in the 'misc' partition in the |slot_suffix|
field using a format private to libavb - see bootable/recovery/bootloader.h
for more details. A new set_ab_metadata sub-command has been added to
avbtool for initializing A/B metadata at build time.
A/B metadata integrity is provided by a simple magic marker and a CRC-32
checksum. If invalid A/B metadata is detected, the behavior is to reset
the A/B metadata to a known state where both slots are given seven boot
tries.
An implementation of the boot_control HAL using AVB-specific A/B
metadata is also provided.
Also factored out the test-side AvbOps into a FakeAvbOps class and put
it in its own file.
Saw a couple of references to things like "Brillo Boot Image" and the
like. Fixed these up.
This CL is based on work done by Kevin Chavez - see b/29072323 - during
his internship at Google.
BUG=31264229
TEST=New unit tests + all unit tests pass.
TEST=Manual testing of boot_control HAL using the bootctl command.
Change-Id: I594ea4173a051ecb72636058440372ff1ca5855b
21 files changed