base-files: allow non-standard rootfs volume name in UBI in sysupgrade
authorINAGAKI Hiroshi <musashino.open@gmail.com>
Tue, 1 Jan 2019 00:15:34 +0000 (09:15 +0900)
committerChristian Lamparter <chunkeey@gmail.com>
Tue, 1 Jan 2019 15:38:20 +0000 (16:38 +0100)
This commit allows to use non-standard UBI volume name as the rootfs
volume in sysupgrade.

ex.:
  The U-Boot on Buffalo WXR-2533DHP checks existence and checksum of
  "ubi_rootfs" volume when booting, so this name is required.

OpenWrt currently provides several patches:

490-ubi-auto-attach-mtd-device-named-ubi-or-data-on-boot.patch
491-ubi-auto-create-ubiblock-device-for-rootfs.patch
492-try-auto-mounting-ubi0-rootfs-in-init-do_mounts.c.patch

to facilitate ubi rootfs automount. However the upstream kernel
also supports the means of booting from a fully custom ubi
partition name and ubi volume name via bootargs/kernel's cmdline
parameters:

ubi.mtd=mtd_partition_name
ubi.block=rootfs_volume_name
root=/dev/ubiblock$X_$Y

For more information and examples visit the wiki over at linux-mtd:
<http://www.linux-mtd.infradead.org/faq/ubifs.html>
<http://www.linux-mtd.infradead.org/doc/ubi.html>

Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com>
Signed-off-by: Christian Lamparter <chunkeey@gmail.com> [reworded commit]
package/base-files/files/lib/upgrade/nand.sh

index 42f488c..99916a4 100644 (file)
@@ -10,6 +10,9 @@ CI_KERNPART="${CI_KERNPART:-kernel}"
 # 'ubi' partition on NAND contains UBI
 CI_UBIPART="${CI_UBIPART:-ubi}"
 
+# 'rootfs' partition on NAND contains the rootfs
+CI_ROOTPART="${CI_ROOTPART:-rootfs}"
+
 ubi_mknod() {
        local dir="$1"
        local dev="/dev/$(basename $dir)"
@@ -99,7 +102,7 @@ nand_restore_config() {
        local ubidev=$( nand_find_ubi $CI_UBIPART )
        local ubivol="$( nand_find_volume $ubidev rootfs_data )"
        [ ! "$ubivol" ] &&
-               ubivol="$( nand_find_volume $ubidev rootfs )"
+               ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
        mkdir /tmp/new_root
        if ! mount -t ubifs /dev/$ubivol /tmp/new_root; then
                echo "mounting ubifs $ubivol failed"
@@ -143,7 +146,7 @@ nand_upgrade_prepare_ubi() {
        fi
 
        local kern_ubivol="$( nand_find_volume $ubidev $CI_KERNPART )"
-       local root_ubivol="$( nand_find_volume $ubidev rootfs )"
+       local root_ubivol="$( nand_find_volume $ubidev $CI_ROOTPART )"
        local data_ubivol="$( nand_find_volume $ubidev rootfs_data )"
 
        # remove ubiblock device of rootfs
@@ -158,7 +161,7 @@ nand_upgrade_prepare_ubi() {
 
        # kill volumes
        [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_KERNPART || true
-       [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true
+       [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N $CI_ROOTPART || true
        [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true
 
        # update kernel
@@ -176,7 +179,7 @@ nand_upgrade_prepare_ubi() {
        else
                root_size_param="-s $rootfs_length"
        fi
-       if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then
+       if ! ubimkvol /dev/$ubidev -N $CI_ROOTPART $root_size_param; then
                echo "cannot create rootfs volume"
                return 1;
        fi
@@ -233,7 +236,7 @@ nand_upgrade_ubifs() {
        nand_upgrade_prepare_ubi "$rootfs_length" "ubifs" "0" "0"
 
        local ubidev="$( nand_find_ubi "$CI_UBIPART" )"
-       local root_ubivol="$(nand_find_volume $ubidev rootfs)"
+       local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
        ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1
 
        nand_do_upgrade_success
@@ -268,7 +271,7 @@ nand_upgrade_tar() {
                        ubiupdatevol /dev/$kern_ubivol -s $kernel_length -
        }
 
-       local root_ubivol="$(nand_find_volume $ubidev rootfs)"
+       local root_ubivol="$(nand_find_volume $ubidev $CI_ROOTPART)"
        tar xf $tar_file ${board_dir}/root -O | \
                ubiupdatevol /dev/$root_ubivol -s $rootfs_length -