omap: add sysupgrade support
add sysupgrade missing script files Signed-off-by: Lucian Cristian <lucian.cristian@gmail.com>
This commit is contained in:
		
				
					committed by
					
						
						John Crispin
					
				
			
			
				
	
			
			
			
						parent
						
							40f66f1431
						
					
				
				
					commit
					6a095e8587
				
			
							
								
								
									
										20
									
								
								target/linux/omap/base-files/lib/preinit/79_move_config
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								target/linux/omap/base-files/lib/preinit/79_move_config
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,20 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# Copyright (C) 2012-2015 OpenWrt.org
 | 
			
		||||
 | 
			
		||||
move_config() {
 | 
			
		||||
	local partdev
 | 
			
		||||
 | 
			
		||||
	. /lib/upgrade/common.sh
 | 
			
		||||
 | 
			
		||||
	if export_bootdevice && export_partdevice partdev -1; then
 | 
			
		||||
		if mount -t vfat -o rw,noatime "/dev/$partdev" /mnt; then
 | 
			
		||||
			if [ -f /mnt/sysupgrade.tgz ]; then
 | 
			
		||||
				mv -f /mnt/sysupgrade.tgz /
 | 
			
		||||
			fi
 | 
			
		||||
			umount /mnt
 | 
			
		||||
		fi
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
boot_hook_add preinit_mount_root move_config
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										89
									
								
								target/linux/omap/base-files/lib/upgrade/platform.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								target/linux/omap/base-files/lib/upgrade/platform.sh
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,89 @@
 | 
			
		||||
platform_check_image() {
 | 
			
		||||
	local diskdev partdev diff
 | 
			
		||||
 | 
			
		||||
	export_bootdevice && export_partdevice diskdev -2 || {
 | 
			
		||||
		echo "Unable to determine upgrade device"
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	get_partitions "/dev/$diskdev" bootdisk
 | 
			
		||||
 | 
			
		||||
	#extract the boot sector from the image
 | 
			
		||||
	get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b 2>/dev/null
 | 
			
		||||
 | 
			
		||||
	get_partitions /tmp/image.bs image
 | 
			
		||||
 | 
			
		||||
	#compare tables
 | 
			
		||||
	diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | 
			
		||||
 | 
			
		||||
	rm -f /tmp/image.bs /tmp/partmap.bootdisk /tmp/partmap.image
 | 
			
		||||
 | 
			
		||||
	if [ -n "$diff" ]; then
 | 
			
		||||
		echo "Partition layout has changed. Full image will be written."
 | 
			
		||||
		ask_bool 0 "Abort" && exit 1
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platform_copy_config() {
 | 
			
		||||
	local partdev
 | 
			
		||||
 | 
			
		||||
	if export_partdevice partdev -1; then
 | 
			
		||||
		mount -t vfat -o rw,noatime "/dev/$partdev" /mnt
 | 
			
		||||
		cp -af "$CONF_TAR" /mnt/
 | 
			
		||||
		umount /mnt
 | 
			
		||||
	fi
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
platform_do_upgrade() {
 | 
			
		||||
	local diskdev partdev diff
 | 
			
		||||
 | 
			
		||||
	export_bootdevice && export_partdevice diskdev -2 || {
 | 
			
		||||
		echo "Unable to determine upgrade device"
 | 
			
		||||
		return 1
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	sync
 | 
			
		||||
 | 
			
		||||
	if [ "$SAVE_PARTITIONS" = "1" ]; then
 | 
			
		||||
		get_partitions "/dev/$diskdev" bootdisk
 | 
			
		||||
 | 
			
		||||
		#extract the boot sector from the image
 | 
			
		||||
		get_image "$@" | dd of=/tmp/image.bs count=1 bs=512b
 | 
			
		||||
 | 
			
		||||
		get_partitions /tmp/image.bs image
 | 
			
		||||
 | 
			
		||||
		#compare tables
 | 
			
		||||
		diff="$(grep -F -x -v -f /tmp/partmap.bootdisk /tmp/partmap.image)"
 | 
			
		||||
	else
 | 
			
		||||
		diff=1
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	if [ -n "$diff" ]; then
 | 
			
		||||
		get_image "$@" | dd of="/dev/$diskdev" bs=4096 conv=fsync
 | 
			
		||||
 | 
			
		||||
		# Separate removal and addtion is necessary; otherwise, partition 1
 | 
			
		||||
		# will be missing if it overlaps with the old partition 2
 | 
			
		||||
		partx -d - "/dev/$diskdev"
 | 
			
		||||
		partx -a - "/dev/$diskdev"
 | 
			
		||||
 | 
			
		||||
		return 0
 | 
			
		||||
	fi
 | 
			
		||||
 | 
			
		||||
	#write uboot image
 | 
			
		||||
	get_image "$@" | dd of="$diskdev" bs=1024 skip=8 seek=8 count=1016 conv=fsync
 | 
			
		||||
	#iterate over each partition from the image and write it to the boot disk
 | 
			
		||||
	while read part start size; do
 | 
			
		||||
		part="$(($part - 2))"
 | 
			
		||||
		if export_partdevice partdev $part; then
 | 
			
		||||
			echo "Writing image to /dev/$partdev..."
 | 
			
		||||
			get_image "$@" | dd of="/dev/$partdev" ibs="512" obs=1M skip="$start" count="$size" conv=fsync
 | 
			
		||||
		else
 | 
			
		||||
			echo "Unable to find partition $part device, skipped."
 | 
			
		||||
		fi
 | 
			
		||||
	done < /tmp/partmap.image
 | 
			
		||||
 | 
			
		||||
	#copy partition uuid
 | 
			
		||||
	echo "Writing new UUID to /dev/$diskdev..."
 | 
			
		||||
	get_image "$@" | dd of="/dev/$diskdev" bs=1 skip=440 count=4 seek=440 conv=fsync
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user