uboot-envtools: add support for multiple config partitions
authorBjørn Mork <bjorn@mork.no>
Tue, 6 Apr 2021 09:43:03 +0000 (11:43 +0200)
committerPetr Štetiar <ynezz@true.cz>
Thu, 8 Apr 2021 07:20:59 +0000 (09:20 +0200)
Most (all?) of the realtek devices have two u-boot config partitions
with a different set of variables in each. The U-Boot shell provides
two sets of apps to manipulate these:

 printenv- print environment variables
 printsys- printsys - print system information variables
 saveenv - save environment variables to persistent storage
 savesys - savesys - save system information variables to persistent storage
 setenv  - set environment variables
 setsys  - setsys  - set system information variables

Add support for multiple ubootenv configuration types, allowing
more than one configuration file.

Section names are not suitable for naming the different
configurations since each file can be the result of multiple sections
in case of backup partitions.

Signed-off-by: Bjørn Mork <bjorn@mork.no>
package/boot/uboot-envtools/Makefile
package/boot/uboot-envtools/files/realtek
package/boot/uboot-envtools/files/uboot-envtools.sh

index a9eccec0cec97a705069a6fe3d0b79de4e2802a9..03dc6c678d748e0bcabc277667879e06d3360d22 100644 (file)
@@ -61,6 +61,7 @@ MAKE_FLAGS += \
 define Package/uboot-envtools/conffiles
 /etc/config/ubootenv
 /etc/fw_env.config
+/etc/fw_sys.config
 endef
 
 define Package/uboot-envtools/install
index a91ca826044e2fccb2f3e45dcda9c896ddea18c5..75a399208e67ef10d4625aa52d0c207597a35349 100644 (file)
@@ -18,15 +18,21 @@ zyxel,gs1900-10hp)
        idx="$(find_mtd_index u-boot-env)"
        [ -n "$idx" ] && \
                ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x400" "0x10000"
+       idx2="$(find_mtd_index u-boot-env2)"
+       [ -n "$idx2" ] && \
+               ubootenv_add_uci_sys_config "/dev/mtd$idx2" "0x0" "0x1000" "0x10000"
        ;;
 *)
        idx="$(find_mtd_index u-boot-env)"
        [ -n "$idx" ] && \
                ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000"
+       idx2="$(find_mtd_index u-boot-env2)"
+       [ -n "$idx2" ] && \
+               ubootenv_add_uci_sys_config "/dev/mtd$idx2" "0x0" "0x1000" "0x10000"
        ;;
 esac
 
 config_load ubootenv
-config_foreach ubootenv_add_app_config ubootenv
+config_foreach ubootenv_add_app_config
 
 exit 0
index 9218bc4e391297a29778c961d1564a4c1766aa37..980c9962b17c5d0a5f26e5ee456f33ebfca9697d 100644 (file)
@@ -3,34 +3,44 @@
 # Copyright (C) 2011-2012 OpenWrt.org
 #
 
-ubootenv_add_uci_config() {
-       local dev=$1
-       local offset=$2
-       local envsize=$3
-       local secsize=$4
-       local numsec=$5
+_ubootenv_add_uci_config() {
+       local cfgtype=$1
+       local dev=$2
+       local offset=$3
+       local envsize=$4
+       local secsize=$5
+       local numsec=$6
        uci batch <<EOF
-add ubootenv ubootenv
-set ubootenv.@ubootenv[-1].dev='$dev'
-set ubootenv.@ubootenv[-1].offset='$offset'
-set ubootenv.@ubootenv[-1].envsize='$envsize'
-set ubootenv.@ubootenv[-1].secsize='$secsize'
-set ubootenv.@ubootenv[-1].numsec='$numsec'
+add ubootenv $cfgtype
+set ubootenv.@$cfgtype[-1].dev='$dev'
+set ubootenv.@$cfgtype[-1].offset='$offset'
+set ubootenv.@$cfgtype[-1].envsize='$envsize'
+set ubootenv.@$cfgtype[-1].secsize='$secsize'
+set ubootenv.@$cfgtype[-1].numsec='$numsec'
 EOF
        uci commit ubootenv
 }
 
+ubootenv_add_uci_config() {
+       _ubootenv_add_uci_config "ubootenv" "$@"
+}
+
+ubootenv_add_uci_sys_config() {
+       _ubootenv_add_uci_config "ubootsys" "$@"
+}
+
 ubootenv_add_app_config() {
+       local cfgtype
        local dev
        local offset
        local envsize
        local secsize
        local numsec
+       config_get cfgtype "$1" TYPE
        config_get dev "$1" dev
        config_get offset "$1" offset
        config_get envsize "$1" envsize
        config_get secsize "$1" secsize
        config_get numsec "$1" numsec
-       grep -q "^[[:space:]]*${dev}[[:space:]]*${offset}" /etc/fw_env.config || echo "$dev $offset $envsize $secsize $numsec" >>/etc/fw_env.config
+       grep -q "^[[:space:]]*${dev}[[:space:]]*${offset}" "/etc/fw_${cfgtype#uboot}.config" || echo "$dev $offset $envsize $secsize $numsec" >>"/etc/fw_${cfgtype#uboot}.config"
 }
-