fad7c7ef8e
This is done as devices that use Heimdall flash to KERNEL instead of boot like in case of fastboot, plus devices with weird partitions can set the var in deviceinfo
66 lines
1.9 KiB
Bash
66 lines
1.9 KiB
Bash
#!/bin/ash
|
|
# shellcheck shell=dash
|
|
set -e
|
|
|
|
# Declare used deviceinfo variables to pass shellcheck
|
|
deviceinfo_append_dtb=""
|
|
|
|
# shellcheck disable=SC1091
|
|
. /etc/deviceinfo
|
|
|
|
# On A/B devices with bootloader cmdline ON this will return the slot suffix
|
|
# if booting with an alternate method which erases the stock bootloader cmdline
|
|
# this will be empty and the update will fail.
|
|
# https://source.android.com/devices/bootloader/updating#slots
|
|
# On non-A/B devices this will be empty
|
|
ab_get_slot() {
|
|
ab_slot_suffix=$(grep -o 'androidboot\.slot_suffix=..' /proc/cmdline | cut -d "=" -f2) || :
|
|
echo "$ab_slot_suffix"
|
|
}
|
|
|
|
# $1: partition to flash from deviceinfo
|
|
update_android_fastboot() {
|
|
BOOT_PART_SUFFIX=$(ab_get_slot) # Empty for non-A/B devices
|
|
BOOT_PARTITION=$(findfs PARTLABEL="$1${BOOT_PART_SUFFIX}")
|
|
echo "Flashing boot.img to '$1${BOOT_PART_SUFFIX}'"
|
|
dd if=/boot/boot.img of="$BOOT_PARTITION" bs=1M
|
|
}
|
|
|
|
update_android_split_kernel_initfs() {
|
|
KERNEL_PARTITION=$(findfs PARTLABEL="${deviceinfo_flash_heimdall_partition_kernel:?}")
|
|
INITFS_PARTITION=$(findfs PARTLABEL="${deviceinfo_flash_heimdall_partition_initfs:?}")
|
|
|
|
KERNEL="vmlinuz"
|
|
if [ "${deviceinfo_append_dtb}" = "true" ]; then
|
|
KERNEL="$KERNEL-dtb"
|
|
fi
|
|
|
|
echo "Flashing kernel ($KERNEL)..."
|
|
dd if=/boot/"$KERNEL" of="$KERNEL_PARTITION" bs=1M
|
|
|
|
echo "Flashing initramfs..."
|
|
gunzip -c /boot/initramfs | lzop | dd of="$INITFS_PARTITION" bs=1M
|
|
}
|
|
|
|
METHOD=${deviceinfo_flash_method:?}
|
|
case $METHOD in
|
|
fastboot)
|
|
update_android_fastboot "${flash_fastboot_partition_kernel:-boot}"
|
|
;;
|
|
heimdall-bootimg)
|
|
update_android_fastboot "${flash_heimdall_partition_kernel:-KERNEL}"
|
|
;;
|
|
heimdall-isorec)
|
|
update_android_split_kernel_initfs
|
|
;;
|
|
0xffff)
|
|
echo -n "No need to use this utility, since uboot loads the kernel directly from"
|
|
echo " the boot partition. Your kernel should be updated already."
|
|
exit 1
|
|
;;
|
|
*)
|
|
echo "Devices with flash method: $METHOD are not supported."
|
|
exit 1
|
|
;;
|
|
esac
|
|
echo "Done."
|