diff options
author | Daniel Golle <daniel@makrotopia.org> | 2024-07-17 16:22:10 +0100 |
---|---|---|
committer | Daniel Golle <daniel@makrotopia.org> | 2024-07-18 11:48:53 +0100 |
commit | ec2dc60d575f6ef4ace4aa36d4940b7e13034778 (patch) | |
tree | 5d6d52d2c8728db357fa159c841770ee906a7b36 /package/utils | |
parent | 9d8d0509bf2a630464e050de21e21110748e4f27 (diff) | |
download | openwrt-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/Makefile | 4 | ||||
-rw-r--r-- | package/utils/fitblk/files/fit.sh | 63 |
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 +} |