]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
ath79: mikrotik: check RouterBOOT version matching sysupgrade image 20144/head
authorDaniel Golle <daniel@makrotopia.org>
Tue, 23 Sep 2025 16:44:35 +0000 (17:44 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Mon, 29 Sep 2025 16:34:51 +0000 (17:34 +0100)
Check if the uploaded image matches the version of RouterBOOT before
proceeding with sysupgrade on MikroTik devices with NOR flash.

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh

index 9ad778ad177ba134b7142f4bac908818c6a4c964..1ce42f7b7979a336411309040850702d53d17422 100644 (file)
@@ -3,7 +3,48 @@
 PART_NAME=firmware
 
 REQUIRE_IMAGE_METADATA=1
+
+platform_check_image_mikrotik_nor() {
+       local bootfwver bootfwmajor
+       local bootentry="$(dd bs=10 skip=1 count=1 if="$1" 2>/dev/null | xargs -0)"
+
+       read -r bootfwver < /sys/firmware/mikrotik/hard_config/booter_version
+       bootfwmajor="${bootfwver%%.*}"
+
+       if [ "$((bootfwmajor))" = 0 ]; then
+               v "invalid RouterBOOT version"
+               return 1
+       elif [ "$bootfwmajor" -le 6 ] && [ "$bootentry" != "kernel" ]; then
+               v "RouterBOOT 6 and earlier requires ELF-in-YAFFS image"
+               return 1
+       elif [ "$bootfwmajor" -ge 7 ] && [ "$bootentry" != "bootimage" ]; then
+               v "RouterBOOT 7 and later requires NPK-in-YAFFS image"
+               return 1
+       fi
+
+       return 0
+}
+
 platform_check_image() {
+       case "$board" in
+       mikrotik,routerboard-2011uias-2hnd|\
+       mikrotik,routerboard-493g|\
+       mikrotik,routerboard-911g-5hpacd|\
+       mikrotik,routerboard-911g-xhpnd|\
+       mikrotik,routerboard-912uag-2hpnd|\
+       mikrotik,routerboard-921gs-5hpacd-15s|\
+       mikrotik,routerboard-922uags-5hpacd|\
+       mikrotik,routerboard-951g-2hnd|\
+       mikrotik,routerboard-951ui-2hnd|\
+       mikrotik,routerboard-sxt-5nd-r2)
+               return 0
+               ;;
+       *)
+               platform_check_image_mikrotik_nor "$1"
+               return $?
+               ;;
+       esac
+
        return 0
 }