summaryrefslogtreecommitdiffstats
path: root/package/utils
diff options
context:
space:
mode:
authorDaniel Golle <daniel@makrotopia.org>2024-07-17 16:22:10 +0100
committerDaniel Golle <daniel@makrotopia.org>2024-07-18 11:48:53 +0100
commitec2dc60d575f6ef4ace4aa36d4940b7e13034778 (patch)
tree5d6d52d2c8728db357fa159c841770ee906a7b36 /package/utils
parent9d8d0509bf2a630464e050de21e21110748e4f27 (diff)
downloadopenwrt-ec2dc60d575f6ef4ace4aa36d4940b7e13034778.tar.gz
openwrt-ec2dc60d575f6ef4ace4aa36d4940b7e13034778.tar.bz2
openwrt-ec2dc60d575f6ef4ace4aa36d4940b7e13034778.zip
fitblk: move shell functions to common file
Move shell functions used for sysupgrade into /lib/upgrade/fit.sh. Introduce improved fitblk boot device detection function which works also in case ubiblock devices have not yet been created or even UBI itself not yet being attached. Signed-off-by: Daniel Golle <daniel@makrotopia.org>
Diffstat (limited to 'package/utils')
-rw-r--r--package/utils/fitblk/Makefile4
-rw-r--r--package/utils/fitblk/files/fit.sh63
2 files changed, 66 insertions, 1 deletions
diff --git a/package/utils/fitblk/Makefile b/package/utils/fitblk/Makefile
index 4da4dc46f1..8fb6e14c7e 100644
--- a/package/utils/fitblk/Makefile
+++ b/package/utils/fitblk/Makefile
@@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk
PKG_NAME:=fitblk
-PKG_RELEASE:=1
+PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0-only
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
@@ -36,6 +36,8 @@ endef
define Package/fitblk/install
$(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/fitblk $(1)/usr/sbin/
+ $(INSTALL_DIR) $(1)/lib/upgrade
+ $(INSTALL_DATA) ./files/fit.sh $(1)/lib/upgrade
endef
$(eval $(call BuildPackage,fitblk))
diff --git a/package/utils/fitblk/files/fit.sh b/package/utils/fitblk/files/fit.sh
new file mode 100644
index 0000000000..b715a15ddf
--- /dev/null
+++ b/package/utils/fitblk/files/fit.sh
@@ -0,0 +1,63 @@
+export_fitblk_bootdev() {
+ [ -e /sys/firmware/devicetree/base/chosen/rootdisk ] || return
+
+ local rootdisk="$(cat /sys/firmware/devicetree/base/chosen/rootdisk)"
+ local handle bootdev
+
+ for handle in /sys/class/mtd/mtd*/of_node/volumes/*/phandle; do
+ [ ! -e "$handle" ] && continue
+ if [ "$rootdisk" = "$(cat "$handle")" ]; then
+ if [ -e "${handle%/phandle}/volname" ]; then
+ export CI_KERNPART="$(cat "${handle%/phandle}/volname")"
+ elif [ -e "${handle%/phandle}/volid" ]; then
+ export CI_KERNVOLID="$(cat "${handle%/phandle}/volid")"
+ else
+ return
+ fi
+ export CI_UBIPART="$(cat "${handle%%/of_node*}/name")"
+ export CI_METHOD="ubi"
+ return
+ fi
+ done
+
+ for handle in /sys/class/mtd/mtd*/of_node/phandle; do
+ [ ! -e "$handle" ] && continue
+ if [ "$rootdisk" = "$(cat $handle)" ]; then
+ bootdev="${handle%/of_node/phandle}"
+ bootdev="${bootdev#/sys/class/mtd/}"
+ export PART_NAME="/dev/$bootdev"
+ export CI_METHOD="default"
+ return
+ fi
+ done
+
+ for handle in /sys/class/block/*/of_node/phandle; do
+ [ ! -e "$handle" ] && continue
+ if [ "$rootdisk" = "$(cat $handle)" ]; then
+ bootdev="${handle%/of_node/phandle}"
+ bootdev="${bootdev#/sys/class/block/}"
+ export EMMC_KERN_DEV="/dev/$bootdev"
+ export CI_METHOD="emmc"
+ return
+ fi
+ done
+}
+
+fit_do_upgrade() {
+ export_fitblk_bootdev
+ [ -n "$CI_METHOD" ] || return 1
+ [ -e /dev/fit0 ] && fitblk /dev/fit0
+ [ -e /dev/fitrw ] && fitblk /dev/fitrw
+
+ case "$CI_METHOD" in
+ emmc)
+ emmc_do_upgrade "$1"
+ ;;
+ default)
+ default_do_upgrade "$1"
+ ;;
+ ubi)
+ nand_do_upgrade "$1"
+ ;;
+ esac
+}