1*4882a593Smuzhiyun#!/bin/bash -e 2*4882a593Smuzhiyun 3*4882a593SmuzhiyunRK_PACK_TOOL_DIR="$SDK_DIR/tools/linux/Linux_Pack_Firmware/rockdev" 4*4882a593Smuzhiyun 5*4882a593Smuzhiyungen_package_file() 6*4882a593Smuzhiyun{ 7*4882a593Smuzhiyun TYPE="${1:-update}" 8*4882a593Smuzhiyun 9*4882a593Smuzhiyun if [ ! -r parameter.txt ]; then 10*4882a593Smuzhiyun echo -e "\e[31mparameter.txt is missing\e[0m" >&2 11*4882a593Smuzhiyun exit 1 12*4882a593Smuzhiyun fi 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun echo -e "# NAME\tPATH" 15*4882a593Smuzhiyun echo -e "package-file\tpackage-file" 16*4882a593Smuzhiyun echo -e "parameter\tparameter.txt" 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun [ ! -r MiniLoaderAll.bin ] || echo -e "bootloader\tMiniLoaderAll.bin" 19*4882a593Smuzhiyun 20*4882a593Smuzhiyun for part in $(rk_partition_parse_names parameter.txt); do 21*4882a593Smuzhiyun if echo $part | grep -q "_b$"; then 22*4882a593Smuzhiyun # Not packing *_b partition for ota|sdcard 23*4882a593Smuzhiyun case $TYPE in 24*4882a593Smuzhiyun ota|sdcard) continue ;; 25*4882a593Smuzhiyun esac 26*4882a593Smuzhiyun fi 27*4882a593Smuzhiyun 28*4882a593Smuzhiyun case $part in 29*4882a593Smuzhiyun backup) echo -e "backup\tRESERVED"; continue ;; 30*4882a593Smuzhiyun system|system_[ab]) IMAGE=rootfs.img ;; 31*4882a593Smuzhiyun *_a) IMAGE="${part%_a}.img" ;; 32*4882a593Smuzhiyun *_b) IMAGE="${part%_b}.img" ;; 33*4882a593Smuzhiyun *) IMAGE="$part.img" ;; 34*4882a593Smuzhiyun esac 35*4882a593Smuzhiyun 36*4882a593Smuzhiyun [ ! -r "$IMAGE" ] || echo -e "$part\t$IMAGE" 37*4882a593Smuzhiyun done 38*4882a593Smuzhiyun} 39*4882a593Smuzhiyun 40*4882a593Smuzhiyunbuild_updateimg() 41*4882a593Smuzhiyun{ 42*4882a593Smuzhiyun check_config RK_UPDATE || return 0 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun TARGET="${1:-$RK_FIRMWARE_DIR/update.img}" 45*4882a593Smuzhiyun TYPE="${2:-update}" 46*4882a593Smuzhiyun PKG_FILE="${3:-$RK_PACKAGE_FILE}" 47*4882a593Smuzhiyun OUT_DIR="$RK_OUTDIR/$TYPE" 48*4882a593Smuzhiyun IMAGE_DIR="$OUT_DIR/Image" 49*4882a593Smuzhiyun 50*4882a593Smuzhiyun echo "==========================================" 51*4882a593Smuzhiyun echo " Start packing $2 update image" 52*4882a593Smuzhiyun echo "==========================================" 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun rm -rf "$TARGET" "$OUT_DIR" 55*4882a593Smuzhiyun mkdir -p "$IMAGE_DIR" 56*4882a593Smuzhiyun cd "$IMAGE_DIR" 57*4882a593Smuzhiyun 58*4882a593Smuzhiyun # Prepare images 59*4882a593Smuzhiyun ln -rsf "$RK_ROCKDEV_DIR"/* . 60*4882a593Smuzhiyun rm -f update.img 61*4882a593Smuzhiyun if [ "$TYPE" = sdcard ]; then 62*4882a593Smuzhiyun ln -rsf "$RK_IMAGE_DIR/sdupdate-ab-misc.img" misc.img 63*4882a593Smuzhiyun ln -rsf "$RK_DATA_DIR/parameter-sdupdate.txt" \ 64*4882a593Smuzhiyun parameter.txt 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun # Not packing rootfs partition for sdcard 67*4882a593Smuzhiyun rm -f rootfs.img 68*4882a593Smuzhiyun fi 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun # Prepare package-file 71*4882a593Smuzhiyun if [ "$PKG_FILE" ]; then 72*4882a593Smuzhiyun PKG_FILE="$CHIP_DIR/$PKG_FILE" 73*4882a593Smuzhiyun if [ ! -r "$PKG_FILE" ]; then 74*4882a593Smuzhiyun echo "$PKG_FILE not exists!" 75*4882a593Smuzhiyun exit 1 76*4882a593Smuzhiyun fi 77*4882a593Smuzhiyun ln -rsf "$PKG_FILE" package-file 78*4882a593Smuzhiyun else 79*4882a593Smuzhiyun echo "Generating package-file for $TYPE :" 80*4882a593Smuzhiyun gen_package_file $TYPE > package-file 81*4882a593Smuzhiyun cat package-file 82*4882a593Smuzhiyun fi 83*4882a593Smuzhiyun 84*4882a593Smuzhiyun echo "Packing $TARGET for $TYPE..." 85*4882a593Smuzhiyun 86*4882a593Smuzhiyun if [ ! -r MiniLoaderAll.bin ]; then 87*4882a593Smuzhiyun echo -e "\e[31mMiniLoaderAll.bin is missing\e[0m" 88*4882a593Smuzhiyun exit 1 89*4882a593Smuzhiyun fi 90*4882a593Smuzhiyun 91*4882a593Smuzhiyun TAG=RK$(hexdump -s 21 -n 4 -e '4 "%c"' MiniLoaderAll.bin | rev) 92*4882a593Smuzhiyun "$RK_PACK_TOOL_DIR/afptool" -pack ./ update.raw.img 93*4882a593Smuzhiyun "$RK_PACK_TOOL_DIR/rkImageMaker" -$TAG MiniLoaderAll.bin \ 94*4882a593Smuzhiyun update.raw.img update.img -os_type:androidos 95*4882a593Smuzhiyun 96*4882a593Smuzhiyun ln -rsf "$IMAGE_DIR/package-file" "$OUT_DIR" 97*4882a593Smuzhiyun ln -rsf "$IMAGE_DIR/update.img" "$OUT_DIR" 98*4882a593Smuzhiyun ln -rsf "$IMAGE_DIR/update.img" "$TARGET" 99*4882a593Smuzhiyun 100*4882a593Smuzhiyun finish_build build_updateimg $@ 101*4882a593Smuzhiyun} 102*4882a593Smuzhiyun 103*4882a593Smuzhiyunbuild_ota_updateimg() 104*4882a593Smuzhiyun{ 105*4882a593Smuzhiyun check_config RK_AB_UPDATE || return 0 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun echo "Make A/B update image for OTA" 108*4882a593Smuzhiyun 109*4882a593Smuzhiyun build_updateimg "$RK_FIRMWARE_DIR/update_ota.img" ota \ 110*4882a593Smuzhiyun $RK_OTA_PACKAGE_FILE 111*4882a593Smuzhiyun 112*4882a593Smuzhiyun finish_build 113*4882a593Smuzhiyun} 114*4882a593Smuzhiyun 115*4882a593Smuzhiyunbuild_sdcard_updateimg() 116*4882a593Smuzhiyun{ 117*4882a593Smuzhiyun check_config RK_AB_UPDATE RK_AB_UPDATE_SDCARD || return 0 118*4882a593Smuzhiyun 119*4882a593Smuzhiyun echo "Make A/B update image for SDcard" 120*4882a593Smuzhiyun 121*4882a593Smuzhiyun build_updateimg "$RK_FIRMWARE_DIR/update_sdcard.img" sdcard 122*4882a593Smuzhiyun 123*4882a593Smuzhiyun finish_build 124*4882a593Smuzhiyun} 125*4882a593Smuzhiyun 126*4882a593Smuzhiyunbuild_ab_updateimg() 127*4882a593Smuzhiyun{ 128*4882a593Smuzhiyun check_config RK_AB_UPDATE || return 0 129*4882a593Smuzhiyun 130*4882a593Smuzhiyun build_ota_updateimg 131*4882a593Smuzhiyun build_sdcard_updateimg 132*4882a593Smuzhiyun 133*4882a593Smuzhiyun echo "Make A/B update image" 134*4882a593Smuzhiyun 135*4882a593Smuzhiyun build_updateimg "$RK_FIRMWARE_DIR/update_ab.img" ab 136*4882a593Smuzhiyun 137*4882a593Smuzhiyun finish_build 138*4882a593Smuzhiyun} 139*4882a593Smuzhiyun 140*4882a593Smuzhiyun# Hooks 141*4882a593Smuzhiyun 142*4882a593Smuzhiyunusage_hook() 143*4882a593Smuzhiyun{ 144*4882a593Smuzhiyun echo -e "updateimg \tbuild update image" 145*4882a593Smuzhiyun echo -e "otapackage \tbuild A/B OTA update image" 146*4882a593Smuzhiyun echo -e "sdpackage \tbuild A/B SDcard update image" 147*4882a593Smuzhiyun} 148*4882a593Smuzhiyun 149*4882a593Smuzhiyunclean_hook() 150*4882a593Smuzhiyun{ 151*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/update" 152*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/ota" 153*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/sdcard" 154*4882a593Smuzhiyun rm -rf "$RK_OUTDIR/ab" 155*4882a593Smuzhiyun rm -rf "$RK_FIRMWARE_DIR/*update.img" 156*4882a593Smuzhiyun} 157*4882a593Smuzhiyun 158*4882a593SmuzhiyunPOST_BUILD_CMDS="updateimg otapackage sdpackage" 159*4882a593Smuzhiyunpost_build_hook() 160*4882a593Smuzhiyun{ 161*4882a593Smuzhiyun case "$1" in 162*4882a593Smuzhiyun updateimg) 163*4882a593Smuzhiyun if [ "$RK_AB_UPDATE" ]; then 164*4882a593Smuzhiyun build_ab_updateimg 165*4882a593Smuzhiyun else 166*4882a593Smuzhiyun build_updateimg 167*4882a593Smuzhiyun fi 168*4882a593Smuzhiyun ;; 169*4882a593Smuzhiyun otapackage) build_ota_updateimg ;; 170*4882a593Smuzhiyun sdpackage) build_sdcard_updateimg ;; 171*4882a593Smuzhiyun *) usage ;; 172*4882a593Smuzhiyun esac 173*4882a593Smuzhiyun} 174*4882a593Smuzhiyun 175*4882a593Smuzhiyunsource "${BUILD_HELPER:-$(dirname "$(realpath "$0")")/../build-hooks/build-helper}" 176*4882a593Smuzhiyun 177*4882a593Smuzhiyunpost_build_hook ${@:-updateimg} 178