uboot-envtools: add support for multiple config partitions

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>
(cherry picked from commit a3e9fd7e5b)
This commit is contained in:
Bjørn Mork 2021-04-06 11:43:03 +02:00 committed by Tianling Shen
parent 90c8c47188
commit d1dca8343b
No known key found for this signature in database
GPG Key ID: 6850B6345C862176
3 changed files with 32 additions and 15 deletions

View File

@ -61,6 +61,7 @@ MAKE_FLAGS += \
define Package/uboot-envtools/conffiles define Package/uboot-envtools/conffiles
/etc/config/ubootenv /etc/config/ubootenv
/etc/fw_env.config /etc/fw_env.config
/etc/fw_sys.config
endef endef
define Package/uboot-envtools/install define Package/uboot-envtools/install

View File

@ -18,15 +18,21 @@ zyxel,gs1900-10hp)
idx="$(find_mtd_index u-boot-env)" idx="$(find_mtd_index u-boot-env)"
[ -n "$idx" ] && \ [ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x400" "0x10000" 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)" idx="$(find_mtd_index u-boot-env)"
[ -n "$idx" ] && \ [ -n "$idx" ] && \
ubootenv_add_uci_config "/dev/mtd$idx" "0x0" "0x10000" "0x10000" 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 esac
config_load ubootenv config_load ubootenv
config_foreach ubootenv_add_app_config ubootenv config_foreach ubootenv_add_app_config
exit 0 exit 0

View File

@ -3,34 +3,44 @@
# Copyright (C) 2011-2012 OpenWrt.org # Copyright (C) 2011-2012 OpenWrt.org
# #
ubootenv_add_uci_config() { _ubootenv_add_uci_config() {
local dev=$1 local cfgtype=$1
local offset=$2 local dev=$2
local envsize=$3 local offset=$3
local secsize=$4 local envsize=$4
local numsec=$5 local secsize=$5
local numsec=$6
uci batch <<EOF uci batch <<EOF
add ubootenv ubootenv add ubootenv $cfgtype
set ubootenv.@ubootenv[-1].dev='$dev' set ubootenv.@$cfgtype[-1].dev='$dev'
set ubootenv.@ubootenv[-1].offset='$offset' set ubootenv.@$cfgtype[-1].offset='$offset'
set ubootenv.@ubootenv[-1].envsize='$envsize' set ubootenv.@$cfgtype[-1].envsize='$envsize'
set ubootenv.@ubootenv[-1].secsize='$secsize' set ubootenv.@$cfgtype[-1].secsize='$secsize'
set ubootenv.@ubootenv[-1].numsec='$numsec' set ubootenv.@$cfgtype[-1].numsec='$numsec'
EOF EOF
uci commit ubootenv 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() { ubootenv_add_app_config() {
local cfgtype
local dev local dev
local offset local offset
local envsize local envsize
local secsize local secsize
local numsec local numsec
config_get cfgtype "$1" TYPE
config_get dev "$1" dev config_get dev "$1" dev
config_get offset "$1" offset config_get offset "$1" offset
config_get envsize "$1" envsize config_get envsize "$1" envsize
config_get secsize "$1" secsize config_get secsize "$1" secsize
config_get numsec "$1" numsec 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"
} }