Files
plant_car/tools/sdtools/sign_tool/make_vbmeta.sh
2025-11-08 13:26:19 +08:00

134 lines
3.9 KiB
Bash

#!/bin/bash
usage()
{
echo -e "\nUsage: make_vbmeta.sh
Optional parameters: [-f function] [-d image-description] [-b bpt file] [-s sign parameters]
[-o output name] [-t bpttool path] [-i include description]"
echo "
* [-f function]: The function to be called,default make_vbmeta.
The options are \"make_vbmeta\",\"image_max_size_hash\",\"image_max_size_hashtree\",\"sign_dloader\".
* [-d image-description]: The description of the images to be signed.
This parameter is for make_vbmeta and sign_dloader.
* [-b bpt file]: The bpt file containing the images info,such as size,type .
This parameter is for make_vbmeta,image_max_size_hash.
* [-i include description]Included vbmeta description.
This parameter is for make_vbmeta.
The output vbmeta image includes this description.
* [-s sign parameters]: The parameters of signer.
This parameter is for make_vbmeta.
* [-o output name]: The output file name.
This parameter is for make_vbmeta.
* [-t bpttool path]: The directory that contains bpttool file.
* [-p partition_name]: The partition name in the bpt file.
This parameter is for image_max_size_hash and image_max_size_hashtree.
* [-h]: This help message.
"
}
clean_up()
{
unset make_help make_error args
unset usage clean_up
}
# get command line options
OLD_OPTIND=$OPTIND
## set default configuration
VBMTEA_DESCIPTOR=
BPT_ORIG_FILE=
VBMETA_IMAGE=
VBMETA_SIGNED_ARGS=
BPTTOOL_DIR=
PARTITION_NAME=
FUNC=make_vbmeta
INCLUDE_DESC=
while getopts "b:d:f:i:o:p:s:t:h" args
do
case $args in
f) FUNC="$OPTARG";
;;
d) VBMTEA_DESCIPTOR="$OPTARG";
;;
b) BPT_ORIG_FILE="$OPTARG";
;;
i) INCLUDE_DESC="$OPTARG";
;;
s) VBMETA_SIGNED_ARGS="$OPTARG";
;;
o) VBMETA_IMAGE="$OPTARG";
;;
t) BPTTOOL_DIR="$OPTARG";
;;
p) PARTITION_NAME="$OPTARG";
;;
h) make_help='true';
;;
\?) make_error='true';
;;
esac
done
shift $((OPTIND-1))
if [ $# -ne 0 ]; then
echo -e "Invalid command line ending: '$@'"
fi
OPTIND=$OLD_OPTIND
if test $make_help; then
usage && clean_up && exit 1
elif test $make_error; then
clean_up && exit 1
fi
function image_max_size_hash
{
res_img_size=$(get_image_max_size "${BPT_ORIG_FILE}" "${PARTITION_NAME}" "hash" )
res_img_size=`expr ${res_img_size} / 1048576`
echo "${res_img_size}"
}
function image_max_size_hashtree
{
res_img_size=$(get_image_max_size "${BPT_ORIG_FILE}" "${PARTITION_NAME}" "hashtree" )
res_img_size=`expr ${res_img_size} / 1048576`
echo "${res_img_size}"
}
function make_vbmeta
{
if [[ x${INCLUDE_DESC} != x ]];then
INCLUDE_DESC=("${INCLUDE_DESC[@]/#/--include_descriptors_from_image }")
fi
VBMTEA_DESCIPTOR=$(images_add_footer ${BPT_ORIG_FILE} "${VBMTEA_DESCIPTOR}")
VBMTEA_DESCIPTOR+=" ${INCLUDE_DESC}"
echo "VBMTEA_DESCIPTOR:"${VBMTEA_DESCIPTOR}
echo "INCLUDE_DESC:"${INCLUDE_DESC}
make_vbmeta_image "${VBMTEA_DESCIPTOR}" "${VBMETA_SIGNED_ARGS}" "${VBMETA_IMAGE}"
}
function sign_dloader
{
VBMTEA_DESCIPTOR=(`echo ${VBMTEA_DESCIPTOR}|tr ':' ' '`)
local IMAGE=${VBMTEA_DESCIPTOR[0]}
local PARTITION=${VBMTEA_DESCIPTOR[1]}
local HASH_ALG=${VBMTEA_DESCIPTOR[2]}
image_add_hash_footer_no_bpt "$IMAGE" "${PARTITION}" "262144" "${HASH_ALG}" "${VBMETA_SIGNED_ARGS}"
}
DIR=$(dirname $0)
export PATH=.:${DIR}:${DIR}/fec:${BPTTOOL_DIR}:${PATH}
export LD_LIBRARY_PATH=.:${DIR}/fec:${LD_LIBRARY_PATH}
source ${DIR}/sign_helper.sh
if [[ x$FUNC == x ]];then
echo "pls specify function to be called."
exit -1
fi
$FUNC
exit $?