|
@@ -0,0 +1,934 @@
|
|
|
+From: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
+Date: Fri, 21 Apr 2017 20:37:58 +0200
|
|
|
+Subject: procd: remove procd-nand package
|
|
|
+
|
|
|
+We always want to support staged upgrades now, so it's better to include
|
|
|
+upgraded into the main package. /lib/upgrade/nand.sh is moved to
|
|
|
+base-files.
|
|
|
+
|
|
|
+The procd-nand-firstboot package is removed for now, it may return later
|
|
|
+as a separate package.
|
|
|
+
|
|
|
+Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
|
|
+
|
|
|
+diff --git a/package/base-files/Makefile b/package/base-files/Makefile
|
|
|
+index 78c3dc9390cf58fde8483596563c2e6e5e500887..aeef3dbc12f0c5ffdef0e7034e5446bfe1a1c7c4 100644
|
|
|
+--- a/package/base-files/Makefile
|
|
|
++++ b/package/base-files/Makefile
|
|
|
+@@ -18,7 +18,9 @@ PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
|
|
|
+ PKG_BUILD_DEPENDS:=usign/host
|
|
|
+ PKG_LICENSE:=GPL-2.0
|
|
|
+
|
|
|
+-PKG_CONFIG_DEPENDS := CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE
|
|
|
++PKG_CONFIG_DEPENDS := \
|
|
|
++ CONFIG_SIGNED_PACKAGES CONFIG_TARGET_INIT_PATH CONFIG_TARGET_PREINIT_DISABLE_FAILSAFE \
|
|
|
++ CONFIG_NAND_SUPPORT
|
|
|
+
|
|
|
+ include $(INCLUDE_DIR)/package.mk
|
|
|
+
|
|
|
+@@ -30,7 +32,7 @@ endif
|
|
|
+ define Package/base-files
|
|
|
+ SECTION:=base
|
|
|
+ CATEGORY:=Base system
|
|
|
+- DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +fstools +fwtool
|
|
|
++ DEPENDS:=+netifd +libc +procd +jsonfilter +SIGNED_PACKAGES:usign +SIGNED_PACKAGES:lede-keyring +NAND_SUPPORT:ubi-utils +fstools +fwtool
|
|
|
+ TITLE:=Base filesystem for Lede
|
|
|
+ URL:=http://openwrt.org/
|
|
|
+ VERSION:=$(PKG_RELEASE)-$(REVISION)
|
|
|
+@@ -105,9 +107,16 @@ ifdef CONFIG_SIGNED_PACKAGES
|
|
|
+ endef
|
|
|
+ endif
|
|
|
+
|
|
|
++ifeq ($(CONFIG_NAND_SUPPORT),)
|
|
|
++ define Package/base-files/nand-support
|
|
|
++ rm -f $(1)/lib/upgrade/nand.sh
|
|
|
++ endef
|
|
|
++endif
|
|
|
++
|
|
|
+ define Package/base-files/install
|
|
|
+ $(CP) ./files/* $(1)/
|
|
|
+ $(Package/base-files/install-key)
|
|
|
++ $(Package/base-files/nand-support)
|
|
|
+ if [ -d $(GENERIC_PLATFORM_DIR)/base-files/. ]; then \
|
|
|
+ $(CP) $(GENERIC_PLATFORM_DIR)/base-files/* $(1)/; \
|
|
|
+ fi
|
|
|
+diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh
|
|
|
+new file mode 100644
|
|
|
+index 0000000000000000000000000000000000000000..6bd2005344c081df20e5a330a69e49e37225c39f
|
|
|
+--- /dev/null
|
|
|
++++ b/package/base-files/files/lib/upgrade/nand.sh
|
|
|
+@@ -0,0 +1,376 @@
|
|
|
++#!/bin/sh
|
|
|
++# Copyright (C) 2014 OpenWrt.org
|
|
|
++#
|
|
|
++
|
|
|
++. /lib/functions.sh
|
|
|
++
|
|
|
++# 'kernel' partition on NAND contains the kernel
|
|
|
++CI_KERNPART="kernel"
|
|
|
++
|
|
|
++# 'ubi' partition on NAND contains UBI
|
|
|
++CI_UBIPART="ubi"
|
|
|
++
|
|
|
++ubi_mknod() {
|
|
|
++ local dir="$1"
|
|
|
++ local dev="/dev/$(basename $dir)"
|
|
|
++
|
|
|
++ [ -e "$dev" ] && return 0
|
|
|
++
|
|
|
++ local devid="$(cat $dir/dev)"
|
|
|
++ local major="${devid%%:*}"
|
|
|
++ local minor="${devid##*:}"
|
|
|
++ mknod "$dev" c $major $minor
|
|
|
++}
|
|
|
++
|
|
|
++nand_find_volume() {
|
|
|
++ local ubidevdir ubivoldir
|
|
|
++ ubidevdir="/sys/devices/virtual/ubi/$1"
|
|
|
++ [ ! -d "$ubidevdir" ] && return 1
|
|
|
++ for ubivoldir in $ubidevdir/${1}_*; do
|
|
|
++ [ ! -d "$ubivoldir" ] && continue
|
|
|
++ if [ "$( cat $ubivoldir/name )" = "$2" ]; then
|
|
|
++ basename $ubivoldir
|
|
|
++ ubi_mknod "$ubivoldir"
|
|
|
++ return 0
|
|
|
++ fi
|
|
|
++ done
|
|
|
++}
|
|
|
++
|
|
|
++nand_find_ubi() {
|
|
|
++ local ubidevdir ubidev mtdnum
|
|
|
++ mtdnum="$( find_mtd_index $1 )"
|
|
|
++ [ ! "$mtdnum" ] && return 1
|
|
|
++ for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
|
|
|
++ [ ! -d "$ubidevdir" ] && continue
|
|
|
++ cmtdnum="$( cat $ubidevdir/mtd_num )"
|
|
|
++ [ ! "$mtdnum" ] && continue
|
|
|
++ if [ "$mtdnum" = "$cmtdnum" ]; then
|
|
|
++ ubidev=$( basename $ubidevdir )
|
|
|
++ ubi_mknod "$ubidevdir"
|
|
|
++ echo $ubidev
|
|
|
++ return 0
|
|
|
++ fi
|
|
|
++ done
|
|
|
++}
|
|
|
++
|
|
|
++nand_get_magic_long() {
|
|
|
++ dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
|
|
++}
|
|
|
++
|
|
|
++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_magic() {
|
|
|
++ local magic=$1
|
|
|
++ case "$magic" in
|
|
|
++ "55424923")
|
|
|
++ echo "ubi"
|
|
|
++ ;;
|
|
|
++ "31181006")
|
|
|
++ echo "ubifs"
|
|
|
++ ;;
|
|
|
++ "68737173")
|
|
|
++ echo "squashfs"
|
|
|
++ ;;
|
|
|
++ "d00dfeed")
|
|
|
++ echo "fit"
|
|
|
++ ;;
|
|
|
++ "4349"*)
|
|
|
++ echo "combined"
|
|
|
++ ;;
|
|
|
++ *)
|
|
|
++ echo "unknown $magic"
|
|
|
++ ;;
|
|
|
++ esac
|
|
|
++}
|
|
|
++
|
|
|
++
|
|
|
++identify() {
|
|
|
++ identify_magic $(nand_get_magic_long "$1" "${2:-0}")
|
|
|
++}
|
|
|
++
|
|
|
++identify_tar() {
|
|
|
++ identify_magic $(get_magic_long_tar "$1" "$2")
|
|
|
++}
|
|
|
++
|
|
|
++nand_restore_config() {
|
|
|
++ sync
|
|
|
++ local ubidev=$( nand_find_ubi $CI_UBIPART )
|
|
|
++ local ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
|
|
++ [ ! "$ubivol" ] &&
|
|
|
++ ubivol="$( nand_find_volume $ubidev rootfs )"
|
|
|
++ mkdir /tmp/new_root
|
|
|
++ if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
|
|
|
++ echo "mounting ubifs $ubivol failed"
|
|
|
++ rmdir /tmp/new_root
|
|
|
++ return 1
|
|
|
++ fi
|
|
|
++ mv "$1" "/tmp/new_root/sysupgrade.tgz"
|
|
|
++ umount /tmp/new_root
|
|
|
++ sync
|
|
|
++ rmdir /tmp/new_root
|
|
|
++}
|
|
|
++
|
|
|
++nand_upgrade_prepare_ubi() {
|
|
|
++ local rootfs_length="$1"
|
|
|
++ local rootfs_type="$2"
|
|
|
++ local has_kernel="${3:-0}"
|
|
|
++ local has_env="${4:-0}"
|
|
|
++
|
|
|
++ local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
|
|
++ if [ ! "$mtdnum" ]; then
|
|
|
++ echo "cannot find ubi mtd partition $CI_UBIPART"
|
|
|
++ return 1
|
|
|
++ fi
|
|
|
++
|
|
|
++ local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
++ if [ ! "$ubidev" ]; then
|
|
|
++ ubiattach -m "$mtdnum"
|
|
|
++ sync
|
|
|
++ ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
++ fi
|
|
|
++
|
|
|
++ if [ ! "$ubidev" ]; then
|
|
|
++ ubiformat /dev/mtd$mtdnum -y
|
|
|
++ ubiattach -m "$mtdnum"
|
|
|
++ sync
|
|
|
++ ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
++ [ "$has_env" -gt 0 ] && {
|
|
|
++ ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
|
|
|
++ ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
|
|
|
++ }
|
|
|
++ fi
|
|
|
++
|
|
|
++ local kern_ubivol="$( nand_find_volume $ubidev kernel )"
|
|
|
++ local root_ubivol="$( nand_find_volume $ubidev rootfs )"
|
|
|
++ local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
|
|
++
|
|
|
++ # remove ubiblock device of rootfs
|
|
|
++ local root_ubiblk="ubiblock${root_ubivol:3}"
|
|
|
++ if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
|
|
|
++ echo "removing $root_ubiblk"
|
|
|
++ if ! ubiblock -r /dev/$root_ubivol; then
|
|
|
++ echo "cannot remove $root_ubiblk"
|
|
|
++ return 1;
|
|
|
++ fi
|
|
|
++ fi
|
|
|
++
|
|
|
++ # kill volumes
|
|
|
++ [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true
|
|
|
++ [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true
|
|
|
++ [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
|
|
|
++
|
|
|
++ # update kernel
|
|
|
++ if [ "$has_kernel" = "1" ]; then
|
|
|
++ if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then
|
|
|
++ echo "cannot create kernel volume"
|
|
|
++ return 1;
|
|
|
++ fi
|
|
|
++ fi
|
|
|
++
|
|
|
++ # update rootfs
|
|
|
++ local root_size_param
|
|
|
++ if [ "$rootfs_type" = "ubifs" ]; then
|
|
|
++ root_size_param="-m"
|
|
|
++ else
|
|
|
++ root_size_param="-s $rootfs_length"
|
|
|
++ fi
|
|
|
++ if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then
|
|
|
++ echo "cannot create rootfs volume"
|
|
|
++ return 1;
|
|
|
++ fi
|
|
|
++
|
|
|
++ # create rootfs_data for non-ubifs rootfs
|
|
|
++ if [ "$rootfs_type" != "ubifs" ]; then
|
|
|
++ if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
|
|
|
++ echo "cannot initialize rootfs_data volume"
|
|
|
++ return 1
|
|
|
++ fi
|
|
|
++ fi
|
|
|
++ sync
|
|
|
++ return 0
|
|
|
++}
|
|
|
++
|
|
|
++nand_do_upgrade_success() {
|
|
|
++ local conf_tar="/tmp/sysupgrade.tgz"
|
|
|
++
|
|
|
++ sync
|
|
|
++ [ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
|
|
++ echo "sysupgrade successful"
|
|
|
++ umount -a
|
|
|
++ reboot -f
|
|
|
++}
|
|
|
++
|
|
|
++# Flash the UBI image to MTD partition
|
|
|
++nand_upgrade_ubinized() {
|
|
|
++ local ubi_file="$1"
|
|
|
++ local mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
|
|
++
|
|
|
++ [ ! "$mtdnum" ] && {
|
|
|
++ CI_UBIPART="rootfs"
|
|
|
++ mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
|
|
++ }
|
|
|
++
|
|
|
++ if [ ! "$mtdnum" ]; then
|
|
|
++ echo "cannot find mtd device $CI_UBIPART"
|
|
|
++ umount -a
|
|
|
++ reboot -f
|
|
|
++ fi
|
|
|
++
|
|
|
++ local mtddev="/dev/mtd${mtdnum}"
|
|
|
++ ubidetach -p "${mtddev}" || true
|
|
|
++ sync
|
|
|
++ ubiformat "${mtddev}" -y -f "${ubi_file}"
|
|
|
++ ubiattach -p "${mtddev}"
|
|
|
++ nand_do_upgrade_success
|
|
|
++}
|
|
|
++
|
|
|
++# Write the UBIFS image to UBI volume
|
|
|
++nand_upgrade_ubifs() {
|
|
|
++ local rootfs_length=`(cat $1 | wc -c) 2> /dev/null`
|
|
|
++
|
|
|
++ nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
|
|
|
++
|
|
|
++ local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
++ local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
|
|
++ ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
|
|
|
++
|
|
|
++ nand_do_upgrade_success
|
|
|
++}
|
|
|
++
|
|
|
++nand_board_name() {
|
|
|
++ if type 'platform_nand_board_name' >/dev/null 2>/dev/null; then
|
|
|
++ platform_nand_board_name
|
|
|
++ return
|
|
|
++ fi
|
|
|
++
|
|
|
++ cat /tmp/sysinfo/board_name
|
|
|
++}
|
|
|
++
|
|
|
++nand_upgrade_tar() {
|
|
|
++ local tar_file="$1"
|
|
|
++ local board_name="$(nand_board_name)"
|
|
|
++ local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
|
|
|
++
|
|
|
++ local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null`
|
|
|
++ local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null`
|
|
|
++
|
|
|
++ local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)"
|
|
|
++
|
|
|
++ local has_kernel=1
|
|
|
++ local has_env=0
|
|
|
++
|
|
|
++ [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && {
|
|
|
++ tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART
|
|
|
++ }
|
|
|
++ [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0
|
|
|
++
|
|
|
++ nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env"
|
|
|
++
|
|
|
++ local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
++ [ "$has_kernel" = "1" ] && {
|
|
|
++ local kern_ubivol="$(nand_find_volume $ubidev kernel)"
|
|
|
++ tar xf $tar_file sysupgrade-$board_name/kernel -O | \
|
|
|
++ ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
|
|
|
++ }
|
|
|
++
|
|
|
++ local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
|
|
++ tar xf $tar_file sysupgrade-$board_name/root -O | \
|
|
|
++ ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
|
|
|
++
|
|
|
++ nand_do_upgrade_success
|
|
|
++}
|
|
|
++
|
|
|
++# Recognize type of passed file and start the upgrade process
|
|
|
++nand_do_upgrade_stage2() {
|
|
|
++ local file_type=$(identify $1)
|
|
|
++
|
|
|
++ if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
|
++ platform_nand_pre_upgrade "$1"
|
|
|
++ fi
|
|
|
++
|
|
|
++ [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs"
|
|
|
++
|
|
|
++ case "$file_type" in
|
|
|
++ "ubi") nand_upgrade_ubinized $1;;
|
|
|
++ "ubifs") nand_upgrade_ubifs $1;;
|
|
|
++ *) nand_upgrade_tar $1;;
|
|
|
++ esac
|
|
|
++}
|
|
|
++
|
|
|
++nand_upgrade_stage2() {
|
|
|
++ [ $1 = "nand" ] && {
|
|
|
++ [ -f "$2" ] && {
|
|
|
++ touch /tmp/sysupgrade
|
|
|
++
|
|
|
++ killall -9 telnetd
|
|
|
++ killall -9 dropbear
|
|
|
++ killall -9 ash
|
|
|
++
|
|
|
++ kill_remaining TERM
|
|
|
++ sleep 3
|
|
|
++ kill_remaining KILL
|
|
|
++
|
|
|
++ sleep 1
|
|
|
++
|
|
|
++ if [ -n "$(rootfs_type)" ]; then
|
|
|
++ v "Switching to ramdisk..."
|
|
|
++ run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2"
|
|
|
++ else
|
|
|
++ nand_do_upgrade_stage2 $2
|
|
|
++ fi
|
|
|
++ return 0
|
|
|
++ }
|
|
|
++ echo "Nand upgrade failed"
|
|
|
++ exit 1
|
|
|
++ }
|
|
|
++}
|
|
|
++
|
|
|
++nand_upgrade_stage1() {
|
|
|
++ [ -f /tmp/sysupgrade-nand-path ] && {
|
|
|
++ path="$(cat /tmp/sysupgrade-nand-path)"
|
|
|
++ [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] &&
|
|
|
++ rm $CONF_TAR
|
|
|
++
|
|
|
++ ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }"
|
|
|
++ exit 0
|
|
|
++ }
|
|
|
++}
|
|
|
++
|
|
|
++# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
|
|
|
++# 3 types of files:
|
|
|
++# 1) UBI - should contain an ubinized image, header is checked for the proper
|
|
|
++# MAGIC
|
|
|
++# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume,
|
|
|
++# header is checked for the proper MAGIC
|
|
|
++# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty
|
|
|
++# "CONTROL" file (at this point its content isn't verified)
|
|
|
++#
|
|
|
++# You usually want to call this function in platform_check_image.
|
|
|
++#
|
|
|
++# $(1): board name, used in case of passing TAR file
|
|
|
++# $(2): file to be checked
|
|
|
++nand_do_platform_check() {
|
|
|
++ local board_name="$1"
|
|
|
++ local tar_file="$2"
|
|
|
++ local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null`
|
|
|
++ local file_type="$(identify $2)"
|
|
|
++
|
|
|
++ [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
|
|
|
++ echo "Invalid sysupgrade file."
|
|
|
++ return 1
|
|
|
++ }
|
|
|
++
|
|
|
++ return 0
|
|
|
++}
|
|
|
++
|
|
|
++# Start NAND upgrade process
|
|
|
++#
|
|
|
++# $(1): file to be used for upgrade
|
|
|
++nand_do_upgrade() {
|
|
|
++ echo -n $1 > /tmp/sysupgrade-nand-path
|
|
|
++ install_bin /sbin/upgraded
|
|
|
++ ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded
|
|
|
++ nand_upgrade_stage1
|
|
|
++}
|
|
|
+diff --git a/package/system/procd/Makefile b/package/system/procd/Makefile
|
|
|
+index 805583143fa865d9ffb38355f10ad300e222400e..775b9a64e172b250b3ba27e71fbf07aff46ede14 100644
|
|
|
+--- a/package/system/procd/Makefile
|
|
|
++++ b/package/system/procd/Makefile
|
|
|
+@@ -22,11 +22,9 @@ PKG_LICENSE_FILES:=
|
|
|
+
|
|
|
+ PKG_MAINTAINER:=John Crispin <john@phrozen.org>
|
|
|
+
|
|
|
+-PKG_FLAGS:=nonshared
|
|
|
+-
|
|
|
+ PKG_CONFIG_DEPENDS:= \
|
|
|
+ CONFIG_TARGET_INIT_PATH CONFIG_KERNEL_SECCOMP \
|
|
|
+- CONFIG_NAND_SUPPORT CONFIG_PROCD_SHOW_BOOT CONFIG_PROCD_ZRAM_TMPFS \
|
|
|
++ CONFIG_PROCD_SHOW_BOOT CONFIG_PROCD_ZRAM_TMPFS \
|
|
|
+ CONFIG_KERNEL_NAMESPACES CONFIG_PACKAGE_procd-ujail CONFIG_PACKAGE_procd-seccomp
|
|
|
+
|
|
|
+ include $(INCLUDE_DIR)/package.mk
|
|
|
+@@ -42,7 +40,7 @@ TARGET_LDFLAGS += $(if $(CONFIG_USE_GLIBC),-lrt)
|
|
|
+ define Package/procd
|
|
|
+ SECTION:=base
|
|
|
+ CATEGORY:=Base system
|
|
|
+- DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox +libubus +NAND_SUPPORT:procd-nand
|
|
|
++ DEPENDS:=+ubusd +ubus +libjson-script +ubox +USE_GLIBC:librt +libubox +libubus
|
|
|
+ TITLE:=OpenWrt system process manager
|
|
|
+ endef
|
|
|
+
|
|
|
+@@ -60,20 +58,6 @@ define Package/procd-seccomp
|
|
|
+ TITLE:=OpenWrt process seccomp helper + utrace
|
|
|
+ endef
|
|
|
+
|
|
|
+-define Package/procd-nand
|
|
|
+- SECTION:=utils
|
|
|
+- CATEGORY:=Utilities
|
|
|
+- DEPENDS:=@NAND_SUPPORT +ubi-utils
|
|
|
+- TITLE:=OpenWrt sysupgrade nand helper
|
|
|
+-endef
|
|
|
+-
|
|
|
+-define Package/procd-nand-firstboot
|
|
|
+- SECTION:=utils
|
|
|
+- CATEGORY:=Utilities
|
|
|
+- DEPENDS:=procd-nand
|
|
|
+- TITLE:=OpenWrt firstboot nand helper
|
|
|
+-endef
|
|
|
+-
|
|
|
+ define Package/procd/config
|
|
|
+ menu "Configuration"
|
|
|
+ depends on PACKAGE_procd
|
|
|
+@@ -91,10 +75,6 @@ endmenu
|
|
|
+ endef
|
|
|
+
|
|
|
+
|
|
|
+-ifeq ($(CONFIG_NAND_SUPPORT),y)
|
|
|
+- CMAKE_OPTIONS += -DBUILD_UPGRADED=1
|
|
|
+-endif
|
|
|
+-
|
|
|
+ ifeq ($(CONFIG_PROCD_SHOW_BOOT),y)
|
|
|
+ CMAKE_OPTIONS += -DSHOW_BOOT_ON_CONSOLE=1
|
|
|
+ endif
|
|
|
+@@ -114,7 +94,7 @@ endif
|
|
|
+ define Package/procd/install
|
|
|
+ $(INSTALL_DIR) $(1)/sbin $(1)/etc $(1)/lib/functions
|
|
|
+
|
|
|
+- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{init,procd,askfirst,udevtrigger} $(1)/sbin/
|
|
|
++ $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{init,procd,askfirst,udevtrigger,upgraded} $(1)/sbin/
|
|
|
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libsetlbf.so $(1)/lib
|
|
|
+ $(INSTALL_BIN) ./files/reload_config $(1)/sbin/
|
|
|
+ $(INSTALL_DATA) ./files/hotplug*.json $(1)/etc/
|
|
|
+@@ -133,21 +113,6 @@ define Package/procd-seccomp/install
|
|
|
+ $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libpreload-trace.so $(1)/lib
|
|
|
+ endef
|
|
|
+
|
|
|
+-define Package/procd-nand/install
|
|
|
+- $(INSTALL_DIR) $(1)/sbin $(1)/lib/upgrade
|
|
|
+-
|
|
|
+- $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/upgraded $(1)/sbin/
|
|
|
+- $(INSTALL_DATA) ./files/nand.sh $(1)/lib/upgrade/
|
|
|
+-endef
|
|
|
+-
|
|
|
+-define Package/procd-nand-firstboot/install
|
|
|
+- $(INSTALL_DIR) $(1)/lib/preinit
|
|
|
+-
|
|
|
+- $(INSTALL_DATA) ./files/nand-preinit.sh $(1)/lib/preinit/60-nand-firstboot.sh
|
|
|
+-endef
|
|
|
+-
|
|
|
+ $(eval $(call BuildPackage,procd))
|
|
|
+ $(eval $(call BuildPackage,procd-ujail))
|
|
|
+ $(eval $(call BuildPackage,procd-seccomp))
|
|
|
+-$(eval $(call BuildPackage,procd-nand))
|
|
|
+-$(eval $(call BuildPackage,procd-nand-firstboot))
|
|
|
+diff --git a/package/system/procd/files/nand-preinit.sh b/package/system/procd/files/nand-preinit.sh
|
|
|
+deleted file mode 100644
|
|
|
+index cf596246d1f2891cbeb7b5c7cac4bb6e002b13fb..0000000000000000000000000000000000000000
|
|
|
+--- a/package/system/procd/files/nand-preinit.sh
|
|
|
++++ /dev/null
|
|
|
+@@ -1,21 +0,0 @@
|
|
|
+-#!/bin/sh
|
|
|
+-# Copyright (C) 2014 OpenWrt.org
|
|
|
+-
|
|
|
+-nand_takeover() {
|
|
|
+- . /lib/upgrade/nand.sh
|
|
|
+- mtd=$(find_mtd_index "$CI_UBIPART")
|
|
|
+- esize=$(cat /proc/mtd | grep mtd$mtd |cut -d" " -f 3)
|
|
|
+- [ -z "$esize" ] && return 1
|
|
|
+- esize=$(printf "%d" 0x$esize)
|
|
|
+- for a in `seq 0 64`; do
|
|
|
+- mtd -o $((a * esize)) -l 400 dump /dev/mtd$mtd > /tmp/takeover.hdr
|
|
|
+- MAGIC=$(dd if=/tmp/takeover.hdr bs=1 skip=261 count=5 2> /dev/null)
|
|
|
+- SIZE=$(printf "%d" 0x$(dd if=/tmp/takeover.hdr bs=4 count=1 2> /dev/null | hexdump -v -n 4 -e '1/1 "%02x"'))
|
|
|
+- [ "$MAGIC" = "ustar" ] && {
|
|
|
+- mtd -o $((a * esize)) -l $((SIZE + 4)) dump /dev/mtd$mtd | dd bs=1 skip=4 of=/tmp/sysupgrade.tar
|
|
|
+- nand_do_upgrade_stage2 /tmp/sysupgrade.tar
|
|
|
+- }
|
|
|
+- done
|
|
|
+-}
|
|
|
+-
|
|
|
+-boot_hook_add initramfs nand_takeover
|
|
|
+diff --git a/package/system/procd/files/nand.sh b/package/system/procd/files/nand.sh
|
|
|
+deleted file mode 100644
|
|
|
+index 6bd2005344c081df20e5a330a69e49e37225c39f..0000000000000000000000000000000000000000
|
|
|
+--- a/package/system/procd/files/nand.sh
|
|
|
++++ /dev/null
|
|
|
+@@ -1,376 +0,0 @@
|
|
|
+-#!/bin/sh
|
|
|
+-# Copyright (C) 2014 OpenWrt.org
|
|
|
+-#
|
|
|
+-
|
|
|
+-. /lib/functions.sh
|
|
|
+-
|
|
|
+-# 'kernel' partition on NAND contains the kernel
|
|
|
+-CI_KERNPART="kernel"
|
|
|
+-
|
|
|
+-# 'ubi' partition on NAND contains UBI
|
|
|
+-CI_UBIPART="ubi"
|
|
|
+-
|
|
|
+-ubi_mknod() {
|
|
|
+- local dir="$1"
|
|
|
+- local dev="/dev/$(basename $dir)"
|
|
|
+-
|
|
|
+- [ -e "$dev" ] && return 0
|
|
|
+-
|
|
|
+- local devid="$(cat $dir/dev)"
|
|
|
+- local major="${devid%%:*}"
|
|
|
+- local minor="${devid##*:}"
|
|
|
+- mknod "$dev" c $major $minor
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_find_volume() {
|
|
|
+- local ubidevdir ubivoldir
|
|
|
+- ubidevdir="/sys/devices/virtual/ubi/$1"
|
|
|
+- [ ! -d "$ubidevdir" ] && return 1
|
|
|
+- for ubivoldir in $ubidevdir/${1}_*; do
|
|
|
+- [ ! -d "$ubivoldir" ] && continue
|
|
|
+- if [ "$( cat $ubivoldir/name )" = "$2" ]; then
|
|
|
+- basename $ubivoldir
|
|
|
+- ubi_mknod "$ubivoldir"
|
|
|
+- return 0
|
|
|
+- fi
|
|
|
+- done
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_find_ubi() {
|
|
|
+- local ubidevdir ubidev mtdnum
|
|
|
+- mtdnum="$( find_mtd_index $1 )"
|
|
|
+- [ ! "$mtdnum" ] && return 1
|
|
|
+- for ubidevdir in /sys/devices/virtual/ubi/ubi*; do
|
|
|
+- [ ! -d "$ubidevdir" ] && continue
|
|
|
+- cmtdnum="$( cat $ubidevdir/mtd_num )"
|
|
|
+- [ ! "$mtdnum" ] && continue
|
|
|
+- if [ "$mtdnum" = "$cmtdnum" ]; then
|
|
|
+- ubidev=$( basename $ubidevdir )
|
|
|
+- ubi_mknod "$ubidevdir"
|
|
|
+- echo $ubidev
|
|
|
+- return 0
|
|
|
+- fi
|
|
|
+- done
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_get_magic_long() {
|
|
|
+- dd if="$1" skip=$2 bs=4 count=1 2>/dev/null | hexdump -v -n 4 -e '1/1 "%02x"'
|
|
|
+-}
|
|
|
+-
|
|
|
+-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_magic() {
|
|
|
+- local magic=$1
|
|
|
+- case "$magic" in
|
|
|
+- "55424923")
|
|
|
+- echo "ubi"
|
|
|
+- ;;
|
|
|
+- "31181006")
|
|
|
+- echo "ubifs"
|
|
|
+- ;;
|
|
|
+- "68737173")
|
|
|
+- echo "squashfs"
|
|
|
+- ;;
|
|
|
+- "d00dfeed")
|
|
|
+- echo "fit"
|
|
|
+- ;;
|
|
|
+- "4349"*)
|
|
|
+- echo "combined"
|
|
|
+- ;;
|
|
|
+- *)
|
|
|
+- echo "unknown $magic"
|
|
|
+- ;;
|
|
|
+- esac
|
|
|
+-}
|
|
|
+-
|
|
|
+-
|
|
|
+-identify() {
|
|
|
+- identify_magic $(nand_get_magic_long "$1" "${2:-0}")
|
|
|
+-}
|
|
|
+-
|
|
|
+-identify_tar() {
|
|
|
+- identify_magic $(get_magic_long_tar "$1" "$2")
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_restore_config() {
|
|
|
+- sync
|
|
|
+- local ubidev=$( nand_find_ubi $CI_UBIPART )
|
|
|
+- local ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
|
|
+- [ ! "$ubivol" ] &&
|
|
|
+- ubivol="$( nand_find_volume $ubidev rootfs )"
|
|
|
+- mkdir /tmp/new_root
|
|
|
+- if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
|
|
|
+- echo "mounting ubifs $ubivol failed"
|
|
|
+- rmdir /tmp/new_root
|
|
|
+- return 1
|
|
|
+- fi
|
|
|
+- mv "$1" "/tmp/new_root/sysupgrade.tgz"
|
|
|
+- umount /tmp/new_root
|
|
|
+- sync
|
|
|
+- rmdir /tmp/new_root
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_upgrade_prepare_ubi() {
|
|
|
+- local rootfs_length="$1"
|
|
|
+- local rootfs_type="$2"
|
|
|
+- local has_kernel="${3:-0}"
|
|
|
+- local has_env="${4:-0}"
|
|
|
+-
|
|
|
+- local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
|
|
|
+- if [ ! "$mtdnum" ]; then
|
|
|
+- echo "cannot find ubi mtd partition $CI_UBIPART"
|
|
|
+- return 1
|
|
|
+- fi
|
|
|
+-
|
|
|
+- local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
+- if [ ! "$ubidev" ]; then
|
|
|
+- ubiattach -m "$mtdnum"
|
|
|
+- sync
|
|
|
+- ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
+- fi
|
|
|
+-
|
|
|
+- if [ ! "$ubidev" ]; then
|
|
|
+- ubiformat /dev/mtd$mtdnum -y
|
|
|
+- ubiattach -m "$mtdnum"
|
|
|
+- sync
|
|
|
+- ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
+- [ "$has_env" -gt 0 ] && {
|
|
|
+- ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB
|
|
|
+- ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB
|
|
|
+- }
|
|
|
+- fi
|
|
|
+-
|
|
|
+- local kern_ubivol="$( nand_find_volume $ubidev kernel )"
|
|
|
+- local root_ubivol="$( nand_find_volume $ubidev rootfs )"
|
|
|
+- local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
|
|
|
+-
|
|
|
+- # remove ubiblock device of rootfs
|
|
|
+- local root_ubiblk="ubiblock${root_ubivol:3}"
|
|
|
+- if [ "$root_ubivol" -a -e "/dev/$root_ubiblk" ]; then
|
|
|
+- echo "removing $root_ubiblk"
|
|
|
+- if ! ubiblock -r /dev/$root_ubivol; then
|
|
|
+- echo "cannot remove $root_ubiblk"
|
|
|
+- return 1;
|
|
|
+- fi
|
|
|
+- fi
|
|
|
+-
|
|
|
+- # kill volumes
|
|
|
+- [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true
|
|
|
+- [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true
|
|
|
+- [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
|
|
|
+-
|
|
|
+- # update kernel
|
|
|
+- if [ "$has_kernel" = "1" ]; then
|
|
|
+- if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then
|
|
|
+- echo "cannot create kernel volume"
|
|
|
+- return 1;
|
|
|
+- fi
|
|
|
+- fi
|
|
|
+-
|
|
|
+- # update rootfs
|
|
|
+- local root_size_param
|
|
|
+- if [ "$rootfs_type" = "ubifs" ]; then
|
|
|
+- root_size_param="-m"
|
|
|
+- else
|
|
|
+- root_size_param="-s $rootfs_length"
|
|
|
+- fi
|
|
|
+- if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then
|
|
|
+- echo "cannot create rootfs volume"
|
|
|
+- return 1;
|
|
|
+- fi
|
|
|
+-
|
|
|
+- # create rootfs_data for non-ubifs rootfs
|
|
|
+- if [ "$rootfs_type" != "ubifs" ]; then
|
|
|
+- if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then
|
|
|
+- echo "cannot initialize rootfs_data volume"
|
|
|
+- return 1
|
|
|
+- fi
|
|
|
+- fi
|
|
|
+- sync
|
|
|
+- return 0
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_do_upgrade_success() {
|
|
|
+- local conf_tar="/tmp/sysupgrade.tgz"
|
|
|
+-
|
|
|
+- sync
|
|
|
+- [ -f "$conf_tar" ] && nand_restore_config "$conf_tar"
|
|
|
+- echo "sysupgrade successful"
|
|
|
+- umount -a
|
|
|
+- reboot -f
|
|
|
+-}
|
|
|
+-
|
|
|
+-# Flash the UBI image to MTD partition
|
|
|
+-nand_upgrade_ubinized() {
|
|
|
+- local ubi_file="$1"
|
|
|
+- local mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
|
|
+-
|
|
|
+- [ ! "$mtdnum" ] && {
|
|
|
+- CI_UBIPART="rootfs"
|
|
|
+- mtdnum="$(find_mtd_index "$CI_UBIPART")"
|
|
|
+- }
|
|
|
+-
|
|
|
+- if [ ! "$mtdnum" ]; then
|
|
|
+- echo "cannot find mtd device $CI_UBIPART"
|
|
|
+- umount -a
|
|
|
+- reboot -f
|
|
|
+- fi
|
|
|
+-
|
|
|
+- local mtddev="/dev/mtd${mtdnum}"
|
|
|
+- ubidetach -p "${mtddev}" || true
|
|
|
+- sync
|
|
|
+- ubiformat "${mtddev}" -y -f "${ubi_file}"
|
|
|
+- ubiattach -p "${mtddev}"
|
|
|
+- nand_do_upgrade_success
|
|
|
+-}
|
|
|
+-
|
|
|
+-# Write the UBIFS image to UBI volume
|
|
|
+-nand_upgrade_ubifs() {
|
|
|
+- local rootfs_length=`(cat $1 | wc -c) 2> /dev/null`
|
|
|
+-
|
|
|
+- nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
|
|
|
+-
|
|
|
+- local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
+- local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
|
|
+- ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
|
|
|
+-
|
|
|
+- nand_do_upgrade_success
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_board_name() {
|
|
|
+- if type 'platform_nand_board_name' >/dev/null 2>/dev/null; then
|
|
|
+- platform_nand_board_name
|
|
|
+- return
|
|
|
+- fi
|
|
|
+-
|
|
|
+- cat /tmp/sysinfo/board_name
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_upgrade_tar() {
|
|
|
+- local tar_file="$1"
|
|
|
+- local board_name="$(nand_board_name)"
|
|
|
+- local kernel_mtd="$(find_mtd_index $CI_KERNPART)"
|
|
|
+-
|
|
|
+- local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null`
|
|
|
+- local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null`
|
|
|
+-
|
|
|
+- local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)"
|
|
|
+-
|
|
|
+- local has_kernel=1
|
|
|
+- local has_env=0
|
|
|
+-
|
|
|
+- [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && {
|
|
|
+- tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART
|
|
|
+- }
|
|
|
+- [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0
|
|
|
+-
|
|
|
+- nand_upgrade_prepare_ubi "$rootfs_length" "$rootfs_type" "$has_kernel" "$has_env"
|
|
|
+-
|
|
|
+- local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
|
|
|
+- [ "$has_kernel" = "1" ] && {
|
|
|
+- local kern_ubivol="$(nand_find_volume $ubidev kernel)"
|
|
|
+- tar xf $tar_file sysupgrade-$board_name/kernel -O | \
|
|
|
+- ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
|
|
|
+- }
|
|
|
+-
|
|
|
+- local root_ubivol="$(nand_find_volume $ubidev rootfs)"
|
|
|
+- tar xf $tar_file sysupgrade-$board_name/root -O | \
|
|
|
+- ubiupdatevol /dev/$root_ubivol -s $rootfs_length -
|
|
|
+-
|
|
|
+- nand_do_upgrade_success
|
|
|
+-}
|
|
|
+-
|
|
|
+-# Recognize type of passed file and start the upgrade process
|
|
|
+-nand_do_upgrade_stage2() {
|
|
|
+- local file_type=$(identify $1)
|
|
|
+-
|
|
|
+- if type 'platform_nand_pre_upgrade' >/dev/null 2>/dev/null; then
|
|
|
+- platform_nand_pre_upgrade "$1"
|
|
|
+- fi
|
|
|
+-
|
|
|
+- [ ! "$(find_mtd_index "$CI_UBIPART")" ] && CI_UBIPART="rootfs"
|
|
|
+-
|
|
|
+- case "$file_type" in
|
|
|
+- "ubi") nand_upgrade_ubinized $1;;
|
|
|
+- "ubifs") nand_upgrade_ubifs $1;;
|
|
|
+- *) nand_upgrade_tar $1;;
|
|
|
+- esac
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_upgrade_stage2() {
|
|
|
+- [ $1 = "nand" ] && {
|
|
|
+- [ -f "$2" ] && {
|
|
|
+- touch /tmp/sysupgrade
|
|
|
+-
|
|
|
+- killall -9 telnetd
|
|
|
+- killall -9 dropbear
|
|
|
+- killall -9 ash
|
|
|
+-
|
|
|
+- kill_remaining TERM
|
|
|
+- sleep 3
|
|
|
+- kill_remaining KILL
|
|
|
+-
|
|
|
+- sleep 1
|
|
|
+-
|
|
|
+- if [ -n "$(rootfs_type)" ]; then
|
|
|
+- v "Switching to ramdisk..."
|
|
|
+- run_ramfs ". /lib/functions.sh; include /lib/upgrade; nand_do_upgrade_stage2 $2"
|
|
|
+- else
|
|
|
+- nand_do_upgrade_stage2 $2
|
|
|
+- fi
|
|
|
+- return 0
|
|
|
+- }
|
|
|
+- echo "Nand upgrade failed"
|
|
|
+- exit 1
|
|
|
+- }
|
|
|
+-}
|
|
|
+-
|
|
|
+-nand_upgrade_stage1() {
|
|
|
+- [ -f /tmp/sysupgrade-nand-path ] && {
|
|
|
+- path="$(cat /tmp/sysupgrade-nand-path)"
|
|
|
+- [ "$SAVE_CONFIG" != 1 -a -f "$CONF_TAR" ] &&
|
|
|
+- rm $CONF_TAR
|
|
|
+-
|
|
|
+- ubus call system nandupgrade "{\"prefix\": \"$RAM_ROOT\", \"path\": \"$path\" }"
|
|
|
+- exit 0
|
|
|
+- }
|
|
|
+-}
|
|
|
+-
|
|
|
+-# Check if passed file is a valid one for NAND sysupgrade. Currently it accepts
|
|
|
+-# 3 types of files:
|
|
|
+-# 1) UBI - should contain an ubinized image, header is checked for the proper
|
|
|
+-# MAGIC
|
|
|
+-# 2) UBIFS - should contain UBIFS partition that will replace "rootfs" volume,
|
|
|
+-# header is checked for the proper MAGIC
|
|
|
+-# 3) TAR - archive has to include "sysupgrade-BOARD" directory with a non-empty
|
|
|
+-# "CONTROL" file (at this point its content isn't verified)
|
|
|
+-#
|
|
|
+-# You usually want to call this function in platform_check_image.
|
|
|
+-#
|
|
|
+-# $(1): board name, used in case of passing TAR file
|
|
|
+-# $(2): file to be checked
|
|
|
+-nand_do_platform_check() {
|
|
|
+- local board_name="$1"
|
|
|
+- local tar_file="$2"
|
|
|
+- local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null`
|
|
|
+- local file_type="$(identify $2)"
|
|
|
+-
|
|
|
+- [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {
|
|
|
+- echo "Invalid sysupgrade file."
|
|
|
+- return 1
|
|
|
+- }
|
|
|
+-
|
|
|
+- return 0
|
|
|
+-}
|
|
|
+-
|
|
|
+-# Start NAND upgrade process
|
|
|
+-#
|
|
|
+-# $(1): file to be used for upgrade
|
|
|
+-nand_do_upgrade() {
|
|
|
+- echo -n $1 > /tmp/sysupgrade-nand-path
|
|
|
+- install_bin /sbin/upgraded
|
|
|
+- ln -s "$RAM_ROOT"/sbin/upgraded /tmp/upgraded
|
|
|
+- nand_upgrade_stage1
|
|
|
+-}
|