aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/socfpga/base-files/lib/upgrade/sockit.sh
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/socfpga/base-files/lib/upgrade/sockit.sh')
-rw-r--r--target/linux/socfpga/base-files/lib/upgrade/sockit.sh88
1 files changed, 88 insertions, 0 deletions
diff --git a/target/linux/socfpga/base-files/lib/upgrade/sockit.sh b/target/linux/socfpga/base-files/lib/upgrade/sockit.sh
new file mode 100644
index 0000000000..e9268cf6d2
--- /dev/null
+++ b/target/linux/socfpga/base-files/lib/upgrade/sockit.sh
@@ -0,0 +1,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
+}