AK2: add "OG AK" mode by making the unpack/repack procedure more granular
- split dump_boot into split_boot + unpack_ramdisk and write_boot into repack_ramdisk + flash_boot - fully backwards compatible as dump_boot and write_boot still exist and call these new functions (i.e. no changes needed to anykernel.sh) - those that wish to do zImage-only AK2 packages can now use split_boot intead of dump_boot and and flash_boot instead of repack_ramdisk in their anykernel.sh - add failsafe check for failed boot-new.img creation to ensure abort before wiping target partition in edge cases
This commit is contained in:
1 parent
13f2018ee3
commit
7f47e21362
1 file changed
+59
-35
+59
-35
@@ -17,7 +17,7 @@ ui_print() { echo -e "ui_print $1\nui_print" > $OUTFD; }
|
||||
contains() { test "${1#*$2}" != "$1" && return 0 || return 1; }
|
||||
|
||||
# dump boot and extract ramdisk
|
||||
dump_boot() {
|
||||
split_boot() {
|
||||
if [ ! -e "$(echo $block | cut -d\ -f1)" ]; then
|
||||
ui_print " "; ui_print "Invalid partition. Aborting..."; exit 1;
|
||||
fi;
|
||||
@@ -61,10 +61,6 @@ dump_boot() {
|
||||
if [ $? != 0 -o "$dumpfail" ]; then
|
||||
ui_print " "; ui_print "Dumping/splitting image failed. Aborting..."; exit 1;
|
||||
fi;
|
||||
if [ -f "$bin/mkmtkhdr" ]; then
|
||||
dd bs=512 skip=1 conv=notrunc if=$split_img/boot.img-ramdisk.gz of=$split_img/temprd;
|
||||
mv -f $split_img/temprd $split_img/boot.img-ramdisk.gz;
|
||||
fi;
|
||||
if [ -f "$bin/unpackelf" -a -f "$split_img/boot.img-dtb" ]; then
|
||||
case $(od -ta -An -N4 $split_img/boot.img-dtb | sed -e 's/del //' -e 's/ //g') in
|
||||
QCDT|ELF) ;;
|
||||
@@ -74,6 +70,12 @@ dump_boot() {
|
||||
rm -f $split_img/boot.img-dtb;;
|
||||
esac;
|
||||
fi;
|
||||
}
|
||||
unpack_ramdisk() {
|
||||
if [ -f "$bin/mkmtkhdr" ]; then
|
||||
dd bs=512 skip=1 conv=notrunc if=$split_img/boot.img-ramdisk.gz of=$split_img/temprd;
|
||||
mv -f $split_img/temprd $split_img/boot.img-ramdisk.gz;
|
||||
fi;
|
||||
mv -f $ramdisk /tmp/anykernel/rdtmp;
|
||||
case $(od -ta -An -N4 $split_img/boot.img-ramdisk.gz) in
|
||||
' us vt'*|' us rs'*) compext="gz"; unpackcmd="gzip";;
|
||||
@@ -95,9 +97,42 @@ dump_boot() {
|
||||
fi;
|
||||
test ! -z "$(ls /tmp/anykernel/rdtmp)" && cp -af /tmp/anykernel/rdtmp/* $ramdisk;
|
||||
}
|
||||
dump_boot() {
|
||||
split_boot;
|
||||
unpack_ramdisk;
|
||||
}
|
||||
|
||||
# repack ramdisk then build and write image
|
||||
write_boot() {
|
||||
repack_ramdisk() {
|
||||
case $ramdisk_compression in
|
||||
auto|"") compext=`echo $split_img/*-ramdisk.cpio.* | rev | cut -d. -f1 | rev`;;
|
||||
*) compext=$ramdisk_compression;;
|
||||
esac;
|
||||
case $compext in
|
||||
gz) repackcmd="gzip";;
|
||||
lzo) repackcmd="lzo";;
|
||||
lzma) repackcmd="$bin/xz -Flzma";;
|
||||
xz) repackcmd="$bin/xz -Ccrc32";;
|
||||
bz2) repackcmd="bzip2";;
|
||||
lz4-l) repackcmd="$bin/lz4 -l";;
|
||||
lz4) repackcmd="$bin/lz4";;
|
||||
esac;
|
||||
if [ -f "$bin/mkbootfs" ]; then
|
||||
$bin/mkbootfs $ramdisk | $repackcmd -9c > /tmp/anykernel/ramdisk-new.cpio.$compext;
|
||||
else
|
||||
cd $ramdisk;
|
||||
find . | cpio -H newc -o | $repackcmd -9c > /tmp/anykernel/ramdisk-new.cpio.$compext;
|
||||
fi;
|
||||
if [ $? != 0 ]; then
|
||||
ui_print " "; ui_print "Repacking ramdisk failed. Aborting..."; exit 1;
|
||||
fi;
|
||||
cd /tmp/anykernel;
|
||||
if [ -f "$bin/mkmtkhdr" ]; then
|
||||
$bin/mkmtkhdr --rootfs ramdisk-new.cpio.$compext;
|
||||
mv -f ramdisk-new.cpio.$compext-mtk ramdisk-new.cpio.$compext;
|
||||
fi;
|
||||
}
|
||||
flash_boot() {
|
||||
cd $split_img;
|
||||
if [ -f "$bin/mkimage" ]; then
|
||||
name=`cat *-name`;
|
||||
@@ -153,6 +188,12 @@ write_boot() {
|
||||
kernel=`ls *-zImage`;
|
||||
kernel=$split_img/$kernel;
|
||||
fi;
|
||||
if [ -f /tmp/anykernel/ramdisk-new.cpio.$compext ]; then
|
||||
rd=/tmp/anykernel/ramdisk-new.cpio.$compext;
|
||||
else
|
||||
rd=`ls *-ramdisk.*`;
|
||||
rd="$split_img/$rd";
|
||||
fi;
|
||||
for i in dtb dt.img; do
|
||||
if [ -f /tmp/anykernel/$i ]; then
|
||||
dtb="--dt /tmp/anykernel/$i";
|
||||
@@ -163,49 +204,25 @@ write_boot() {
|
||||
dtb=`ls *-dtb`;
|
||||
dtb="--dt $split_img/$dtb";
|
||||
fi;
|
||||
case $ramdisk_compression in
|
||||
auto|"") compext=`echo $split_img/boot.img-ramdisk.cpio.* | rev | cut -d. -f1 | rev`;;
|
||||
*) compext=$ramdisk_compression;;
|
||||
esac;
|
||||
case $compext in
|
||||
gz) repackcmd="gzip";;
|
||||
lzo) repackcmd="lzo";;
|
||||
lzma) repackcmd="$bin/xz -Flzma";;
|
||||
xz) repackcmd="$bin/xz -Ccrc32";;
|
||||
bz2) repackcmd="bzip2";;
|
||||
lz4-l) repackcmd="$bin/lz4 -l";;
|
||||
lz4) repackcmd="$bin/lz4";;
|
||||
esac;
|
||||
if [ -f "$bin/mkbootfs" ]; then
|
||||
$bin/mkbootfs $ramdisk | $repackcmd -9c > /tmp/anykernel/ramdisk-new.cpio.$compext;
|
||||
else
|
||||
cd $ramdisk;
|
||||
find . | cpio -H newc -o | $repackcmd -9c > /tmp/anykernel/ramdisk-new.cpio.$compext;
|
||||
fi;
|
||||
if [ $? != 0 ]; then
|
||||
ui_print " "; ui_print "Repacking ramdisk failed. Aborting..."; exit 1;
|
||||
fi;
|
||||
cd /tmp/anykernel;
|
||||
if [ -f "$bin/mkmtkhdr" ]; then
|
||||
$bin/mkmtkhdr --rootfs ramdisk-new.cpio.$compext;
|
||||
mv -f ramdisk-new.cpio.$compext-mtk ramdisk-new.cpio.$compext;
|
||||
case $kernel in
|
||||
$split_img/*) ;;
|
||||
*) $bin/mkmtkhdr --kernel $kernel; kernel=$kernel-mtk;;
|
||||
esac;
|
||||
fi;
|
||||
if [ -f "$bin/mkimage" ]; then
|
||||
$bin/mkimage -A $arch -O $os -T $type -C $comp -a $addr -e $ep -n "$name" -d $kernel:ramdisk-new.cpio.$compext boot-new.img;
|
||||
$bin/mkimage -A $arch -O $os -T $type -C $comp -a $addr -e $ep -n "$name" -d $kernel:$rd boot-new.img;
|
||||
elif [ -f "$bin/rkcrc" ]; then
|
||||
$bin/rkcrc -k ramdisk-new.cpio.$compext boot-new.img;
|
||||
$bin/rkcrc -k $rd boot-new.img;
|
||||
elif [ -f "$bin/pxa-mkbootimg" ]; then
|
||||
$bin/pxa-mkbootimg --kernel $kernel --ramdisk ramdisk-new.cpio.$compext $second --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff $secondoff --tags_offset "$tagsoff" --unknown $unknown $dtb --output boot-new.img;
|
||||
$bin/pxa-mkbootimg --kernel $kernel --ramdisk $rd $second --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff $secondoff --tags_offset "$tagsoff" --unknown $unknown $dtb --output boot-new.img;
|
||||
else
|
||||
$bin/mkbootimg --kernel $kernel --ramdisk ramdisk-new.cpio.$compext $second --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff $secondoff --tags_offset "$tagsoff" --os_version "$osver" --os_patch_level "$oslvl" $hash $dtb --output boot-new.img;
|
||||
$bin/mkbootimg --kernel $kernel --ramdisk $rd $second --cmdline "$cmdline" --board "$board" --base $base --pagesize $pagesize --kernel_offset $kerneloff --ramdisk_offset $ramdiskoff $secondoff --tags_offset "$tagsoff" --os_version "$osver" --os_patch_level "$oslvl" $hash $dtb --output boot-new.img;
|
||||
fi;
|
||||
if [ $? != 0 ]; then
|
||||
ui_print " "; ui_print "Repacking image failed. Aborting..."; exit 1;
|
||||
elif [ `wc -c < boot-new.img` -gt `wc -c < boot.img` ]; then
|
||||
elif [ "$(wc -c < boot-new.img)" -gt "$(wc -c < boot.img)" ]; then
|
||||
ui_print " "; ui_print "New image larger than boot partition. Aborting..."; exit 1;
|
||||
fi;
|
||||
if [ -f "$bin/futility" -a -d "$bin/chromeos" ]; then
|
||||
@@ -261,6 +278,9 @@ write_boot() {
|
||||
cat $split_img/boot.img-master_boot.key boot-new.img > boot-new-signed.img;
|
||||
mv -f boot-new-signed.img boot-new.img;
|
||||
fi;
|
||||
if [ ! -f /tmp/anykernel/boot-new.img ]; then
|
||||
ui_print " "; ui_print "Repacked image could not be found. Aborting..."; exit 1;
|
||||
fi;
|
||||
if [ -f "$bin/flash_erase" -a -f "$bin/nandwrite" ]; then
|
||||
$bin/flash_erase $block 0 0;
|
||||
$bin/nandwrite -p $block /tmp/anykernel/boot-new.img;
|
||||
@@ -288,6 +308,10 @@ write_boot() {
|
||||
fi;
|
||||
fi;
|
||||
}
|
||||
write_boot() {
|
||||
repack_ramdisk;
|
||||
flash_boot;
|
||||
}
|
||||
|
||||
# backup_file <file>
|
||||
backup_file() { test ! -f $1~ && cp $1 $1~; }
|
||||
|
||||
Reference in new issue
Block a user