ath79: mikrotik: update kernel on NAND using Yafut
authorMichał Kępień <openwrt@kempniu.pl>
Sat, 1 Apr 2023 18:54:14 +0000 (20:54 +0200)
committerChristian Marangi <ansuelsmth@gmail.com>
Tue, 18 Apr 2023 11:53:04 +0000 (13:53 +0200)
Instead of erasing the entire NAND partition holding the kernel during
every system upgrade and then flashing a Yaffs file system image
prepared using kernel2minor (not accounting for bad blocks in the
process), use the Yafut utility to replace the kernel executable on
MikroTik NAND devices, preserving the existing Yaffs file system
(including bad block information) on the partition holding the kernel.

Add Yafut to DEFAULT_PACKAGES for the ath79/mikrotik target, so that the
tool is included in the initramfs images created when building for
multiple profiles.  However, exclude Yafut from the images built for
MikroTik devices with NOR flash as the tool is currently only meant to
be used on devices with NAND flash.

As this addresses the concerns for MikroTik NAND devices discussed in
commit 9d96b6fb72 ("ath79/mikrotik: disable building NAND images"),
re-enable building images for these devices.

Signed-off-by: Michał Kępień <openwrt@kempniu.pl>
target/linux/ath79/image/common-mikrotik.mk
target/linux/ath79/mikrotik/base-files/lib/upgrade/platform.sh
target/linux/ath79/mikrotik/target.mk

index fb3dc7822667a8609c9ae0967e33831e7a5e7cad..ce349b60b1d7f9664ab1aeee818b7db0c269995b 100644 (file)
@@ -9,6 +9,7 @@ endef
 
 define Device/mikrotik_nor
   $(Device/mikrotik)
+  DEVICE_PACKAGES := -yafut
   IMAGE/sysupgrade.bin := append-kernel | kernel2minor -s 1024 -e | \
        pad-to $$$$(BLOCKSIZE) | append-rootfs | pad-rootfs | \
        check-size | append-metadata
@@ -16,8 +17,5 @@ endef
 
 define Device/mikrotik_nand
   $(Device/mikrotik)
-  IMAGE/sysupgrade.bin = append-kernel | kernel2minor -s 2048 -e -c | \
-       sysupgrade-tar kernel=$$$$@ | append-metadata
-  DEVICE_PACKAGES := nand-utils
-  DEFAULT := n
+  IMAGE/sysupgrade.bin = append-kernel | sysupgrade-tar | append-metadata
 endef
index 3ffe01cb23dbab832549249095cc888fafca8ba5..93a9c3a855e5481e19b7c88ac539a33f103ec7cf 100644 (file)
@@ -7,7 +7,7 @@ platform_check_image() {
        return 0
 }
 
-RAMFS_COPY_BIN='nandwrite'
+RAMFS_COPY_BIN='yafut'
 
 platform_do_upgrade_mikrotik_nand() {
        CI_KERNPART=none
@@ -20,8 +20,7 @@ platform_do_upgrade_mikrotik_nand() {
        board_dir=${board_dir%/}
        [ -n "$board_dir" ] || return
 
-       mtd erase kernel
-       tar xf "$1" ${board_dir}/kernel -O | nandwrite -o "$fw_mtd" -
+       tar xf "$1" ${board_dir}/kernel -O | yafut -d "$fw_mtd" -w -i - -o kernel -m 0755 || return
 
        nand_do_upgrade "$1"
 }
index bfc8cceac6128067c99cfaa277f6e9f0c9d77c8f..a3c876d7a79e234531dbf78836f0ad824642c39a 100644 (file)
@@ -3,7 +3,7 @@ FEATURES += minor nand
 KERNELNAME := vmlinux vmlinuz
 IMAGES_DIR := ../../..
 
-DEFAULT_PACKAGES += wpad-basic-mbedtls
+DEFAULT_PACKAGES += wpad-basic-mbedtls yafut
 
 define Target/Description
        Build firmware images for MikroTik devices based on Qualcomm Atheros