AK3: full magiskboot VNDRBOOT v4 multi-ramdisk support

This commit is contained in:
osm0sis committed 2026-07-04 13:39:50 -03:00
1 parent cea8f976cd
commit 1c9a500dd4
2 files changed
+99 -48

No files matched your search

+1 -1
View File
@@ -3,4 +3,4 @@
# Dummy file; update-binary is a shell script (DO NOT CHANGE) # Dummy file; update-binary is a shell script (DO NOT CHANGE)
# #
# #
# AK_BASE_VERSION=20260628 # AK_BASE_VERSION=20260704
+98 -47
View File
@@ -10,6 +10,7 @@ BIN=$AKHOME/tools;
PATCH=$AKHOME/patch; PATCH=$AKHOME/patch;
RAMDISK=$AKHOME/ramdisk; RAMDISK=$AKHOME/ramdisk;
SPLITIMG=$AKHOME/split_img; SPLITIMG=$AKHOME/split_img;
VENDORRD=$AKHOME/vendor_ramdisk;
### output/testing functions: ### output/testing functions:
# ui_print "<text>" [...] # ui_print "<text>" [...]
@@ -143,7 +144,7 @@ split_boot() {
# unpack_ramdisk (extract ramdisk only) # unpack_ramdisk (extract ramdisk only)
unpack_ramdisk() { unpack_ramdisk() {
local comp; local comp cpio vndrname;
cd $SPLITIMG; cd $SPLITIMG;
if [ -f ramdisk.cpio.gz ]; then if [ -f ramdisk.cpio.gz ]; then
@@ -155,32 +156,62 @@ unpack_ramdisk() {
fi; fi;
if [ -f ramdisk.cpio ]; then 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'); 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 else
abort "No ramdisk found to unpack. Aborting..."; abort "No ramdisk found to unpack. Aborting...";
fi; 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 (dump and split image, then extract ramdisk)
dump_boot() { dump_boot() {
split_boot; split_boot;
@@ -191,7 +222,7 @@ dump_boot() {
### write_boot functions: ### write_boot functions:
# repack_ramdisk (repack ramdisk only) # repack_ramdisk (repack ramdisk only)
repack_ramdisk() { repack_ramdisk() {
local comp packfail mtktype; local comp packfail vndrname cpio mtktype;
cd $AKHOME; cd $AKHOME;
if [ "$RAMDISK_COMPRESSION" != "auto" ] && [ "$(grep HEADER_VER $SPLITIMG/infotmp | sed -n 's;.*\[\(.*\)\];\1;p')" -gt 3 ]; then 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; RAMDISK_COMPRESSION=auto;
fi; fi;
case $RAMDISK_COMPRESSION in 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="";; none|cpio) comp="";;
gz) comp=gzip;; gz) comp=gzip;;
lzo) comp=lzop;; lzo) comp=lzop;;
@@ -208,13 +239,26 @@ repack_ramdisk() {
*) comp=$RAMDISK_COMPRESSION;; *) comp=$RAMDISK_COMPRESSION;;
esac; esac;
if [ -f "$BIN/mkbootfs" ]; then if [ -f $SPLITIMG/ramdisk.cpio ]; then
mkbootfs $RAMDISK > ramdisk-new.cpio; if [ -f "$BIN/mkbootfs" ]; then
else mkbootfs $RAMDISK > ramdisk-new.cpio;
cd $RAMDISK; else
find . | cpio -H newc -o > $AKHOME/ramdisk-new.cpio; 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; fi;
[ $? != 0 ] && packfail=1;
cd $AKHOME; cd $AKHOME;
if [ ! "$NO_MAGISK_CHECK" ]; then if [ ! "$NO_MAGISK_CHECK" ]; then
@@ -223,13 +267,15 @@ repack_ramdisk() {
fi; fi;
[ "$magisk_patched" == 1 ] && magiskboot cpio ramdisk-new.cpio "extract .backup/.magisk $SPLITIMG/.magisk"; [ "$magisk_patched" == 1 ] && magiskboot cpio ramdisk-new.cpio "extract .backup/.magisk $SPLITIMG/.magisk";
if [ "$comp" ]; then if [ "$comp" ]; then
magiskboot compress=$comp ramdisk-new.cpio; for cpio in *-new.cpio; do
if [ $? != 0 ] && $comp --help 2>/dev/null; then magiskboot compress=$comp $cpio;
echo "Attempting ramdisk repack with busybox $comp..." >&2; if [ $? != 0 ] && $comp --help 2>/dev/null; then
$comp -9c ramdisk-new.cpio > ramdisk-new.cpio.$comp; echo "Attempting $cpio repack with busybox $comp..." >&2;
[ $? != 0 ] && packfail=1; $comp -9c $cpio > $cpio.$comp;
rm -f ramdisk-new.cpio; [ $? != 0 ] && packfail=1;
fi; rm -f $cpio;
fi;
done;
fi; fi;
if [ "$packfail" ]; then if [ "$packfail" ]; then
abort "Repacking ramdisk failed. Aborting..."; abort "Repacking ramdisk failed. Aborting...";
@@ -245,7 +291,7 @@ repack_ramdisk() {
# flash_boot (build, sign and write image only) # flash_boot (build, sign and write image only)
flash_boot() { 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; cd $SPLITIMG;
if [ -f "$BIN/mkimage" ]; then if [ -f "$BIN/mkimage" ]; then
@@ -316,6 +362,12 @@ flash_boot() {
else else
[ "$kernel" ] && cp -f $kernel kernel; [ "$kernel" ] && cp -f $kernel kernel;
[ "$ramdisk" ] && cp -f $ramdisk ramdisk.cpio; [ "$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; [ "$dt" -a -f extra ] && cp -f $dt extra;
for i in dtb recovery_dtbo; do for i in dtb recovery_dtbo; do
[ "$(eval echo \$$i)" -a -f $i ] && cp -f $(eval echo \$$i) $i; [ "$(eval echo \$$i)" -a -f $i ] && cp -f $(eval echo \$$i) $i;
@@ -387,7 +439,7 @@ flash_boot() {
*-dtb) rm -f kernel_dtb;; *-dtb) rm -f kernel_dtb;;
esac; esac;
fi; 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; esac;
case $RAMDISK_COMPRESSION in case $RAMDISK_COMPRESSION in
@@ -568,8 +620,6 @@ flash_generic() {
write_boot() { write_boot() {
repack_ramdisk; repack_ramdisk;
flash_boot; 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 vendor_dlkm;
flash_generic system_dlkm; flash_generic system_dlkm;
flash_generic dtbo; flash_generic dtbo;
@@ -791,13 +841,14 @@ reset_ak() {
[ -f $i ] && rm -f $AKHOME/$(basename $i); [ -f $i ] && rm -f $AKHOME/$(basename $i);
done; done;
fi; fi;
[ -d $SPLITIMG ] && rm -rf $RAMDISK; [ -d $SPLITIMG ] && rm -rf $RAMDISK $VENDORRD;
rm -rf $BOOTIMG $SPLITIMG $AKHOME/*-new* $AKHOME/*-files/current; rm -rf $BOOTIMG $SPLITIMG $AKHOME/*-new* $AKHOME/*-files/current;
if [ "$1" == "keep" ]; then if [ "$1" == "keep" ]; then
[ -d $AKHOME/rdtmp ] && mv -f $AKHOME/rdtmp $RAMDISK; [ -d $AKHOME/rdtmp ] && mv -f $AKHOME/rdtmp $RAMDISK;
[ -d $AKHOME/vrdtmp ] && mv -f $AKHOME/vrdtmp $VENDORRD;
else else
rm -rf $PATCH $AKHOME/rdtmp; rm -rf $PATCH $AKHOME/rdtmp $AKHOME/vrdtmp;
fi; fi;
if [ ! "$NO_BLOCK_DISPLAY" ]; then if [ ! "$NO_BLOCK_DISPLAY" ]; then
ui_print " "; ui_print " ";
@@ -844,7 +895,7 @@ setup_ak() {
rm -f modules/system/lib/modules/placeholder patch/placeholder ramdisk/placeholder; rm -f modules/system/lib/modules/placeholder patch/placeholder ramdisk/placeholder;
rmdir -p modules patch ramdisk 2>/dev/null; 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 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; echo "Setting up for simple automatic init_boot flashing..." >&2;
(mkdir boot-files; (mkdir boot-files;
@@ -853,17 +904,17 @@ setup_ak() {
mv -f ramdisk patch init_boot-files; mv -f ramdisk patch init_boot-files;
mkdir vendor_kernel_boot-files; mkdir vendor_kernel_boot-files;
mv -f dtb 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; mv -f vendor_patch vendor_kernel_boot-files/patch) 2>/dev/null;
touch init_v4_setup; 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 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; echo "Setting up for simple automatic vendor_boot flashing..." >&2;
(mkdir boot-files; (mkdir boot-files;
mv -f Image* ramdisk patch boot-files; mv -f Image* ramdisk patch boot-files;
mkdir vendor_boot-files; mkdir vendor_boot-files;
mv -f dtb 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; mv -f vendor_patch vendor_boot-files/patch) 2>/dev/null;
touch vendor_v3_setup; touch vendor_v3_setup;
fi; fi;