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>
47 lines
984 B
Bash
47 lines
984 B
Bash
# Copyright (C) 2011 OpenWrt.org
|
|
|
|
PART_NAME=firmware
|
|
|
|
REQUIRE_IMAGE_METADATA=1
|
|
platform_check_image() {
|
|
return 0
|
|
}
|
|
|
|
RAMFS_COPY_BIN='yafut'
|
|
|
|
platform_do_upgrade_mikrotik_nand() {
|
|
CI_KERNPART=none
|
|
|
|
local fw_mtd=$(find_mtd_part kernel)
|
|
fw_mtd="${fw_mtd/block/}"
|
|
[ -n "$fw_mtd" ] || return
|
|
|
|
local board_dir=$(tar tf "$1" | grep -m 1 '^sysupgrade-.*/$')
|
|
board_dir=${board_dir%/}
|
|
[ -n "$board_dir" ] || return
|
|
|
|
tar xf "$1" ${board_dir}/kernel -O | yafut -d "$fw_mtd" -w -i - -o kernel -m 0755 || return
|
|
|
|
nand_do_upgrade "$1"
|
|
}
|
|
|
|
platform_do_upgrade() {
|
|
local board=$(board_name)
|
|
|
|
case "$board" in
|
|
mikrotik,routerboard-493g|\
|
|
mikrotik,routerboard-912uag-2hpnd|\
|
|
mikrotik,routerboard-921gs-5hpacd-15s|\
|
|
mikrotik,routerboard-922uags-5hpacd|\
|
|
mikrotik,routerboard-sxt-5nd-r2)
|
|
platform_do_upgrade_mikrotik_nand "$1"
|
|
;;
|
|
*)
|
|
# NOR devices: erase firmware if booted from initramfs
|
|
[ "$(rootfs_type)" = "tmpfs" ] && mtd erase firmware
|
|
|
|
default_do_upgrade "$1"
|
|
;;
|
|
esac
|
|
}
|