e9268cf6d2394247c09cf5d3262b6dd732bcc046
[openwrt.git] / target / linux / socfpga / base-files / lib / upgrade / sockit.sh
1 #
2 # Copyright (C) 2014-2015 OpenWrt.org
3 #
4
5 BOOTPART=/dev/mmcblk0p2
6 CFGPART=/dev/mmcblk0p3
7
8 identify_magic() {
9         local magic=$1
10         case "$magic" in
11                 "55424923")
12                         echo "ubi"
13                         ;;
14                 "31181006")
15                         echo "ubifs"
16                         ;;
17                 "68737173")
18                         echo "squashfs"
19                         ;;
20                 "d00dfeed")
21                         echo "fit"
22                         ;;
23                 "00000000")
24                         echo "ext4"
25                         ;;
26                 "4349"*)
27                         echo "combined"
28                         ;;
29                 *)
30                         echo "unknown $magic"
31                         ;;
32         esac
33 }
34
35 get_magic_long_tar() {
36         ( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null
37 }
38
39 identify_tar() {
40         identify_magic $(get_magic_long_tar "$1" "$2")
41 }
42
43 platform_do_check_sockit() {
44         local board=$(socfpga_board_name)
45         local magic_long="$(get_magic_long "$1")"
46         echo "magic = $magic_long"
47
48         if [ "$magic_long" = "73797375" ] ; then
49                 local rootfs_type="$(identify_tar "$1" sysupgrade-$board/root)"
50                 if [ "$rootfs_type" = "ubifs" ] ; then
51                         nand_do_platform_check $board $1
52                         return 0;
53                 fi
54                 [ "$rootfs_type" = "ext4" ] && return 0
55
56                 echo "Unknown rootfs type $rootfs_type !"
57         fi
58
59         return 1
60 }
61
62 platform_do_upgrade_sockit() {
63         local board=$(socfpga_board_name)
64         local magic_long="$(get_magic_long "$1")"
65         echo "magic = $magic_long"
66
67         if [ "$magic_long" = "73797375" ] ; then
68                 local rootfs_type="$(identify_tar "$1" sysupgrade-$board/root)"
69                 if [ "$rootfs_type" = "ext4" ] ; then
70                         sync
71                         tar xf "$1" sysupgrade-$board/root -O | \
72                                 dd of="$BOOTPART" bs=512 conv=fsync
73                         return 0
74                 fi
75
76                 echo "Unknown rootfs type $rootfs_type !"
77         fi
78
79         return 1
80 }
81
82 platform_copy_config() {
83         if [ -b "$CFGPART" ]; then
84                 mount -o rw,noatime "$CFGPART" /mnt
85                 cp -af "$CONF_TAR" /mnt/
86                 umount /mnt
87         fi
88 }