diff --git a/META-INF/com/google/android/updater-script b/META-INF/com/google/android/updater-script index 3ea995c..8f5b523 100644 --- a/META-INF/com/google/android/updater-script +++ b/META-INF/com/google/android/updater-script @@ -3,4 +3,4 @@ # Dummy file; update-binary is a shell script (DO NOT CHANGE) # # -# AK_BASE_VERSION=20260628 +# AK_BASE_VERSION=20260704 diff --git a/tools/ak3-core.sh b/tools/ak3-core.sh index d9d8f41..43baccb 100755 --- a/tools/ak3-core.sh +++ b/tools/ak3-core.sh @@ -10,6 +10,7 @@ BIN=$AKHOME/tools; PATCH=$AKHOME/patch; RAMDISK=$AKHOME/ramdisk; SPLITIMG=$AKHOME/split_img; +VENDORRD=$AKHOME/vendor_ramdisk; ### output/testing functions: # ui_print "" [...] @@ -143,7 +144,7 @@ split_boot() { # unpack_ramdisk (extract ramdisk only) unpack_ramdisk() { - local comp; + local comp cpio vndrname; cd $SPLITIMG; if [ -f ramdisk.cpio.gz ]; then @@ -155,32 +156,62 @@ unpack_ramdisk() { fi; if [ -f ramdisk.cpio ]; then + [ -d $RAMDISK ] && mv -f $RAMDISK $AKHOME/rdtmp; + comp=$(magiskboot decompress ramdisk.cpio 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p'); + if [ "$comp" ]; then + mv -f ramdisk.cpio ramdisk.cpio.$comp; + magiskboot decompress ramdisk.cpio.$comp ramdisk.cpio; + if [ $? != 0 ] && $comp --help 2>/dev/null; then + echo "Attempting ramdisk unpack with busybox $comp..." >&2; + $comp -dc ramdisk.cpio.$comp > ramdisk.cpio; + fi; + fi; + + mkdir -p $RAMDISK; + chmod 755 $RAMDISK; + + cd $RAMDISK; + EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $SPLITIMG/ramdisk.cpio -i; + if [ $? != 0 -o ! "$(ls)" ]; then + abort "Unpacking ramdisk failed. Aborting..."; + fi; + if [ -d "$AKHOME/rdtmp" ]; then + cp -af $AKHOME/rdtmp/* .; + fi; + elif [ -d vendor_ramdisk ]; then + [ -d $VENDORRD ] && mv -f $VENDORRD $AKHOME/vrdtmp; + + for cpio in vendor_ramdisk/*.cpio; do + comp=$(magiskboot decompress $cpio 2>&1 | grep -v 'raw' | sed -n 's;.*\[\(.*\)\];\1;p'); + if [ "$comp" ]; then + mv -f $cpio $cpio.$comp; + magiskboot decompress $cpio.$comp $cpio; + if [ $? != 0 ] && $comp --help 2>/dev/null; then + echo "Attempting $cpio unpack with busybox $comp..." >&2; + $comp -dc $cpio.$comp > $cpio; + fi; + fi; + + vndrname=$(basename $cpio .cpio); + mkdir -p $VENDORRD/$vndrname; + chmod 755 $VENDORRD/$vndrname; + + cd $VENDORRD/$vndrname; + EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $SPLITIMG/$cpio -i; + if [ $? != 0 -o ! "$(ls)" ]; then + abort "Unpacking vendor ramdisk \"$vndrname\" failed. Aborting..."; + fi; + if [ -d "$AKHOME/vrdtmp/$vndrname" ]; then + cp -af $AKHOME/vrdtmp/$vndrname/* .; + fi; + done; + cd $VENDORRD; else abort "No ramdisk found to unpack. Aborting..."; fi; - if [ "$comp" ]; then - mv -f ramdisk.cpio ramdisk.cpio.$comp; - magiskboot decompress ramdisk.cpio.$comp ramdisk.cpio; - if [ $? != 0 ] && $comp --help 2>/dev/null; then - echo "Attempting ramdisk unpack with busybox $comp..." >&2; - $comp -dc ramdisk.cpio.$comp > ramdisk.cpio; - fi; - fi; - - [ -d $RAMDISK ] && mv -f $RAMDISK $AKHOME/rdtmp; - mkdir -p $RAMDISK; - chmod 755 $RAMDISK; - - cd $RAMDISK; - EXTRACT_UNSAFE_SYMLINKS=1 cpio -d -F $SPLITIMG/ramdisk.cpio -i; - if [ $? != 0 -o ! "$(ls)" ]; then - abort "Unpacking ramdisk failed. Aborting..."; - fi; - if [ -d "$AKHOME/rdtmp" ]; then - cp -af $AKHOME/rdtmp/* .; - fi; } + ### dump_boot (dump and split image, then extract ramdisk) dump_boot() { split_boot; @@ -191,7 +222,7 @@ dump_boot() { ### write_boot functions: # repack_ramdisk (repack ramdisk only) repack_ramdisk() { - local comp packfail mtktype; + local comp packfail vndrname cpio mtktype; cd $AKHOME; if [ "$RAMDISK_COMPRESSION" != "auto" ] && [ "$(grep HEADER_VER $SPLITIMG/infotmp | sed -n 's;.*\[\(.*\)\];\1;p')" -gt 3 ]; then @@ -199,7 +230,7 @@ repack_ramdisk() { RAMDISK_COMPRESSION=auto; fi; case $RAMDISK_COMPRESSION in - auto|"") comp=$(ls $SPLITIMG/ramdisk.cpio.* 2>/dev/null | grep -v 'mtk' | rev | cut -d. -f1 | rev);; + auto|"") comp=$(ls $SPLITIMG/ramdisk.cpio.* $SPLITIMG/vendor_ramdisk/ramdisk.cpio.* 2>/dev/null | tail -n1 | grep -v 'mtk' | rev | cut -d. -f1 | rev);; none|cpio) comp="";; gz) comp=gzip;; lzo) comp=lzop;; @@ -208,13 +239,26 @@ repack_ramdisk() { *) comp=$RAMDISK_COMPRESSION;; esac; - if [ -f "$BIN/mkbootfs" ]; then - mkbootfs $RAMDISK > ramdisk-new.cpio; - else - cd $RAMDISK; - find . | cpio -H newc -o > $AKHOME/ramdisk-new.cpio; + if [ -f $SPLITIMG/ramdisk.cpio ]; then + if [ -f "$BIN/mkbootfs" ]; then + mkbootfs $RAMDISK > ramdisk-new.cpio; + else + cd $RAMDISK; + find . | cpio -H newc -o > $AKHOME/ramdisk-new.cpio; + fi; + [ $? != 0 ] && packfail=1; + elif [ -d $SPLITIMG/vendor_ramdisk ]; then + cd $VENDORRD; + for vndrname in *; do + if [ -f "$BIN/mkbootfs" ]; then + mkbootfs $vndrname > $AKHOME/$vndrname-new.cpio; + else + cd $VENDORRD/$vndrname; + find . | cpio -H newc -o > $AKHOME/$vndrname-new.cpio; + fi; + [ $? != 0 ] && packfail=1; + done; fi; - [ $? != 0 ] && packfail=1; cd $AKHOME; if [ ! "$NO_MAGISK_CHECK" ]; then @@ -223,13 +267,15 @@ repack_ramdisk() { fi; [ "$magisk_patched" == 1 ] && magiskboot cpio ramdisk-new.cpio "extract .backup/.magisk $SPLITIMG/.magisk"; if [ "$comp" ]; then - magiskboot compress=$comp ramdisk-new.cpio; - if [ $? != 0 ] && $comp --help 2>/dev/null; then - echo "Attempting ramdisk repack with busybox $comp..." >&2; - $comp -9c ramdisk-new.cpio > ramdisk-new.cpio.$comp; - [ $? != 0 ] && packfail=1; - rm -f ramdisk-new.cpio; - fi; + for cpio in *-new.cpio; do + magiskboot compress=$comp $cpio; + if [ $? != 0 ] && $comp --help 2>/dev/null; then + echo "Attempting $cpio repack with busybox $comp..." >&2; + $comp -9c $cpio > $cpio.$comp; + [ $? != 0 ] && packfail=1; + rm -f $cpio; + fi; + done; fi; if [ "$packfail" ]; then abort "Repacking ramdisk failed. Aborting..."; @@ -245,7 +291,7 @@ repack_ramdisk() { # flash_boot (build, sign and write image only) flash_boot() { - local varlist i kernel ramdisk fdt cmdline comp part0 part1 needskernelpatch nocompflag signfail pk8 cert avbtype; + local varlist i kernel ramdisk fdt cmdline comp part0 part1 vndrname needskernelpatch nocompflag signfail pk8 cert avbtype; cd $SPLITIMG; if [ -f "$BIN/mkimage" ]; then @@ -316,6 +362,12 @@ flash_boot() { else [ "$kernel" ] && cp -f $kernel kernel; [ "$ramdisk" ] && cp -f $ramdisk ramdisk.cpio; + if [ -d vendor_ramdisk ]; then + for i in vendor_ramdisk/*.cpio; do + vndrname=$(basename $i .cpio); + cp -f $AKHOME/$vndrname-new.cpio vendor_ramdisk/$vndrname.cpio; + done; + fi; [ "$dt" -a -f extra ] && cp -f $dt extra; for i in dtb recovery_dtbo; do [ "$(eval echo \$$i)" -a -f $i ] && cp -f $(eval echo \$$i) $i; @@ -387,7 +439,7 @@ flash_boot() { *-dtb) rm -f kernel_dtb;; esac; fi; - unset magisk_patched KEEPVERITY KEEPFORCEENCRYPT RECOVERYMODE PREINITDEVICE SHA1 RANDOMSEED; # leave PATCHVBMETAFLAG set for repack + unset magisk_patched KEEPVERITY KEEPFORCEENCRYPT RECOVERYMODE VENDORBOOT PREINITDEVICE SHA1 RANDOMSEED; # leave PATCHVBMETAFLAG set for repack ;; esac; case $RAMDISK_COMPRESSION in @@ -568,8 +620,6 @@ flash_generic() { write_boot() { repack_ramdisk; flash_boot; - flash_generic vendor_boot; # temporary until hdr v4 can be unpacked/repacked fully by magiskboot - flash_generic vendor_kernel_boot; # temporary until hdr v4 can be unpacked/repacked fully by magiskboot flash_generic vendor_dlkm; flash_generic system_dlkm; flash_generic dtbo; @@ -791,13 +841,14 @@ reset_ak() { [ -f $i ] && rm -f $AKHOME/$(basename $i); done; fi; - [ -d $SPLITIMG ] && rm -rf $RAMDISK; + [ -d $SPLITIMG ] && rm -rf $RAMDISK $VENDORRD; rm -rf $BOOTIMG $SPLITIMG $AKHOME/*-new* $AKHOME/*-files/current; if [ "$1" == "keep" ]; then [ -d $AKHOME/rdtmp ] && mv -f $AKHOME/rdtmp $RAMDISK; + [ -d $AKHOME/vrdtmp ] && mv -f $AKHOME/vrdtmp $VENDORRD; else - rm -rf $PATCH $AKHOME/rdtmp; + rm -rf $PATCH $AKHOME/rdtmp $AKHOME/vrdtmp; fi; if [ ! "$NO_BLOCK_DISPLAY" ]; then ui_print " "; @@ -844,7 +895,7 @@ setup_ak() { rm -f modules/system/lib/modules/placeholder patch/placeholder ramdisk/placeholder; rmdir -p modules patch ramdisk 2>/dev/null; - # automate simple multi-partition setup for hdr_v4 boot + init_boot + vendor_kernel_boot (for dtb only until magiskboot supports hdr v4 vendor_ramdisk unpack/repack) + # automate simple multi-partition setup for hdr_v4 boot + init_boot + vendor_kernel_boot if [ -e "/dev/block/bootdevice/by-name/init_boot$SLOT" -a -e "/dev/block/bootdevice/by-name/vendor_kernel_boot$SLOT" -a ! -f init_v4_setup ] && [ -f dtb -o -d vendor_ramdisk -o -d vendor_patch ]; then echo "Setting up for simple automatic init_boot flashing..." >&2; (mkdir boot-files; @@ -853,17 +904,17 @@ setup_ak() { mv -f ramdisk patch init_boot-files; mkdir vendor_kernel_boot-files; mv -f dtb vendor_kernel_boot-files; - mv -f vendor_ramdisk vendor_kernel_boot-files/ramdisk; + mv -f vendor_ramdisk vendor_kernel_boot-files/vendor_ramdisk; mv -f vendor_patch vendor_kernel_boot-files/patch) 2>/dev/null; touch init_v4_setup; - # automate simple multi-partition setup for hdr_v3+ boot + vendor_boot with dtb/dlkm (for v3 only until magiskboot supports hdr v4 vendor_ramdisk unpack/repack) + # automate simple multi-partition setup for hdr_v3+ boot + vendor_boot with dtb/dlkm elif [ -e "/dev/block/bootdevice/by-name/vendor_boot$SLOT" -a ! -f vendor_v3_setup ] && [ -f dtb -o -d vendor_ramdisk -o -d vendor_patch ]; then echo "Setting up for simple automatic vendor_boot flashing..." >&2; (mkdir boot-files; mv -f Image* ramdisk patch boot-files; mkdir vendor_boot-files; mv -f dtb vendor_boot-files; - mv -f vendor_ramdisk vendor_boot-files/ramdisk; + mv -f vendor_ramdisk vendor_boot-files/vendor_ramdisk; mv -f vendor_patch vendor_boot-files/patch) 2>/dev/null; touch vendor_v3_setup; fi;