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