Files
multirom_m86/install_zip/prebuilt-uninstaller/scripts/clear_boot.sh
2015-03-03 20:00:33 +01:00

105 lines
2.2 KiB
Bash

#!/sbin/sh
BUSYBOX="/tmp/busybox"
LZ4="/tmp/lz4"
BOOT_DEV="$(cat /tmp/bootdev)"
RD_ADDR="$(cat /tmp/rd_addr)"
CMPR_GZIP=0
CMPR_LZ4=1
if [ ! -e "$BOOT_DEV" ]; then
echo "BOOT_DEV \"$BOOT_DEV\" does not exist!"
return 1
fi
dd if=$BOOT_DEV of=/tmp/boot.img
/tmp/bbootimg -x /tmp/boot.img /tmp/bootimg.cfg /tmp/zImage /tmp/initrd.img /tmp/second.img /tmp/dtb.img
if [ ! -f /tmp/zImage ] ; then
echo "Failed to extract boot.img"
return 1
fi
rm -r /tmp/boot
mkdir /tmp/boot
cd /tmp/boot
rd_cmpr=-1
magic=$($BUSYBOX hexdump -n 4 -v -e '/1 "%02X"' "../initrd.img")
case "$magic" in
1F8B*) # GZIP
$BUSYBOX gzip -d -c "../initrd.img" | $BUSYBOX cpio -i
rd_cmpr=CMPR_GZIP;
;;
02214C18) # LZ4
$LZ4 -d "../initrd.img" stdout | $BUSYBOX cpio -i
rd_cmpr=CMPR_LZ4;
;;
*)
echo "invalid ramdisk magic $magic"
;;
esac
if [ rd_cmpr == -1 ] || [ ! -f /tmp/boot/init ] ; then
echo "Failed to extract ramdisk!"
return 1
fi
# restore init
if [ -e /tmp/boot/main_init ] ; then
rm /tmp/boot/init
mv /tmp/boot/main_init /tmp/boot/init
fi
chmod 750 /tmp/boot/init
# restore ueventd and watchdogd symlink
if [ -L /tmp/boot/sbin/ueventd ] ; then
ln -sf ../init /tmp/boot/sbin/ueventd
fi
if [ -L /tmp/boot/sbin/watchdogd ] ; then
ln -sf ../init /tmp/boot/sbin/watchdogd
fi
if [ -e /tmp/boot/mrom.fstab ] ; then
rm /tmp/boot/mrom.fstab
fi
# Remove encryption files
rm -rf /tmp/boot/mrom_enc
# pack the image again
cd /tmp/boot
case $rd_cmpr in
CMPR_GZIP)
find . | $BUSYBOX cpio -o -H newc | $BUSYBOX gzip > "../initrd.img"
;;
CMPR_LZ4)
find . | $BUSYBOX cpio -o -H newc | $LZ4 stdin "../initrd.img"
;;
esac
echo "bootsize = 0x0" >> /tmp/bootimg.cfg
if [ -n "$RD_ADDR" ]; then
echo "Using ramdisk addr $RD_ADDR"
echo "ramdiskaddr = $RD_ADDR" >> /tmp/bootimg.cfg
fi
cd /tmp
dtb_cmd=""
if [ -f "dtb.img" ]; then
dtb_cmd="-d dtb.img"
fi
/tmp/bbootimg --create newboot.img -f bootimg.cfg -k zImage -r initrd.img $dtb_cmd
if [ ! -e "/tmp/newboot.img" ] ; then
echo "Failed to inject boot.img!"
return 1
fi
echo "Writing new boot.img..."
dd bs=4096 if=/tmp/newboot.img of=$BOOT_DEV
return $?