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