Android AVB 的一些配置说明
AVB使能:
# Enable AVB 2.0 BOARD_AVB_ENABLE := true
vbmeta RSA key相关配置:
BOARD_AVB_ALGORITHM := SHA256_RSA4096
BOARD_AVB_KEY_PATH := xxx/keytools/veritykey_rsa4096.pem
关闭dm-verity功能:
BOARD_AVB_MAKE_VBMETA_IMAGE_ARGS += --set_hashtree_disabled_flag
vbmeta RSA key生成及配置常用做法:
生成RSA私钥:
$ openssl genrsa -out testrsa.pem -f4 4096 Generating RSA private key, 4096 bit long modulus ........................................................................................++ .....++ e is 65537 (0x10001) //生成的key如下 $ ls testrsa.pem
抽取公钥:
$ python ~/code/android/external/avb/avbtool.py extract_public_key --key testrsa.pem --output vbmeta_pub_key.bin
$ ls
testrsa.pem vbmeta_pub_key.bin
通过bin2header将公钥bin转换为头文件:
$ ./../keytools/bin2header vbmeta_pub_key.bin OEMPubKey >> OEMPubKey.h $ ls OEMPubKey.h testrsa.pem vbmeta_pub_key.bin //OEMPubKey.h中就是公钥数组: char OEMPubKey[1032] = {};
设备锁定状态
设备处于locked状态时,若在uboot中avb校验通过,则boot state为green,否则为red。
设备处于unlocked状态时,boot state为orange。
可以通过系统属性查看device state和boot state:
unlocked状态下:
$ getprop |grep state
[ro.boot.vbmeta.device_state]: [unlocked]
[ro.boot.verifiedbootstate]: [orange]
locked状态下:
$ getprop |grep state
[ro.boot.vbmeta.device_state]: [locked]
[ro.boot.verifiedbootstate]: [green]
fastboot下配置及查询device state:
D:\>fastboot getvar unlocked unlocked: yes Finished. Total time: 0.000s D:\>fastboot flashing lock OKAY [ 0.016s] Finished. Total time: 0.016s
防回滚配置
主要是vbmeta和vbmeta_system分区的rollback index和rollback index location配置。
其中BOARD_AVB_ROLLBACK_INDEX_LOCATION需要配置为0,其他值根据需求自定义,如:
BOARD_AVB_ROLLBACK_INDEX := 2 BOARD_AVB_ROLLBACK_INDEX_LOCATION := 0 BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX := $(PLATFORM_SECURITY_PATCH_TIMESTAMP) BOARD_AVB_VBMETA_SYSTEM_ROLLBACK_INDEX_LOCATION := 2
以上所有修改均基于Android 11代码。