233 lines
4.6 KiB
Bash
Executable File
233 lines
4.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
cmd=`realpath $0`
|
|
cwd=`dirname $cmd`
|
|
CMD_VERSION=1.0.1
|
|
|
|
C_BLACK="\e[30;1m"
|
|
C_RED="\e[31;1m"
|
|
C_GREEN="\e[32;1m"
|
|
C_YELLOW="\e[33;1m"
|
|
C_BLUE="\e[34;1m"
|
|
C_PURPLE="\e[35;1m"
|
|
C_CYAN="\e[36;1m"
|
|
C_WHITE="\e[37;1m"
|
|
C_NORMAL="\033[0m"
|
|
|
|
function msg_info()
|
|
{
|
|
echo -e "${C_GREEN}[$(basename $0):info] $1${C_NORMAL}"
|
|
}
|
|
|
|
function msg_warn()
|
|
{
|
|
echo -e "${C_YELLOW}[$(basename $0):warn] $1${C_NORMAL}"
|
|
}
|
|
|
|
function msg_error()
|
|
{
|
|
echo -e "${C_RED}[$(basename $0):error] $1${C_NORMAL}"
|
|
}
|
|
|
|
function pause()
|
|
{
|
|
msg_error "package update.img fail..."
|
|
msg_error "Press any key to quit:"
|
|
read -n1 -t10 -s key
|
|
exit -1
|
|
}
|
|
|
|
function msg_help()
|
|
{
|
|
echo "command format:"
|
|
echo " `basename $cmd` -v -h -i -id -p -t"
|
|
echo " -v|--version (Optional) view this version."
|
|
echo " -h|--help (Optional) view this help message."
|
|
echo " -id|--chip-id (Essential) input chip id."
|
|
echo " -i|--image (Essential) input firmware image path."
|
|
echo " -p|--parameter (Optional) the partition file path (Not added by default)."
|
|
}
|
|
|
|
function chk_param()
|
|
{
|
|
local cnt
|
|
cnt=0
|
|
while [ $# -ne 0 ]
|
|
do
|
|
case $1 in
|
|
-v|--version)
|
|
msg_info "V$CMD_VERSION"
|
|
exit 0
|
|
;;
|
|
-h|--help)
|
|
msg_help
|
|
exit 0
|
|
;;
|
|
-i|--image)
|
|
IMAGE_PATH=$2
|
|
cnt=$(( cnt + 1 ))
|
|
;;
|
|
-id|--chip-id)
|
|
CHIP_ID=$2
|
|
case $CHIP_ID in
|
|
rv1126|rv1109|RV1126|RV1109)
|
|
CHIP_ID=-RK1126
|
|
;;
|
|
rk3588|RK3588)
|
|
CHIP_ID=-RK3588
|
|
;;
|
|
rv1106|rv1103|RV1106|RV1103)
|
|
CHIP_ID=-RK1106
|
|
;;
|
|
*)
|
|
msg_error "Invalid paramter: -id $CHIP_ID"
|
|
exit -1
|
|
;;
|
|
esac
|
|
cnt=$(( cnt + 1 ))
|
|
;;
|
|
-p|--parameter)
|
|
partition_file=$2
|
|
;;
|
|
*)
|
|
;;
|
|
esac
|
|
shift
|
|
done
|
|
|
|
if [ $cnt -ne 2 -o -z "$IMAGE_PATH" -o -z "$CHIP_ID" ]; then
|
|
msg_error "Invalid parameter..."
|
|
msg_help
|
|
exit -1
|
|
fi
|
|
msg_info "image input dir: $IMAGE_PATH"
|
|
|
|
if [ -f "$partition_file" ]; then
|
|
PARTITION_FILE=`basename $partition_file`
|
|
return
|
|
fi
|
|
|
|
PARTITION_FILE=$partition_file
|
|
if [ -f "$IMAGE_PATH/$PARTITION_FILE" ]; then
|
|
return
|
|
fi
|
|
|
|
if [ -f "$IMAGE_PATH/env.img" ]; then
|
|
PARTITION_FILE=env.img
|
|
return
|
|
else
|
|
msg_error "Not found file named $PARTITION_FILE in the dir $IMAGE_PATH"
|
|
exit -1
|
|
fi
|
|
}
|
|
|
|
function get_partition_names()
|
|
{
|
|
local part_file part_lines boot_mediums
|
|
|
|
part_file=$IMAGE_PATH/$PARTITION_FILE
|
|
boot_mediums="blkdevparts=mmcblk0,blkdevparts=mmcblk1,mtdparts=sfc_nor,mtdparts=spi-nand0,mtdparts=rk-nand"
|
|
|
|
IFS=,
|
|
for medium in $boot_mediums;
|
|
do
|
|
part_lines=$(strings $part_file | grep -i $medium)
|
|
[ ! -z "$part_lines" ] && part_lines=${part_lines##*${medium}:} && break
|
|
done
|
|
IFS=
|
|
|
|
[ -z "$part_lines" ] && msg_error "Not found partition line in $part_file" && msg_help && exit -1
|
|
|
|
IFS=,
|
|
local part_name part_size
|
|
for part in $part_lines;
|
|
do
|
|
part_size=`echo $part | cut -d '@' -f1`
|
|
part_name=`echo $part | cut -d '(' -f2|cut -d ')' -f1`
|
|
|
|
[[ $part_size =~ "-" ]] && continue
|
|
PARTITIONS="$part_name,$PARTITIONS"
|
|
done
|
|
IFS=
|
|
|
|
if [ -z "$PARTITIONS" ];then
|
|
msg_error "Invalid partition..."
|
|
exit -1
|
|
fi
|
|
# msg_info "partitions:\n$PARTITIONS"
|
|
}
|
|
|
|
function __package_file()
|
|
{
|
|
if [ -f "$IMAGE_PATH/$1" ];then
|
|
PACKAGE_CFG="$part $1\n$PACKAGE_CFG"
|
|
elif [ -f "$IMAGE_PATH/${1}.img" ];then
|
|
PACKAGE_CFG="$part ${1}.img\n$PACKAGE_CFG"
|
|
elif [ -f "$IMAGE_PATH/${1%_[ab]}.img" ];then
|
|
PACKAGE_CFG="$part ${1%_[ab]}.img\n$PACKAGE_CFG"
|
|
else
|
|
msg_error "Not found image file: $IMAGE_PATH/$1"
|
|
[ "$2" = "Essential" ] && exit -1
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
function create_package_file()
|
|
{
|
|
IFS=,
|
|
for part in $SPECIAL_PARTITIONS $PARTITIONS;
|
|
do
|
|
case $part in
|
|
package-file)
|
|
PACKAGE_CFG="$part package-file\n$PACKAGE_CFG"
|
|
;;
|
|
bootloader)
|
|
__package_file download.bin Essential
|
|
;;
|
|
parameter)
|
|
__package_file $PARTITION_FILE Essential
|
|
;;
|
|
rootfs)
|
|
__package_file $part
|
|
[ $? -eq 1 ] && __package_file rootfs_base.img
|
|
;;
|
|
*)
|
|
__package_file $part
|
|
;;
|
|
esac
|
|
done
|
|
IFS=
|
|
|
|
msg_info "partitions:\n$PACKAGE_CFG"
|
|
echo -e $PACKAGE_CFG > $IMAGE_PATH/package-file
|
|
}
|
|
|
|
CHIP_ID=""
|
|
IMAGE_PATH=""
|
|
PARTITION_FILE=""
|
|
SPECIAL_PARTITIONS="bootloader,package-file"
|
|
PARTITIONS=""
|
|
PACKAGE_CFG=""
|
|
|
|
chk_param $@
|
|
|
|
msg_info "partition file name: $PARTITION_FILE"
|
|
msg_info "start to package update.img..."
|
|
|
|
get_partition_names
|
|
|
|
create_package_file
|
|
|
|
echo "TOOL_PATH=$cwd"
|
|
|
|
$cwd/afptool -pack $IMAGE_PATH $IMAGE_PATH/update_tmp.img || pause
|
|
|
|
$cwd/rkImageMaker $CHIP_ID $IMAGE_PATH/download.bin $IMAGE_PATH/update_tmp.img $IMAGE_PATH/update.img -os_type:androidos || pause
|
|
|
|
msg_info "Making $CHIP_ID update.img OK."
|
|
|
|
# remove temporay image
|
|
rm -f $IMAGE_PATH/update_tmp.img
|
|
rm -f $IMAGE_PATH/package-file
|
|
exit $?
|