aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/socfpga/base-files/lib/upgrade/sockit.sh
blob: e9268cf6d2394247c09cf5d3262b6dd732bcc046 (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
#
# Copyright (C) 2014-2015 OpenWrt.org
#

BOOTPART=/dev/mmcblk0p2
CFGPART=/dev/mmcblk0p3

identify_magic() {
	local magic=$1
	case "$magic" in
		"55424923")
			echo "ubi"
			;;
		"31181006")
			echo "ubifs"
			;;
		"68737173")
			echo "squashfs"
			;;
		"d00dfeed")
			echo "fit"
			;;
		"00000000")
			echo "ext4"
			;;
		"4349"*)
			echo "combined"
			;;
		*)
			echo "unknown $magic"
			;;
	esac
}

get_magic_long_tar() {
	( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null
}

identify_tar() {
	identify_magic $(get_magic_long_tar "$1" "$2")
}

platform_do_check_sockit() {
	local board=$(socfpga_board_name)
	local magic_long="$(get_magic_long "$1")"
	echo "magic = $magic_long"

	if [ "$magic_long" = "73797375" ] ; then
		local rootfs_type="$(identify_tar "$1" sysupgrade-$board/root)"
		if [ "$rootfs_type" = "ubifs" ] ; then
			nand_do_platform_check $board $1
			return 0;
		fi
		[ "$rootfs_type" = "ext4" ] && return 0

		echo "Unknown rootfs type $rootfs_type !"
	fi

	return 1
}

platform_do_upgrade_sockit() {
	local board=$(socfpga_board_name)
	local magic_long="$(get_magic_long "$1")"
	echo "magic = $magic_long"

	if [ "$magic_long" = "73797375" ] ; then
		local rootfs_type="$(identify_tar "$1" sysupgrade-$board/root)"
		if [ "$rootfs_type" = "ext4" ] ; then
			sync
			tar xf "$1" sysupgrade-$board/root -O | \
				dd of="$BOOTPART" bs=512 conv=fsync
			return 0
		fi

		echo "Unknown rootfs type $rootfs_type !"
	fi

	return 1
}

platform_copy_config() {
	if [ -b "$CFGPART" ]; then
		mount -o rw,noatime "$CFGPART" /mnt
		cp -af "$CONF_TAR" /mnt/
		umount /mnt
	fi
}