From: Daniel Golle Date: Wed, 17 Jul 2024 15:22:10 +0000 (+0100) Subject: fitblk: move shell functions to common file X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=ec2dc60d575f6ef4ace4aa36d4940b7e13034778;p=openwrt%2Fstaging%2Fxback.git 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 --- 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 @@ -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 +}