aboutsummaryrefslogtreecommitdiffstats
path: root/package/base-files/files
diff options
context:
space:
mode:
Diffstat (limited to 'package/base-files/files')
-rw-r--r--package/base-files/files/lib/upgrade/nand.sh45
-rwxr-xr-xpackage/base-files/files/lib/upgrade/stage22
2 files changed, 33 insertions, 14 deletions
diff --git a/package/base-files/files/lib/upgrade/nand.sh b/package/base-files/files/lib/upgrade/nand.sh
index 76a984483e..19e51c55c0 100644
--- a/package/base-files/files/lib/upgrade/nand.sh
+++ b/package/base-files/files/lib/upgrade/nand.sh
@@ -127,17 +127,41 @@ nand_restore_config() {
}
nand_remove_ubiblock() {
- local ubivol=$1
- local ubiblk=ubiblock${ubivol:3}
- if [ -e /dev/$ubiblk ]; then
- echo "removing $ubiblk"
- if ! ubiblock -r /dev/$ubivol; then
+ local ubivol="$1"
+
+ local ubiblk="ubiblock${ubivol:3}"
+ if [ -e "/dev/$ubiblk" ]; then
+ umount "/dev/$ubiblk" && echo "unmounted /dev/$ubiblk" || :
+ if ! ubiblock -r "/dev/$ubivol"; then
echo "cannot remove $ubiblk"
return 1
fi
fi
}
+nand_detach_ubi() {
+ local ubipart="$1"
+
+ local mtdnum="$( find_mtd_index "$ubipart" )"
+ if [ ! "$mtdnum" ]; then
+ echo "cannot find ubi mtd partition $ubipart"
+ return 1
+ fi
+
+ local ubidev="$( nand_find_ubi "$ubipart" )"
+ if [ "$ubidev" ]; then
+ for ubivol in $(find /dev -name "${ubidev}_*" -maxdepth 1 | sort); do
+ ubivol="${ubivol:5}"
+ nand_remove_ubiblock "$ubivol" || :
+ umount "/dev/$ubivol" && echo "unmounted /dev/$ubivol" || :
+ done
+ if ! ubidetach -m "$mtdnum"; then
+ echo "cannot detach ubi mtd partition $ubipart"
+ return 1
+ fi
+ fi
+}
+
nand_upgrade_prepare_ubi() {
local rootfs_length="$1"
local rootfs_type="$2"
@@ -235,15 +259,10 @@ nand_upgrade_prepare_ubi() {
nand_upgrade_ubinized() {
local ubi_file="$1"
- local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
- if [ ! "$mtdnum" ]; then
- echo "cannot find ubi mtd partition $CI_UBIPART"
- return 1
- fi
+ nand_detach_ubi "$CI_UBIPART" || return 1
- local mtddev="/dev/mtd${mtdnum}"
- ubidetach -p "${mtddev}" || :
- ubiformat "${mtddev}" -y -f "${ubi_file}" && ubiattach -p "${mtddev}"
+ local mtdnum="$( find_mtd_index "$CI_UBIPART" )"
+ ubiformat "/dev/mtd$mtdnum" -y -f "$ubi_file" && ubiattach -m "$mtdnum"
}
# Write the UBIFS image to UBI rootfs volume
diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2
index 5e0d73631b..97e0b881e9 100755
--- a/package/base-files/files/lib/upgrade/stage2
+++ b/package/base-files/files/lib/upgrade/stage2
@@ -41,7 +41,7 @@ switch_to_ramfs() {
pivot_root mount_root reboot sync kill sleep \
md5sum hexdump cat zcat dd tar \
ls basename find cp mv rm mkdir rmdir mknod touch chmod \
- '[' printf wc grep awk sed cut \
+ '[' printf wc grep awk sed cut sort \
mtd partx losetup mkfs.ext4 nandwrite flash_erase \
ubiupdatevol ubiattach ubiblock ubiformat \
ubidetach ubirsvol ubirmvol ubimkvol \