mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-31 05:54:26 -04:00 
			
		
		
		
	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>
		
			
				
	
	
		
			88 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			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
 | |
| }
 |