155 lines
4.5 KiB
Bash
155 lines
4.5 KiB
Bash
#!/bin/bash
|
|
|
|
function get_image_max_size()
|
|
{
|
|
BPT_FILE=$1
|
|
PARTITION_NAME=$2
|
|
TYPE=$3
|
|
MAX_SIZE=0
|
|
|
|
if [[ $# != 3 ]];then
|
|
echo "get_image_max_size error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
IMAGE_SIZE=`bpttool query_partition --input ${BPT_FILE} --label ${PARTITION_NAME} --type size`
|
|
IMAGE_SIZE=`avbtool add_hash_footer --calc_max_image_size --partition_size ${IMAGE_SIZE}`
|
|
MAX_SIZE=${IMAGE_SIZE}
|
|
echo ${MAX_SIZE}
|
|
}
|
|
|
|
function get_partition_size()
|
|
{
|
|
PARTITION_NAME=$1
|
|
BPT_FILE=$2
|
|
if [ $# != 2 ];then
|
|
echo "get_partition_size error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
IMAGE_SIZE=`bpttool query_partition --input ${BPT_FILE} --label ${PARTITION_NAME} --type size`
|
|
echo ${IMAGE_SIZE}
|
|
}
|
|
|
|
function image_add_hash_footer_no_bpt()
|
|
{
|
|
IMAGE=$1
|
|
PARTITION_NAME=$2
|
|
PARTITION_SIZE=$3
|
|
HASH_ALG=$4
|
|
VBMETA_SIGNED_ARGS=$5
|
|
if [ $# != 5 ];then
|
|
echo "image_add_hash_footer_no_bpt error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
avbtool erase_footer --image ${IMAGE}
|
|
avbtool add_hash_footer --partition_name ${PARTITION_NAME} --partition_size ${PARTITION_SIZE} --image ${IMAGE} --hash_algorithm $HASH_ALG $VBMETA_SIGNED_ARGS
|
|
|
|
DESCIPTOR=" --include_descriptors_from_image ${IMAGE} "
|
|
echo ${DESCIPTOR}
|
|
}
|
|
|
|
function image_add_hash_footer()
|
|
{
|
|
IMAGE=$1
|
|
PARTITION_NAME=$2
|
|
BPT_FILE=$3
|
|
HASH_ALG=$4
|
|
if [ $# != 4 ];then
|
|
echo "image_add_hash_footer error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
VBMETA_BLOB_DIR=`dirname ${IMAGE}`
|
|
VBMETA_BLOB_BASE=`basename ${IMAGE}`
|
|
VBMETA_BLOB=${VBMETA_BLOB_DIR}/${VBMETA_BLOB_BASE}.vbmeta.blob
|
|
|
|
PARTITION_SIZE=`bpttool query_partition --input ${BPT_FILE} --label ${PARTITION_NAME} --type size`
|
|
avbtool erase_footer --compact_footer --image ${IMAGE}
|
|
avbtool add_hash_footer --partition_name ${PARTITION_NAME} \
|
|
--partition_size ${PARTITION_SIZE} \
|
|
--image ${IMAGE} \
|
|
--compact_footer \
|
|
--output_vbmeta_image ${VBMETA_BLOB} \
|
|
--do_not_append_vbmeta_image \
|
|
--hash_algorithm $HASH_ALG
|
|
|
|
DESCIPTOR=" --include_descriptors_from_image ${VBMETA_BLOB} "
|
|
echo ${DESCIPTOR}
|
|
}
|
|
|
|
function images_add_footer()
|
|
{
|
|
BPT_ORIG_FILE=$1
|
|
ITEMS=$2
|
|
IMAGE=
|
|
PARTITION_NAME=
|
|
HASH_ALG=
|
|
FOOTER_TYPE=
|
|
INFOS=
|
|
VBMTEA_DESCIPTOR=
|
|
for item in ${ITEMS};do
|
|
INFOS=(`echo $item | tr ':' ' '`)
|
|
IMAGE=${INFOS[0]}
|
|
PARTITION_NAME=${INFOS[1]}
|
|
HASH_ALG=${INFOS[2]}
|
|
FOOTER_TYPE=${INFOS[3]}
|
|
if [[ x"$FOOTER_TYPE" == x"hashtree" ]];then
|
|
VBMTEA_DESCIPTOR+=" $(image_add_hashtree_footer "${IMAGE}" "${PARTITION_NAME}" "${BPT_ORIG_FILE}" "${HASH_ALG}")"
|
|
elif [[ x"$FOOTER_TYPE" == x"hash" ]];then
|
|
VBMTEA_DESCIPTOR+=" $(image_add_hash_footer "${IMAGE}" "${PARTITION_NAME}" "${BPT_ORIG_FILE}" "${HASH_ALG}")"
|
|
else
|
|
echo "unsupported hash algorithm"
|
|
exit 1
|
|
fi
|
|
done
|
|
echo ${VBMTEA_DESCIPTOR}
|
|
}
|
|
|
|
function image_add_hashtree_footer()
|
|
{
|
|
IMAGE=$1
|
|
PARTITION_NAME=$2
|
|
BPT_FILE=$3
|
|
HASH_ALG=$4
|
|
FILE_TYPE=
|
|
if [ $# != 4 ];then
|
|
echo "image_add_hashtree_footer error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
IMAGE=$(realpath $IMAGE)
|
|
FILE_TYPE=$(file ${IMAGE})
|
|
PARTITION_SIZE=`bpttool query_partition --input ${BPT_FILE} --label ${PARTITION_NAME} --type size`
|
|
IMAGE_MAX_SIZE=`avbtool add_hashtree_footer --calc_max_image_size --partition_size ${PARTITION_SIZE}`
|
|
if [[ "${FILE_TYPE}" =~ "ext4 filesystem" ]];then
|
|
IMAGE_MAX_SIZE=$((IMAGE_MAX_SIZE/1048576))
|
|
resize2fs ${IMAGE} "${IMAGE_MAX_SIZE}M" > /dev/null
|
|
fi
|
|
|
|
avbtool erase_footer --image ${IMAGE}
|
|
avbtool add_hashtree_footer --partition_name ${PARTITION_NAME} --partition_size ${PARTITION_SIZE} --image ${IMAGE} --hash_algorithm $HASH_ALG
|
|
if [[ $? -ne 0 ]];then
|
|
echo "[ERROR] fail to add hashtree for ${IMAGE}" > /dev/stderr
|
|
exit 1
|
|
fi
|
|
DESCIPTOR=" --include_descriptors_from_image ${IMAGE} "
|
|
echo ${DESCIPTOR}
|
|
}
|
|
|
|
function make_vbmeta_image()
|
|
{
|
|
DESCIPTOR=$1
|
|
VBMETA_SIGNED_ARGS=$2
|
|
VBMETA_FILE=$3
|
|
|
|
if [ $# != 3 ];then
|
|
echo "make_vbmeta_image error param:$#" > /dev/stderr
|
|
return -1
|
|
fi
|
|
|
|
avbtool make_vbmeta_image --output ${VBMETA_FILE} ${VBMETA_SIGNED_ARGS} ${DESCIPTOR}
|
|
return $?
|
|
}
|