[PATCH v2 1/2] uboot-envtools: add support for multiple config partitions
Bjørn Mork
bjorn at mork.no
Sun Dec 13 14:07:34 EST 2020
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 at mork.no>
---
package/boot/uboot-envtools/Makefile | 1 +
package/boot/uboot-envtools/files/realtek | 8 +++-
.../uboot-envtools/files/uboot-envtools.sh | 38 ++++++++++++-------
3 files changed, 32 insertions(+), 15 deletions(-)
diff --git a/package/boot/uboot-envtools/Makefile b/package/boot/uboot-envtools/Makefile
index 590e38d8831a..601627011d56 100644
--- a/package/boot/uboot-envtools/Makefile
+++ b/package/boot/uboot-envtools/Makefile
@@ -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
diff --git a/package/boot/uboot-envtools/files/realtek b/package/boot/uboot-envtools/files/realtek
index cce0628ffcbb..b64bb23b0747 100644
--- a/package/boot/uboot-envtools/files/realtek
+++ b/package/boot/uboot-envtools/files/realtek
@@ -15,15 +15,21 @@ zyxel,gs1900-10hp)
idx="$(find_mtd_index u-boot-env)"
[ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x400" "0x10000"
+ idx="$(find_mtd_index u-boot-env2)"
+ [ -n "$idx" ] && \
+ ubootenv_add_uci_sys_config "/dev/mtd$idx" "0x0" "0x1000" "0x10000"
;;
*)
idx="$(find_mtd_index u-boot-env)"
[ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000"
+ idx="$(find_mtd_index u-boot-env2)"
+ [ -n "$idx" ] && \
+ ubootenv_add_uci_sys_config "/dev/mtd$idx" "0x0" "0x1000" "0x10000"
;;
esac
config_load ubootenv
-config_foreach ubootenv_add_app_config ubootenv
+config_foreach ubootenv_add_app_config
exit 0
diff --git a/package/boot/uboot-envtools/files/uboot-envtools.sh b/package/boot/uboot-envtools/files/uboot-envtools.sh
index 9218bc4e3912..980c9962b17c 100644
--- a/package/boot/uboot-envtools/files/uboot-envtools.sh
+++ b/package/boot/uboot-envtools/files/uboot-envtools.sh
@@ -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. at ubootenv[-1].dev='$dev'
-set ubootenv. at ubootenv[-1].offset='$offset'
-set ubootenv. at ubootenv[-1].envsize='$envsize'
-set ubootenv. at ubootenv[-1].secsize='$secsize'
-set ubootenv. at 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"
}
-
--
2.20.1
More information about the openwrt-devel
mailing list