aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/base-files/lib/upgrade/platform.sh
blob: 9cc960a5fcda5aee935e72765288a157addd4653 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#!/bin/sh
#
# Copyright 2015-2018 Traverse Technologies
#
platform_do_upgrade_traverse_nandubi() {
	bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}')
	newbootsys=2
	if [ "$bootsys" -eq "2" ]; then
		newbootsys=1
	fi
	mkdir -p /tmp/image
	cd /tmp/image
	get_image "$1" > image.tar
	ls -la image.tar
	files=$(tar -tf image.tar)
	echo "Files in image:"
	echo $files
	for f in $files
	do
		part_name=$(echo $f | awk -F '/' '{{print $2}}')
		if [ -z "$part_name" ] || [ "$part_name" = "CONTROL" ]; then
			continue
		fi

		[ "$part_name" = "root" ] && part_name="rootfs"

		volume=$part_name
		if [ "$part_name" = "kernel" ] || [ "$part_name" = "rootfs" ]; then
			volume="${part_name}${newbootsys}"
		fi
		volume_id=$(ubinfo -d 0 --name $volume | awk '/Volume ID/ {print $3}')
		file_size=$(tar -tvf image.tar $f | awk '{{print $3}}')
		echo "$f size $file_size"
		tar -xOf image.tar $f | ubiupdatevol -s $file_size /dev/ubi0_$volume_id -
		
		echo "$volume upgraded"
	done
	fw_setenv bootsys $newbootsys
	echo "Upgrade complete"
}
platform_copy_config() {
	bootsys=$(fw_printenv bootsys | awk -F= '{{print $2}}')
	rootvol=rootfs$bootsys
	volume_id=$(ubinfo -d 0 --name $rootvol | awk '/Volume ID/ {print $3}')
	mkdir -p /mnt/oldsys
	mount -t ubifs -o rw,noatime /dev/ubi0_$volume_id /mnt/oldsys
	cp -af "$CONF_TAR" /mnt/oldsys
	umount /mnt/oldsys
}
platform_check_image() {
	local board=$(board_name)

	case "$board" in
	traverse,ls1043v | \
	traverse,ls1043s | \
	traverse,five64)
		local tar_file="$1"
		local kernel_length=$( (tar xf $tar_file sysupgrade-traverse-five64/kernel -O | wc -c) 2> /dev/null)
		local rootfs_length=$( (tar xf $tar_file sysupgrade-traverse-five64/root -O | wc -c) 2> /dev/null)
		[ "$kernel_length" -eq 0 -o "$rootfs_length" -eq 0 ] && {
			echo "The upgrade image is corrupt."
			return 1
		}
		return 0
		;;
	*)
		echo "Sysupgrade is not currently supported on $board"
		;;
	esac

	return 1
}
platform_do_upgrade() {
	local board=$(board_name)

	case "$board" in
	traverse,ls1043v | \
	traverse,ls1043s | \
	traverse,five64)
		platform_do_upgrade_traverse_nandubi "$ARGV"
		;;
	*)
		echo "Sysupgrade is not currently supported on $board"
		;;
	esac
}
platform_pre_upgrade() {
	# Force the creation of fw_printenv.lock
	mkdir -p /var/lock
	touch /var/lock/fw_printenv.lock
	
	export RAMFS_COPY_BIN="/usr/sbin/fw_printenv /usr/sbin/fw_setenv /usr/sbin/ubinfo /bin/echo ${RAMFS_COPY_BIN}"
	export RAMFS_COPY_DATA="/etc/fw_env.config /var/lock/fw_printenv.lock ${RAMFS_COPY_DATA}"
}