[openwrt/openwrt] package: basefiles: add oem image dectection to fwtool.sh
LEDE Commits
lede-commits at lists.infradead.org
Wed Apr 30 04:15:47 PDT 2025
robimarko pushed a commit to openwrt/openwrt.git, branch main:
https://git.openwrt.org/8266ff6591b11fd293718640a6a69d2407c9b022
commit 8266ff6591b11fd293718640a6a69d2407c9b022
Author: Scott Mercer <TheRootEd24 at gmail.com>
AuthorDate: Mon Apr 21 11:23:07 2025 -0400
package: basefiles: add oem image dectection to fwtool.sh
with more new device, now able to flash oem
images from luci, fwtools erroneously marks
firmware as incompatible and does not warn
across keeping configs during update.
this patch aims to add both oem detection
and a warning msg advising firmware is compatible
(OpenWrt -> OEM) but configuration is not
tested on ipq5018: gl-b3000
Signed-off-by: Scott Mercer <TheRootEd24 at gmail.com>
package: basefiles: add oem image dectection to fwtool
some new devices are now able to flash oem
images from luci, fwtools erroneously marks
firmware as incompatible and does not warn
of keeping configs during update for this condition.
this patch aims to add both oem detection
and trigger the existing warning msg, advising firmware is compatible
(OpenWrt -> OEM) but configuration is not
tested on ipq5018: gl-b3000
Signed-off-by: Scott Mercer <TheRootEd24 at gmail.com>
Link: https://github.com/openwrt/openwrt/pull/18554
Signed-off-by: Robert Marko <robimarko at gmail.com>
---
package/base-files/files/lib/upgrade/fwtool.sh | 26 +++++++++++++++++++++++---
1 file changed, 23 insertions(+), 3 deletions(-)
diff --git a/package/base-files/files/lib/upgrade/fwtool.sh b/package/base-files/files/lib/upgrade/fwtool.sh
index 8bd00a3332..0bc6e6924e 100644
--- a/package/base-files/files/lib/upgrade/fwtool.sh
+++ b/package/base-files/files/lib/upgrade/fwtool.sh
@@ -42,7 +42,9 @@ fwtool_check_image() {
v "Invalid image metadata"
return 1
}
-
+ # Step 1. check if oem_name file exist and is not empty
+ # If the above is true store the contents (b3000) in $oem value for later
+ [ -s /tmp/sysinfo/oem_name ] && oem="$(cat /tmp/sysinfo/oem_name)"
device="$(cat /tmp/sysinfo/board_name)"
devicecompat="$(uci -q get system. at system[0].compat_version)"
[ -n "$devicecompat" ] || devicecompat="1.0"
@@ -61,7 +63,16 @@ fwtool_check_image() {
json_get_keys dev_keys
for k in $dev_keys; do
json_get_var dev "$k"
- if [ "$dev" = "$device" ]; then
+ # Step 2.
+ # lets start with the original case [ "$dev" = "$device" ]
+ # if the evaluated firmware is vanila openwrt, this evals as true -ie
+ # [ ("$dev" == "glinet.gl-b3000") == ("$device" == "glinet,gl-b3000") ]
+ # however if the firmware is oem then $dev = b3000 and the above check fails resulting
+ # in the erroneous warnings.
+ # so we add the secondary check [ "$dev" = "$oem" ];
+ # If in Step 1 the oem_file was found and valid, the $oem == "b3000" so
+ # [ ("$dev" == "b3000) == ("$oem" == "b3000") ] so firmware is valid oem
+ if [ "$dev" = "$device" ] || [ "$dev" = "$oem" ]; then
# major compat version -> no sysupgrade
if [ "${devicecompat%.*}" != "${imagecompat%.*}" ]; then
v "The device is supported, but this image is incompatible for sysupgrade based on the image version ($devicecompat->$imagecompat)."
@@ -70,7 +81,16 @@ fwtool_check_image() {
fi
# minor compat version -> sysupgrade with -n required
- if [ "${devicecompat#.*}" != "${imagecompat#.*}" ] && [ "$SAVE_CONFIG" = "1" ]; then
+ # Step 3.
+ # here we must check if $dev == $oem to use this native compatability check
+ # so we add the check for [ "$dev" = "$oem" ]
+ if (([ "${devicecompat#.*}" != "${imagecompat#.*}" ] || [ "$dev" = "$oem" ])) && [ "$SAVE_CONFIG" = "1" ]; then
+ # Step 4.
+ # here we have to gaurd against the default case, oem may exsist and default will pass
+ # the original check [ "${devicecompat#.*}" != "${imagecompat#.*}" ] so we must
+ # explicitly check $dev == $oem, if it is we update(reuse) the $devicecompat and imagecompat
+ # variable to reflect the case - ( Openwrt -> OEM )
+ [ "$dev" = "$oem" ] && devicecompat="Openwrt " && imagecompat=" OEM"
[ "$IGNORE_MINOR_COMPAT" = 1 ] && return 0
v "The device is supported, but the config is incompatible to the new image ($devicecompat->$imagecompat). Please upgrade without keeping config (sysupgrade -n)."
[ -n "$compatmessage" ] && v "$compatmessage"
More information about the lede-commits
mailing list