You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.4 KiB
85 lines
2.4 KiB
#!/bin/bash
|
|
|
|
if [ $# -ne 3 ]; then
|
|
echo "Usage: $0 <vbmeta.img> <system.img> <VbmetaBootParams.textproto>"
|
|
exit 0
|
|
fi
|
|
|
|
# Example Output from 'avbtool calculate_vbmeta_digest --image $OUT/vbmeta.img':
|
|
# 3254db8a232946c712b5c6f8c1a80b31f2a200bab98553d86f5915d06bfd5436
|
|
#
|
|
# Example Output from 'avbtool info_image --image $OUT/vbmeta.img':
|
|
#
|
|
# Minimum libavb version: 1.0
|
|
# Header Block: 256 bytes
|
|
# Authentication Block: 576 bytes
|
|
# Auxiliary Block: 1600 bytes
|
|
# Algorithm: SHA256_RSA4096
|
|
# Rollback Index: 0
|
|
# Flags: 0
|
|
# Release String: 'avbtool 1.1.0'
|
|
# Descriptors:
|
|
# ...
|
|
#
|
|
#
|
|
|
|
set -e
|
|
|
|
function die {
|
|
echo $1 >&2
|
|
exit 1
|
|
}
|
|
|
|
# Incrementing major version causes emulator binaries that do not support the
|
|
# version to ignore this file. This can be useful if there is a change
|
|
# not supported by older emulator binaries.
|
|
readonly MAJOR_VERSION=2
|
|
|
|
readonly VBMETAIMG=$1
|
|
readonly SYSIMG=$2
|
|
readonly TARGET=$3
|
|
|
|
# Extract the digest
|
|
readonly VBMETA_DIGEST=$(${AVBTOOL:-avbtool} calculate_vbmeta_digest --image $VBMETAIMG)
|
|
|
|
|
|
readonly INFO_OUTPUT=$(${AVBTOOL:-avbtool} info_image --image $VBMETAIMG | grep "^Algorithm:")
|
|
|
|
# Extract the algorithm
|
|
readonly ALG_OUTPUT=$(echo $INFO_OUTPUT | grep "Algorithm:")
|
|
readonly ALG_SPLIT=($(echo $ALG_OUTPUT | tr ' ' '\n'))
|
|
readonly ORG_ALGORITHM=${ALG_SPLIT[1]}
|
|
|
|
if [[ $ORG_ALGORITHM == "SHA256_RSA4096" ]]; then
|
|
VBMETA_HASH_ALG=sha256
|
|
else
|
|
die "Don't know anything about $ORG_ALGORITHM"
|
|
fi
|
|
|
|
|
|
# extract the size
|
|
|
|
function get_bytes {
|
|
MY_OUTPUT=$(${AVBTOOL:-avbtool} info_image --image $1 | grep "$2" )
|
|
MY_SPLIT=($(echo $MY_OUTPUT | tr ' ' '\n'))
|
|
MY_BYTES=${MY_SPLIT[2]}
|
|
echo $MY_BYTES
|
|
}
|
|
|
|
HEADER_SIZE=$(get_bytes $VBMETAIMG "Header Block:")
|
|
AUTHEN_SIZE=$(get_bytes $VBMETAIMG "Authentication Block:")
|
|
AUX_SIZE=$(get_bytes $VBMETAIMG "Auxiliary Block:")
|
|
SYSMETA_SIZE=$(get_bytes $SYSIMG "VBMeta size:")
|
|
|
|
VBMETA_SIZE=$(expr $HEADER_SIZE + $AUTHEN_SIZE + $AUX_SIZE + $SYSMETA_SIZE)
|
|
|
|
|
|
HEADER_COMMENT="# androidboot.vbmeta.size=$VBMETA_SIZE androidboot.vbmeta.hash_alg=$VBMETA_HASH_ALG androidboot.vbmeta.digest=$VBMETA_DIGEST"
|
|
|
|
echo $HEADER_COMMENT > $TARGET
|
|
echo "major_version: $MAJOR_VERSION" >> $TARGET
|
|
#echo "param: \"androidboot.slot_suffix=_a\"" >> $TARGET
|
|
echo "param: \"androidboot.vbmeta.size=$VBMETA_SIZE\"" >> $TARGET
|
|
echo "param: \"androidboot.vbmeta.hash_alg=$VBMETA_HASH_ALG\"" >> $TARGET
|
|
echo "param: \"androidboot.vbmeta.digest=$VBMETA_DIGEST\"" >> $TARGET
|