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>
This commit is contained in:
Daniel Golle 2024-07-17 16:22:10 +01:00
parent 9d8d0509bf
commit ec2dc60d57
2 changed files with 66 additions and 1 deletions

View File

@ -1,7 +1,7 @@
include $(TOPDIR)/rules.mk include $(TOPDIR)/rules.mk
PKG_NAME:=fitblk PKG_NAME:=fitblk
PKG_RELEASE:=1 PKG_RELEASE:=2
PKG_LICENSE:=GPL-2.0-only PKG_LICENSE:=GPL-2.0-only
PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org> PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
@ -36,6 +36,8 @@ endef
define Package/fitblk/install define Package/fitblk/install
$(INSTALL_DIR) $(1)/usr/sbin $(INSTALL_DIR) $(1)/usr/sbin
$(INSTALL_BIN) $(PKG_BUILD_DIR)/fitblk $(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 endef
$(eval $(call BuildPackage,fitblk)) $(eval $(call BuildPackage,fitblk))

View File

@ -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
}