dce388fdc7
c3cdc53164 ag71xx: Fix rx ring buffer stall on small packets flood on qca956x and qca953x. e07ee06aad ar71xx: QCA956X: add missing register 7bc25dfa63 mvebu: fix mvneta build with Linux 4.4.110 541a1a7ff5 lantiq: activate noise margin delta for VDSL too dea8979a81 Lantiq: make possible to tweak DSL SRN from UCI 9934231670 libubox: update to latest lede-17.01 git HEAD 7f5a040359 kernel: update kernel 4.4 to version 4.4.110 ddedcb19e5 brcm47xx: relocate the stack in loader da43069f5b brcm47xx: relocate loader to higher address f19416ae9d fstools: backport fix from master branch 55c23e44f4 procd: update to latest git HEAD ffbbcc9b34 brcm47xx: image: build firmware for Asus WL-500g Deluxe 0426596453 Revert "iptables: fix nftables compile issue (FS#711)" da126d557c iptables: fix nftables compile issue (FS#711) 473e994571 rpcd: backport version 2017-12-07 from master b833944eb2 uci: update to HEAD of lede-17.01 branch dca4dfacf2 iproute2: cake: fix patch format error ee55629a30 kernel: bump 4.4 to 4.4.108 for 17.01 c4e9487cf5 iproute2: cake: support new operating modes for 17.01 4f1dca9eca kmod-sched-cake: bump to latest bake of cake for 17.01 959a49dc15 ramips: fix widora neo diag led a1908023cc base-files: fix logic when to show failsafe banner 1c9299877b base-files: set FAILSAFE in /etc/profile when /tmp/.failsafe exists 2603c85060 wireguard: bump to 20171221 f8a441e020 kernel: bump 4.4 to 4.4.107 ceea0ac25d wireguard: bump to 20171211 ebb54740c7 brcm47xx: remove target specific network preinit config b41d154f50 rules.mk: export TMPDIR e719a08cc1 usbutils: Update usb.ids file to latest 4cfcfecf76 hostapd: remove unused local var declaration 796bc21023 hostapd: don't set htmode for wpa_supplicant 50147d41b9 libnl-tiny: use fixed message size instead of using the page size 0625814426 packages: nvram: fix memory leak in _nvram_free 0f175041ad mac80211: don't pass the hostapd ctrl iface in adhoc 05f0fac189 hostapd: explicitly set beacon interval for wpa_supplicant 7f78a86254 hostapd: set mcast_rate in mesh mode c315843f88 igmpproxy: remove firewall rules when service is stopped 91e48304a9 openvpn: add support to start/stop single instances e5c284bb81 package/elfutils: add CFLAG -Wno-format-nonliteral dde29b2b01 tools/coreutils: install readlink 2f75641b1f uhttpd: fix query string handling 79024cd3be openssl: fix cryptodev config dependency bead60c2d3 uqmi: replace legacy command invoke with newer type 5872c19c63 procd: Always tell cmake whether to include seccomp support or not cd901ef1a6 libunwind: disable building with ssp 1aedf2f149 tools/squashfs: use host cflags 7fa70027d4 ppp: make the patches apply correctly again d63eb474b3 ppp: fix compile warning 9bd667fc24 dropbear: fix PKG_CONFIG_DEPENDS 9d1bfb8f4d dropbear: make ssh compression support configurable ed4f4f1a8e procd: Install seccomp-trace symlink 77e79b2dd0 openvpn: update to 2.4.4 5beb0abc83 build: remove @ as it's causing an error eff1f7e7ef usbutils: avoid duplicating the git revision 9cf371c1f4 dnsmasq: Pass TARGET_CPPFLAGS to Makefile 2f80d84638 wwan: json format in some modem definitions c61cf4a447 base-files: add /etc/profile.d to conffiles bdc998c696 base-files: order conffiles alphabetically c58e824acc procd: mdns: Support txt values with spaces aaa73fea36 ar71xx: fix switch port numbering on RB750r2 and RB750UPr2 b69ea02a00 scripts/dowload.pl: use glob to expand target dir 80a22eee4b samba36: Remove syslog and load printers lines. 71797b6eca samba36: Don't resolve interfaces. 1458bc2d9c samba36: Remove guest ok since LuCI configures it. f0065554b2 config: make CONFIG_ALL_* select other CONIFG_ALL_* options 2b88309335 nvram: add help message for nvram magic not found 118a2ea0bc nvram: improve argument check when program start c446ee4ad4 nvram: add usage() function 9e84d333b1 nvram: fix memory leak 3b6b892d67 ca-certificates: Update to 20170717 23b9dc2eca base-files: drop unused preinit_echo function ca7c9db47f tools/pkg-config: Update to 0.29.2 75d8127338 base-files: suppress uci not found output in login.sh b616aa6db7 scripts/package-metadata.pl: inhibit compile deps on missing build types 2e1a87a3e1 build: bundle-libraries.sh: do not override argv[0] in inner exec calls a37f8b0c6e samba36: Remove legacy options 89c4f47caa scripts/download.pl: Adjust URLs 338968a170 build: fix invocation of bundled ld.so in SDK and Imagebuilder 0a976262a5 kmod-sched-cake: drop maintainer 610e2afdcc zlib: use default Build/Configure rule cf11a41af6 lzo: use default Build/Configure rule c86490605c netfilter: add iptables-mod-rpfilter package ea23ba9a25 bzip2: add symlink to binary d413c75d24 dropbear: add option to set max auth tries 8693ab5152 dropbear: server support option '-T' max auth tries 0e6a6c8487 hostapd: configure NAS ID regardless of encryption ef3649d90e hostapd: add acct_interval option 3027a68093 valgrind: bump to 3.13.0 3129db331c busybox: backport 'ip rule suppress_{prefixlength, ifgroup}' 86158ad37d libunwind: update to version 1.2.1 59004433e9 imagebuilder: don't rewrite package list output 74eeb07817 imagebuilder: clean package_list 7f3f2bc03b build: remove old kernel-headers build directories c7234e3036 imagebuilder: add package_list function 9c3e4b5434 base-files: board.json's switch reset means existence, not argument 7d1f4073ce gdb: remove Build/Compile rule ; default one works 9a99039989 rb532: enable high-res timers, refresh kernel config e802cbfc25 xburst: enable high-res timers, refresh kernel config e01367e3af kernel: add CONFIG_SCHED_HRTICK=y to the generic config 6e1e2e7b96 package/grub2: update to 2.02 13a5568d6e ip17xx: correct aneg_done return value 816fb3433b mvswitch: fix autonegotiation issue 41ee45428b ppp: propagate master firewall zone to dynamic slave interface a44c44077e usbmode: remove devices with unsupported modes e8bd0a606a tar: override symlink permissions 59a1c1675d tools/sparse: Update to snapshot 2017-03-31 a6e5943a2a elfutils: Pass -Wno-unused-result to silence warnings as errors 08070221ed gcc: fix documentation entries added by 910-mbsd_multi.patch ef43c04c34 scripts/download.pl: print the command used to download files 6e09b20563 tools/libressl: update to 2.5.4 08be74f699 tools/isl: update to 0.18 26ea59cd01 lldpd: bump to 0.9.7 444b64f533 libunwind: update to 1.2 e5612d6640 lantiq: spi: double time out tolerance 28c350f2f0 base-files: fix default procd reload 108a42bcba ramips: support jumbo frame on mt7621 up to 2k 8d4c047dd1 lldpd: drop specific respawn params [use system-wide] 8ee15ed61a elfutils: bump to 0.169 9754a9c606 devel/trace-cmd: Update to 2.6.1 79def69047 comgt-3g: enable modem before to setpin 070463fb61 devel/strace: Update to 4.16 67caf6bbce network/utils/ipset: Update to 6.32 f0a493160c mac80211: gracefully handle preexisting VIF 827f108b42 scripts: Probe external toolchains for libthread-db bb9eb2c96e build: new fixes for symlinked .config handling 4607007a86 build: allow val.% targets to bypass the prepare steps 90575776b7 x86: keep /boot mounted for kexec 6b9eb0c73a hostapd: fix reload frequency change patch 040ff6fdbd build: remove absolute path to perl and replace with /usr/bin/env perl 98588273b1 kernel: allow selecting RTC drivers on targets without explicit RTC support f30114c7c4 dropbear: fix procd interface trigger install 3e7f191008 include/packages-defaults.mk: Remove LARGEFILE option a1392e08c5 netifd: return error status in reload_service 10182cb2c6 grub2: update to 2.02~rc2 38ea91ea9a base-files: use restart if no reload hook for service 9b24d99b91 iproute2: add libgenl.h and ll_map.h to InstallDev section 94597229c3 busybox: fix installation of cron and ntpd scripts in the default config 9ce30f7175 kernel: move initramfs's init script out of base-files c8a0f3aa29 target.mk: check that CPU_TYPE has known CPU_CFLAGS mapping 977db9f08a scripts/download.pl: fix error message on hash mismatch 7fb03d9610 netifd: fix fw3 warnings in dhcp script f69d73f1b2 build: allow specifying flow-control to grub on serial console 91821c8c0b kexec-tools: get kexec running on MUSL and x86 hardware affff02798 busybox: don't install NTP scripts if NTP isn't configured 7ccfa826ee ar8327: Add workarounds for AR8337 switch. 0aafbf6c00 build: fix STAMP_PREPARED with quilt 80304ace58 lantiq: remove lantiq_board_model, it is unused 8be5b12ea1 lantiq: remove lantiq_board_name, use the generic function instead 0f0d742ae3 lantiq: move lantiq_board_detect() to 03_preinit_board.sh f173464f13 base-files: add generic board_name function to functions.sh 62a8252a0f mac80211: Fix race condition leading to wifi interfaces not coming up at boot sometimes. 5f03ce1213 scripts: only generate config from feature flag if fully match f7f69130e5 lzo: Update to 2.10 6ba0cc14e9 tools/coreutils: Update to 8.27 100553d605 tools/libressl: Update to 2.5.1 25fe034861 tools/dosfstools: Update to 4.1 ed4976d884 tools/sed: Update to 4.4 7263e3cdca lldpd: bump to 0.9.6 3225fbfcbf x86: image: drop duplicated copy of bzImage into vmlinuz 37aae44a47 libnl: Fix building with uClibc 950439234e toolchain: add musl libc.so to external toolchain cfb5a550e4 iwcap: fix handling kill signal during dump 1411493569 x86: image: drop unneeded grub call 58e0c0feec x86: image: drop unused ROOTDELAY variable 05f0b8d18b ccache: update to 3.3.4 15efa09507 base-files: add submission service port 56b9f0ffc0 procd.sh: use parameterized respawn values 28c9731984 toolchain: Allow external toolchains to specify libthread-db 2dd9b62f82 rssileds: Fix build with external toolchains 2d31ec4c1b adb: Also pass TARGET_CPPFLAGS ec395eeb17 swconfig: Link with libubox c6dd059a9a px5g: Fix TARGET_LDFLAGS and add TARGET_CPPFLAGS 12b811a609 omcproxy: Update to latest HEAD 1e3ff02ea5 bsdiff: Also pass down TARGET_CPPFLAGS 051a33e7c9 thc-ipv6: Allow overriding CFLAGS a91d8dd162 tools/m4: update 1.4.18 acd481470c build: get rid of FIND_L from host.mk 11cd6077ba build: unsilence move command 903a404663 build: skip headers install and config on make target/linux/prepare a7fc27edce build: make Host/Install/Default use Host/Compile/Default with an extra argument 94f079e338 build: Pass -iremap gcc option as a single argument 3056122bf7 toolchain/gcc: parallelize make install a33b0ced78 toolchain/musl: parallelize make install 1d0f7e3136 imagebuilder: make submake invocations less verbose bdb05f5ef5 gcc: remove obsolete uclibc patch 90a43e508e toolchain/gcc: reduce source directory size by about 420 MB 82615922b0 bcm53xx: suppress osafeloader info error messages during flashing c566a9e563 toolchain: Broaden the executable loader pattern 3387158e45 build: Suffix build directory with _$(LIBC) for external toolchains 2428b6d6b6 tools/sstrip: Fix compile under standard linux. 50b478956a openssl: update to 1.0.2n 135aa3ba7e base-files: upgrade: make get_partitions() endian agnostic 207bcea1de cyassl: update to wolfssl 3.12.2 (1 CVE) 3bb881862b mdadm: fix parameter quoting 6c1b6e8221 mdadm: Fix config generation 4fc0fb3ca3 mdadm: Do not check RUN_DIR 157b892994 kernel: remove out of tree direct-io disable hack adc9f935c3 utils/mdadm: Update to 4.0 8bf67f63b9 mdadm: extend uci config support 4af145ea67 rules.mk: make PKG_CONFIG_DEPENDS properly track string values 2b664499cd kernel: bump 4.4 to 4.4.103 for 17.01 ed82c52a4a uqmi: also try newer pin verification b41a2e646e opkg: bump to version 2017-12-08 f5f5f583f9 hostapd: backport fix for wnm_sleep_mode=0 19ebc19f54 hostapd: Expose the tdls_prohibit option to UCI 3590316121 dnsmasq: backport infinite dns retries fix 060b7f1fbb curl: apply CVE 2017-8816 and 2017-8817 security patches 4b5861c47d mt76: update to the latest version f19d47f848 tools: patch various gnu tools for macOS 10.13 e5a10bc0fc samba36: backport an upstream fix for an information leak (CVE-2017-15275) d77fe9219a ramips: backport MT7628 pinmux fixes 9601e6a0e2 ramips: add missing reset button for Nexx WT1520 0946ec0f46 wireguard: bump to snapshot 20171127
935 lines
25 KiB
Diff
935 lines
25 KiB
Diff
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 3fcf20a84433eb1a41e970cd010cc414bb180fad..0813f2ae76e2a6b83b5d077b61010d13c1a50fee 100644
|
|
--- a/package/base-files/Makefile
|
|
+++ b/package/base-files/Makefile
|
|
@@ -19,7 +19,9 @@ PKG_BUILD_DEPENDS:=usign/host
|
|
PKG_LICENSE:=GPL-2.0
|
|
|
|
# Extend depends from version.mk
|
|
-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
|
|
|
|
@@ -31,7 +33,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)
|
|
@@ -107,9 +109,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 6c690e49f4a0312a8a6eed13ab36b8a67a485556..cf923618abbbbba475cb3599bfe66ef30b60cd48 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
|
|
@@ -113,7 +93,7 @@ CMAKE_OPTIONS += -DSECCOMP_SUPPORT=$(SECCOMP) -DUTRACE_SUPPORT=$(SECCOMP)
|
|
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
|
|
-}
|