target: socfpga: Add Altera SoCFPGA support
[openwrt/svn-archive/archive.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 }