248 lines
5.5 KiB
Bash
248 lines
5.5 KiB
Bash
|
|
#!/bin/bash -e
|
||
|
|
|
||
|
|
RK_PACK_TOOL_DIR="$RK_SDK_DIR/tools/linux/Linux_Pack_Firmware/rockdev"
|
||
|
|
|
||
|
|
gen_package_file()
|
||
|
|
{
|
||
|
|
TYPE="${1:-update}"
|
||
|
|
PARAMETER="${2:-parameter.txt}"
|
||
|
|
PKG_FILE="${3:-package-file}"
|
||
|
|
|
||
|
|
if [ ! -r "$PARAMETER" ]; then
|
||
|
|
error "Unable to parse $PARAMETER"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
{
|
||
|
|
echo -e "# NAME\tPATH"
|
||
|
|
echo -e "package-file\tpackage-file"
|
||
|
|
echo -e "parameter\tparameter.txt"
|
||
|
|
} > "$PKG_FILE"
|
||
|
|
|
||
|
|
if [ "$TYPE" = template -o -r MiniLoaderAll.bin ]; then
|
||
|
|
echo -e "bootloader\tMiniLoaderAll.bin" >> "$PKG_FILE"
|
||
|
|
fi
|
||
|
|
|
||
|
|
for part in $(rk_partition_parse_names "$PARAMETER"); do
|
||
|
|
if echo $part | grep -q "_b$"; then
|
||
|
|
# Not packing *_b partition for A/B OTA
|
||
|
|
if echo "$TYPE" | grep -wq "ab-ota"; then
|
||
|
|
continue
|
||
|
|
fi
|
||
|
|
fi
|
||
|
|
|
||
|
|
case $part in
|
||
|
|
backup)
|
||
|
|
echo -e "backup\tRESERVED" >> "$PKG_FILE"
|
||
|
|
continue
|
||
|
|
;;
|
||
|
|
system|system_[ab]) IMAGE=rootfs.img ;;
|
||
|
|
*_a) IMAGE="${part%_a}.img" ;;
|
||
|
|
*_b) IMAGE="${part%_b}.img" ;;
|
||
|
|
*) IMAGE="$part.img" ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
if [ "$TYPE" = template -o -r "$IMAGE" ]; then
|
||
|
|
echo -e "$part\t$IMAGE" >> "$PKG_FILE"
|
||
|
|
fi
|
||
|
|
done
|
||
|
|
}
|
||
|
|
|
||
|
|
do_build_updateimg()
|
||
|
|
{
|
||
|
|
check_config RK_UPDATE || false
|
||
|
|
|
||
|
|
TYPE="update${1:+-$1}"
|
||
|
|
OUT_DIR="$RK_OUTDIR/$TYPE"
|
||
|
|
IMAGE_DIR="$OUT_DIR/Image"
|
||
|
|
TARGET="$RK_FIRMWARE_DIR/$TYPE.img"
|
||
|
|
|
||
|
|
case "$TYPE" in
|
||
|
|
*ota*) PKG_FILE="$RK_OTA_PACKAGE_FILE" ;;
|
||
|
|
*) PKG_FILE="$RK_PACKAGE_FILE" ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
# Make sure that the basic firmwares are ready
|
||
|
|
if [ ! -r "$RK_FIRMWARE_DIR/parameter.txt" ]; then
|
||
|
|
notice "Basic firmwares are not ready, building it..."
|
||
|
|
RK_UPDATE= "$RK_SCRIPTS_DIR/mk-firmware.sh"
|
||
|
|
fi
|
||
|
|
|
||
|
|
# Make sure that the loader is ready
|
||
|
|
if [ ! -r "$RK_FIRMWARE_DIR/MiniLoaderAll.bin" ]; then
|
||
|
|
notice "Loader is not ready, building it..."
|
||
|
|
"$RK_SCRIPTS_DIR/mk-loader.sh"
|
||
|
|
fi
|
||
|
|
|
||
|
|
message "=========================================="
|
||
|
|
message " Start packing $TYPE image"
|
||
|
|
message "=========================================="
|
||
|
|
|
||
|
|
if [ "$RK_AB_UPDATE" ] && \
|
||
|
|
! rk_partition_parse_names | grep -qE "_a\>|_b\>"; then
|
||
|
|
warning "RK_AB_UPDATE enabled, without having A/B partitions!"
|
||
|
|
fi
|
||
|
|
|
||
|
|
rm -rf "$TARGET" "$OUT_DIR"
|
||
|
|
mkdir -p "$IMAGE_DIR"
|
||
|
|
cd "$IMAGE_DIR"
|
||
|
|
|
||
|
|
# Prepare images
|
||
|
|
ln -rsf "$RK_FIRMWARE_DIR"/* .
|
||
|
|
rm -f update.img
|
||
|
|
|
||
|
|
# Prepare package-file
|
||
|
|
if [ "$PKG_FILE" ]; then
|
||
|
|
PKG_FILE="$RK_CHIP_DIR/$PKG_FILE"
|
||
|
|
if [ ! -r "$PKG_FILE" ]; then
|
||
|
|
error "$PKG_FILE not exists!"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
ln -rsf "$PKG_FILE" package-file
|
||
|
|
else
|
||
|
|
notice "Generating package-file for $TYPE:"
|
||
|
|
gen_package_file $TYPE
|
||
|
|
cat package-file
|
||
|
|
fi
|
||
|
|
|
||
|
|
notice "Packing $TARGET for $TYPE..."
|
||
|
|
|
||
|
|
if [ ! -r MiniLoaderAll.bin ]; then
|
||
|
|
error "MiniLoaderAll.bin is missing"
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
TAG=RK$(dd if=MiniLoaderAll.bin bs=1 count=4 skip=21 status=none | rev)
|
||
|
|
"$RK_PACK_TOOL_DIR/afptool" -pack ./ update.raw.img
|
||
|
|
"$RK_PACK_TOOL_DIR/rkImageMaker" -$TAG MiniLoaderAll.bin \
|
||
|
|
update.raw.img update.img -os_type:androidos \
|
||
|
|
${RK_UPDATE_STORAGE:+-storage:$RK_UPDATE_STORAGE}
|
||
|
|
|
||
|
|
ln -rsf "$IMAGE_DIR/package-file" "$OUT_DIR"
|
||
|
|
ln -rsf "$IMAGE_DIR/update.img" "$OUT_DIR"
|
||
|
|
ln -rsf "$IMAGE_DIR/update.img" "$TARGET"
|
||
|
|
|
||
|
|
if echo "$TYPE" | grep -wq "ab"; then
|
||
|
|
ln -sf "$(basename "$TARGET")" \
|
||
|
|
"$RK_FIRMWARE_DIR/${TYPE/-ab/}.img"
|
||
|
|
fi
|
||
|
|
|
||
|
|
case "$TYPE" in
|
||
|
|
*ota*) EDIT_CMD="edit-ota-package-file" ;;
|
||
|
|
*) EDIT_CMD="edit-package-file" ;;
|
||
|
|
esac
|
||
|
|
notice "\nRun 'make $EDIT_CMD' if you want to change the package-file.\n"
|
||
|
|
}
|
||
|
|
|
||
|
|
build_updateimg()
|
||
|
|
{
|
||
|
|
if [ "$RK_AB_UPDATE" ]; then
|
||
|
|
notice "Making A/B update image..."
|
||
|
|
do_build_updateimg ab
|
||
|
|
else
|
||
|
|
notice "Making update image..."
|
||
|
|
do_build_updateimg
|
||
|
|
fi
|
||
|
|
|
||
|
|
finish_build
|
||
|
|
}
|
||
|
|
|
||
|
|
build_ota_updateimg()
|
||
|
|
{
|
||
|
|
if [ "$RK_AB_UPDATE" ]; then
|
||
|
|
notice "Making A/B update image for OTA..."
|
||
|
|
do_build_updateimg ab-ota
|
||
|
|
else
|
||
|
|
notice "Making update image for OTA..."
|
||
|
|
do_build_updateimg ota
|
||
|
|
fi
|
||
|
|
|
||
|
|
finish_build
|
||
|
|
}
|
||
|
|
|
||
|
|
# Hooks
|
||
|
|
|
||
|
|
usage_hook()
|
||
|
|
{
|
||
|
|
usage_oneline "edit-package-file" "edit package-file"
|
||
|
|
usage_oneline "edit-ota-package-file" "edit package-file for OTA"
|
||
|
|
usage_oneline "updateimg" "build update image"
|
||
|
|
usage_oneline "ota-updateimg" "build update image for OTA"
|
||
|
|
}
|
||
|
|
|
||
|
|
clean_hook()
|
||
|
|
{
|
||
|
|
rm -rf "$RK_OUTDIR/*update*"
|
||
|
|
rm -rf "$RK_FIRMWARE_DIR/*update.img"
|
||
|
|
}
|
||
|
|
|
||
|
|
INIT_CMDS="edit-package-file edit-ota-package-file"
|
||
|
|
init_hook()
|
||
|
|
{
|
||
|
|
case "$1" in
|
||
|
|
edit-package-file)
|
||
|
|
BASE_CFG=RK_PACKAGE_FILE
|
||
|
|
PKG_FILE=package-file
|
||
|
|
;;
|
||
|
|
edit-ota-package-file)
|
||
|
|
BASE_CFG=RK_OTA_PACKAGE_FILE
|
||
|
|
PKG_FILE=ota-package-file
|
||
|
|
;;
|
||
|
|
*) return 0 ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
load_config $BASE_CFG
|
||
|
|
if ! check_config $BASE_CFG &>/dev/null; then
|
||
|
|
sed -i '/$BASE_CFG/d' "$RK_CONFIG"
|
||
|
|
echo "${BASE_CFG}_CUSTOM=y" >> "$RK_CONFIG"
|
||
|
|
echo "$BASE_CFG=\"$PKG_FILE\"" >> "$RK_CONFIG"
|
||
|
|
"$RK_SCRIPTS_DIR/mk-config.sh" olddefconfig &>/dev/null
|
||
|
|
"$RK_SCRIPTS_DIR/mk-config.sh" savedefconfig &>/dev/null
|
||
|
|
fi
|
||
|
|
}
|
||
|
|
|
||
|
|
PRE_BUILD_CMDS="edit-package-file edit-ota-package-file"
|
||
|
|
pre_build_hook()
|
||
|
|
{
|
||
|
|
case "$1" in
|
||
|
|
edit-package-file)
|
||
|
|
check_config RK_PACKAGE_FILE || false
|
||
|
|
PKG_FILE="$RK_CHIP_DIR/$RK_PACKAGE_FILE" ;;
|
||
|
|
edit-ota-package-file)
|
||
|
|
check_config RK_OTA_PACKAGE_FILE || false
|
||
|
|
PKG_FILE="$RK_CHIP_DIR/$RK_OTA_PACKAGE_FILE"
|
||
|
|
;;
|
||
|
|
*) return 0 ;;
|
||
|
|
esac
|
||
|
|
|
||
|
|
PKG_FILE="$(realpath -m "$PKG_FILE")"
|
||
|
|
if [ ! -r "$PKG_FILE" ]; then
|
||
|
|
notice "Generating template $PKG_FILE"
|
||
|
|
gen_package_file template \
|
||
|
|
"$RK_CHIP_DIR/$RK_PARAMETER" "$PKG_FILE"
|
||
|
|
fi
|
||
|
|
eval ${EDITOR:-vi} "$PKG_FILE"
|
||
|
|
|
||
|
|
finish_build $@
|
||
|
|
}
|
||
|
|
|
||
|
|
POST_BUILD_CMDS="updateimg ota-updateimg"
|
||
|
|
post_build_hook()
|
||
|
|
{
|
||
|
|
case "$1" in
|
||
|
|
updateimg) build_updateimg ;;
|
||
|
|
ota-updateimg) build_ota_updateimg ;;
|
||
|
|
*) usage ;;
|
||
|
|
esac
|
||
|
|
}
|
||
|
|
|
||
|
|
source "${RK_BUILD_HELPER:-$(dirname "$(realpath "$0")")/build-helper}"
|
||
|
|
|
||
|
|
case "$@" in
|
||
|
|
edit-*package-file)
|
||
|
|
init_hook $@
|
||
|
|
pre_build_hook $@
|
||
|
|
;;
|
||
|
|
*) post_build_hook ${@:-updateimg} ;;
|
||
|
|
esac
|