Openwrt/target/linux/bcm63xx/base-files/lib/upgrade/platform.sh
Daniel González Cabanelas e3eaf52ba3 bcm63xx: use the generic nand upgrade on Sercomm devices
The Sercomm devices don't need the jffs2 cleanmarkers for the kernel
partition. With the stock firmware they are only added when the
bootloader partition is upgraded.

Furthermore, on the Sercomm H500-s, the specific cfe_jffs2_upgrade_tar
function causes OOB corruption. As a result of this, combined with the
nature of the mtdsplit driver, the upgrade procedure ends in a bricked
device.

Use the generic nand_do_upgrade provided by the OpenWrt common functions.

Signed-off-by: Daniel González Cabanelas <dgcbueu@gmail.com>
2020-06-16 14:55:02 +02:00

88 lines
1.9 KiB
Bash

PART_NAME=linux
REQUIRE_IMAGE_METADATA=0
platform_check_image() {
[ "$#" -gt 1 ] && return 1
case "$(board_name)" in
comtrend,vg-8050|\
comtrend,vr-3032u|\
huawei,hg253s-v2|\
netgear,dgnd3700-v2|\
sercomm,ad1018|\
sercomm,h500-s-lowi|\
sercomm,h500-s-vfes)
# NAND sysupgrade
return 0
;;
esac
case "$(get_magic_word "$1")" in
3600|3700|3800)
# CFE tag versions
return 0
;;
*)
echo "Invalid image type. Please use only .bin files"
return 1
;;
esac
}
cfe_jffs2_upgrade_tar() {
local tar_file="$1"
local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
if [ -z "$kernel_mtd" ]; then
echo "$CI_KERNPART partition not found"
return 1
fi
local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
board_dir=${board_dir%/}
local kernel_length=$(tar xf $tar_file ${board_dir}/kernel -O | wc -c 2> /dev/null)
local rootfs_length=$(tar xf $tar_file ${board_dir}/root -O | wc -c 2> /dev/null)
if [ "$kernel_length" = 0 ]; then
echo "kernel cannot be empty"
return 1
fi
flash_erase -j /dev/mtd${kernel_mtd} 0 0
tar xf $tar_file ${board_dir}/kernel -O | nandwrite /dev/mtd${kernel_mtd} -
local rootfs_type="$(identify_tar "$tar_file" ${board_dir}/root)"
nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "0" "0"
local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
tar xf $tar_file ${board_dir}/root -O | \
ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
nand_do_upgrade_success
}
platform_do_upgrade() {
case "$(board_name)" in
comtrend,vg-8050|\
comtrend,vr-3032u|\
huawei,hg253s-v2|\
netgear,dgnd3700-v2)
REQUIRE_IMAGE_METADATA=1
cfe_jffs2_upgrade_tar "$1"
;;
sercomm,ad1018|\
sercomm,h500-s-lowi|\
sercomm,h500-s-vfes)
REQUIRE_IMAGE_METADATA=1
nand_do_upgrade "$1"
;;
*)
default_do_upgrade "$1"
;;
esac
}