AK3: full magiskboot VNDRBOOT v4 multi-ramdisk support
This commit is contained in:
2 files changed
+99
-48
No files matched your search
@@ -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
@@ -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;
|
||||||
|
|||||||
Reference in new issue
Block a user