 e8a0c55909
			
		
	
	e8a0c55909
	
	
	
		
			
			Rootfs overlays get created at a ROOTDEV_OVERLAY_ALIGN (64KiB) alignment after the rootfs, but emmc_do_upgrade() is assuming it comes at the very next 512-byte sector. Suggested-by: Christian Lamparter <chunkeey@gmail.com> Signed-off-by: Brian Norris <computersforpeace@gmail.com> (move spaces around, mention fstools' libtoolfs) Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
		
			
				
	
	
		
			68 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| # Copyright (C) 2021 OpenWrt.org
 | |
| #
 | |
| 
 | |
| . /lib/functions.sh
 | |
| 
 | |
| emmc_upgrade_tar() {
 | |
| 	local tar_file="$1"
 | |
| 	[ "$CI_KERNPART" -a -z "$EMMC_KERN_DEV" ] && export EMMC_KERN_DEV="$(find_mmc_part $CI_KERNPART $CI_ROOTDEV)"
 | |
| 	[ "$CI_ROOTPART" -a -z "$EMMC_ROOT_DEV" ] && export EMMC_ROOT_DEV="$(find_mmc_part $CI_ROOTPART $CI_ROOTDEV)"
 | |
| 	[ "$CI_DATAPART" -a -z "$EMMC_DATA_DEV" ] && export EMMC_DATA_DEV="$(find_mmc_part $CI_DATAPART $CI_ROOTDEV)"
 | |
| 	local has_kernel
 | |
| 	local has_rootfs
 | |
| 	local board_dir=$(tar tf "$tar_file" | grep -m 1 '^sysupgrade-.*/$')
 | |
| 	board_dir=${board_dir%/}
 | |
| 
 | |
| 	tar tf "$tar_file" ${board_dir}/kernel 1>/dev/null 2>/dev/null && has_kernel=1
 | |
| 	tar tf "$tar_file" ${board_dir}/root 1>/dev/null 2>/dev/null && has_rootfs=1
 | |
| 
 | |
| 	[ "$has_kernel" = 1 -a "$EMMC_KERN_DEV" ] &&
 | |
| 		export EMMC_KERNEL_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/kernel -O | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
 | |
| 
 | |
| 	[ "$has_rootfs" = 1 -a "$EMMC_ROOT_DEV" ] && {
 | |
| 		export EMMC_ROOTFS_BLOCKS=$(($(tar xf "$tar_file" ${board_dir}/root -O | dd of="$EMMC_ROOT_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
 | |
| 		# Account for 64KiB ROOTDEV_OVERLAY_ALIGN in libfstools
 | |
| 		EMMC_ROOTFS_BLOCKS=$(((EMMC_ROOTFS_BLOCKS + 127) & ~127))
 | |
| 	}
 | |
| 
 | |
| 	if [ -z "$UPGRADE_BACKUP" ]; then
 | |
| 		if [ "$EMMC_DATA_DEV" ]; then
 | |
| 			dd if=/dev/zero of="$EMMC_DATA_DEV" bs=512 count=8
 | |
| 		elif [ "$EMMC_ROOTFS_BLOCKS" ]; then
 | |
| 			dd if=/dev/zero of="$EMMC_ROOT_DEV" bs=512 seek=$EMMC_ROOTFS_BLOCKS count=8
 | |
| 		elif [ "$EMMC_KERNEL_BLOCKS" ]; then
 | |
| 			dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS count=8
 | |
| 		fi
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| emmc_upgrade_fit() {
 | |
| 	local fit_file="$1"
 | |
| 	[ "$CI_KERNPART" -a -z "$EMMC_KERN_DEV" ] && export EMMC_KERN_DEV="$(find_mmc_part $CI_KERNPART $CI_ROOTDEV)"
 | |
| 
 | |
| 	if [ "$EMMC_KERN_DEV" ]; then
 | |
| 		export EMMC_KERNEL_BLOCKS=$(($(get_image "$fit_file" | fwtool -i /dev/null -T - | dd of="$EMMC_KERN_DEV" bs=512 2>&1 | grep "records out" | cut -d' ' -f1)))
 | |
| 
 | |
| 		[ -z "$UPGRADE_BACKUP" ] && dd if=/dev/zero of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS count=8
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| emmc_copy_config() {
 | |
| 	if [ "$EMMC_DATA_DEV" ]; then
 | |
| 		dd if="$UPGRADE_BACKUP" of="$EMMC_DATA_DEV" bs=512
 | |
| 	elif [ "$EMMC_ROOTFS_BLOCKS" ]; then
 | |
| 		dd if="$UPGRADE_BACKUP" of="$EMMC_ROOT_DEV" bs=512 seek=$EMMC_ROOTFS_BLOCKS
 | |
| 	elif [ "$EMMC_KERNEL_BLOCKS" ]; then
 | |
| 		dd if="$UPGRADE_BACKUP" of="$EMMC_KERN_DEV" bs=512 seek=$EMMC_KERNEL_BLOCKS
 | |
| 	fi
 | |
| }
 | |
| 
 | |
| emmc_do_upgrade() {
 | |
| 	local file_type=$(identify $1)
 | |
| 
 | |
| 	case "$file_type" in
 | |
| 		"fit")  emmc_upgrade_fit $1;;
 | |
| 		*)      emmc_upgrade_tar $1;;
 | |
| 	esac
 | |
| }
 |