 27c9d80f51
			
		
	
	27c9d80f51
	
	
		
			
	
		
	
	
		
			Some checks failed
		
		
	
	Build Kernel / Build all affected Kernels (push) Has been cancelled
				
			Build all core packages / Build all core packages for selected target (push) Has been cancelled
				
			Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
				
			Build Toolchains / Build Toolchains for each target (push) Has been cancelled
				
			Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
				
			Coverity scan build / Coverity x86/64 build (push) Has been cancelled
				
			
		
			
				
	
	
		
			125 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			125 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #
 | |
| # Copyright (C) 2016 lede-project.org
 | |
| #
 | |
| 
 | |
| zyxel_get_rootfs() {
 | |
| 	local rootfsdev
 | |
| 
 | |
| 	if read cmdline < /proc/cmdline; then
 | |
| 		case "$cmdline" in
 | |
| 			*root=*)
 | |
| 				rootfsdev="${cmdline##*root=}"
 | |
| 				rootfsdev="${rootfsdev%% *}"
 | |
| 			;;
 | |
| 		esac
 | |
| 
 | |
| 		echo "${rootfsdev}"
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| zyxel_do_flash() {
 | |
| 	local tar_file=$1
 | |
| 	local kernel=$2
 | |
| 	local rootfs=$3
 | |
| 	local dualflagmtd=$4
 | |
| 
 | |
| 	# keep sure its unbound
 | |
| 	losetup --detach-all || {
 | |
| 		echo Failed to detach all loop devices. Skip this try.
 | |
| 		reboot -f
 | |
| 	}
 | |
| 
 | |
| 	# use the first found directory in the tar archive
 | |
| 	local board_dir=$(tar tf $tar_file | grep -m 1 '^sysupgrade-.*/$')
 | |
| 	board_dir=${board_dir%/}
 | |
| 
 | |
| 	echo "flashing kernel to $kernel"
 | |
| 	tar xf $tar_file ${board_dir}/kernel -O >$kernel
 | |
| 
 | |
| 	echo "flashing rootfs to ${rootfs}"
 | |
| 	tar xf $tar_file ${board_dir}/root -O >"${rootfs}"
 | |
| 
 | |
| 	# a padded rootfs is needed for overlay fs creation
 | |
| 	local offset=$(tar xf $tar_file ${board_dir}/root -O | wc -c)
 | |
| 	[ $offset -lt 65536 ] && {
 | |
| 		echo Wrong size for rootfs: $offset
 | |
| 		sleep 10
 | |
| 		reboot -f
 | |
| 	}
 | |
| 
 | |
| 	# Mount loop for rootfs_data
 | |
| 	local loopdev="$(losetup -f)"
 | |
| 	losetup -o $offset $loopdev $rootfs || {
 | |
| 		echo "Failed to mount looped rootfs_data."
 | |
| 		sleep 10
 | |
| 		reboot -f
 | |
| 	}
 | |
| 
 | |
| 	echo "Format new rootfs_data at position ${offset}."
 | |
| 	mkfs.ext4 -F -L rootfs_data $loopdev
 | |
| 	mkdir /tmp/new_root
 | |
| 	mount -t ext4 $loopdev /tmp/new_root && {
 | |
| 		echo "Saving config to rootfs_data at position ${offset}."
 | |
| 		cp -v "$UPGRADE_BACKUP" "/tmp/new_root/$BACKUP_FILE"
 | |
| 		umount /tmp/new_root
 | |
| 	}
 | |
| 
 | |
| 	# flashing successful, toggle the dualflag
 | |
| 	case "$rootfs" in
 | |
| 		"/dev/mmcblk0p5")
 | |
| 			printf "\xff" >$dualflagmtd
 | |
| 			;;
 | |
| 		"/dev/mmcblk0p8")
 | |
| 			printf "\x01" >$dualflagmtd
 | |
| 			;;
 | |
| 	esac
 | |
| 
 | |
| 	# Cleanup
 | |
| 	losetup -d $loopdev >/dev/null 2>&1
 | |
| 	sync
 | |
| 	umount -a
 | |
| 	reboot -f
 | |
| }
 | |
| 
 | |
| zyxel_do_upgrade() {
 | |
| 	local tar_file="$1"
 | |
| 	local board=$(board_name)
 | |
| 	local rootfs="$(zyxel_get_rootfs)"
 | |
| 	local kernel=
 | |
| 
 | |
| 	[ -b "${rootfs}" ] || return 1
 | |
| 	case "$board" in
 | |
| 	zyxel,nbg6817)
 | |
| 		local dualflagmtd="$(find_mtd_part 0:dual_flag)"
 | |
| 		[ -b $dualflagmtd ] || return 1
 | |
| 
 | |
| 		case "$rootfs" in
 | |
| 			"/dev/mmcblk0p5")
 | |
| 				# booted from the primary partition set
 | |
| 				# write to the alternative set
 | |
| 				kernel="/dev/mmcblk0p7"
 | |
| 				rootfs="/dev/mmcblk0p8"
 | |
| 			;;
 | |
| 			"/dev/mmcblk0p8")
 | |
| 				# booted from the alternative partition set
 | |
| 				# write to the primary set
 | |
| 				kernel="/dev/mmcblk0p4"
 | |
| 				rootfs="/dev/mmcblk0p5"
 | |
| 			;;
 | |
| 			*)
 | |
| 				return 1
 | |
| 			;;
 | |
| 		esac
 | |
| 		;;
 | |
| 	*)
 | |
| 		return 1
 | |
| 		;;
 | |
| 	esac
 | |
| 
 | |
| 	zyxel_do_flash $tar_file $kernel $rootfs $dualflagmtd
 | |
| 
 | |
| 	nand_do_upgrade "$1"
 | |
| 
 | |
| 	return 0
 | |
| }
 |