ar71xx: convert mikrotik routerboard support to UBI
authorFelix Fietkau <nbd@nbd.name>
Sun, 8 Jan 2017 13:27:38 +0000 (14:27 +0100)
committerFelix Fietkau <nbd@nbd.name>
Mon, 16 Jan 2017 19:40:12 +0000 (20:40 +0100)
Remove the wget2nand script, drop the need for manual installation,
use sysupgrade instead.

There are now two different NAND images, one for 64 MiB flashes, the
other for >= 128 MiB

Signed-off-by: Felix Fietkau <nbd@nbd.name>
13 files changed:
target/linux/ar71xx/base-files/lib/upgrade/platform.sh
target/linux/ar71xx/base-files/sbin/wget2nand [deleted file]
target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
target/linux/ar71xx/image/Makefile
target/linux/ar71xx/image/mikrotik.mk [new file with mode: 0644]
target/linux/ar71xx/mikrotik/config-default
target/linux/ar71xx/mikrotik/target.mk

index 6341a31..82ed041 100755 (executable)
@@ -7,6 +7,7 @@
 
 PART_NAME=firmware
 RAMFS_COPY_DATA=/lib/ar71xx.sh
+[ -x /usr/sbin/nandwrite ] && RAMFS_COPY_BIN=/usr/sbin/nandwrite
 
 CI_BLKSZ=65536
 CI_LDADR=0x80060000
@@ -164,6 +165,15 @@ alfa_check_image() {
        return 0
 }
 
+platform_nand_board_name() {
+       local board=$(ar71xx_board_name)
+
+       case "$board" in
+       rb*) echo "routerboard";;
+       *) echo "$board";;
+       esac
+}
+
 platform_check_image() {
        local board=$(ar71xx_board_name)
        local magic="$(get_magic_word "$1")"
@@ -443,6 +453,10 @@ platform_check_image() {
        tew-673gru)
                dir825b_check_image "$1" && return 0
                ;;
+       rb*)
+               nand_do_platform_check routerboard $1
+               return $?
+               ;;
        c-60|\
        nbg6716|\
        r6100|\
@@ -570,6 +584,7 @@ platform_pre_upgrade() {
        local board=$(ar71xx_board_name)
 
        case "$board" in
+       rb*|\
        c-60|\
        nbg6716|\
        r6100|\
@@ -584,6 +599,21 @@ platform_pre_upgrade() {
        esac
 }
 
+platform_nand_pre_upgrade() {
+       local board=$(ar71xx_board_name)
+
+       case "$board" in
+       rb*)
+               CI_KERNPART=none
+               local fw_mtd=$(find_mtd_part kernel)
+               fw_mtd="${fw_mtd/block/}"
+               [ -n "$fw_mtd" ] || return
+               mtd erase kernel
+               tar xf "$1" sysupgrade-routerboard/kernel -O | nandwrite -o "$fw_mtd" -
+               ;;
+       esac
+}
+
 platform_do_upgrade() {
        local board=$(ar71xx_board_name)
 
diff --git a/target/linux/ar71xx/base-files/sbin/wget2nand b/target/linux/ar71xx/base-files/sbin/wget2nand
deleted file mode 100755 (executable)
index c80e21c..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-#!/bin/sh
-# wget2nand
-# This script can be used to download a TGZ file from your build system which
-# contains the files to be installed on the NAND flash on your RB1xx card.
-# The one parameter is the URL of the TGZ file to be downloaded.
-# Licence GPL V2
-# Author david.goodenough@linkchoose.co.uk
-# Based on cf2nand from RB532 support
-. /lib/functions.sh
-
-wget2nand_dir=/tmp/wget2nand
-mnt_kernel=$wget2nand_dir/mnt_kernel
-mnt_rootfs=$wget2nand_dir/mnt_rootfs
-src_rootfs=$wget2nand_dir/rootfs.tgz
-src_kernel=$wget2nand_dir/kernel
-
-[ -d "$wget2nand_dir" ] && {
-       echo "$wget2nand_dir already exists"
-       exit 1
-}
-
-# need to find the wget server from the command line
-url=$1
-[ -z "$url" ] && {
-        echo "No URL specified for image TGZ"
-        echo "Usage : $0 URL"
-        exit 1
-}
-
-url_kernel=$url/lede-ar71xx-mikrotik-vmlinux-lzma.elf
-url_rootfs=$url/lede-ar71xx-mikrotik-defaultnowifi-rootfs.tar.gz
-
-mtd_kernel="$(find_mtd_part 'kernel')"
-mtd_rootfs="$(find_mtd_part 'rootfs')"
-[ -z "$mtd_kernel" -o -z "$mtd_rootfs" ] && {
-       echo "Cannot find NAND Flash partitions"
-       exit 1
-}
-
-mkdir "$wget2nand_dir"
-wget $url_kernel -O "$src_kernel" || {
-       echo "Unable to download $url_kernel"
-       exit 1
-}
-
-wget $url_rootfs -O "$src_rootfs" || {
-       echo "Unable to download $url_rootfs"
-       exit 1
-}
-
-echo "Erasing filesystem..."
-mtd erase kernel 2>/dev/null >/dev/null
-mtd erase rootfs 2>/dev/null >/dev/null
-
-echo "Mounting $mtd_rootfs as new root and $mtd_kernel as kernel partition"
-
-mkdir "$mnt_kernel"
-mkdir "$mnt_rootfs"
-mount -t yaffs2 "$mtd_kernel" "$mnt_kernel"
-mount -t yaffs2 "$mtd_rootfs" "$mnt_rootfs"
-
-echo "Copying kernel..."
-cp $src_kernel $mnt_kernel/kernel || {
-       echo "Error occured while copying the kernel"
-       exit 1
-}
-chmod +x $mnt_kernel/kernel
-
-echo "Preparing filesystem..."
-( cd "$mnt_rootfs"; tar xvz -f "$src_rootfs" )
-
-# make sure everything is written before we unmount the partitions
-echo "chmod ugo+x /" > $mnt_rootfs/etc/uci-defaults/set_root_permission
-sync
-ls $mnt_kernel >/dev/null
-ls $mnt_rootfs >/dev/null
-
-echo "Cleaning up..."
-# unmount the partitions and remove the directories into which they were mounted
-umount $mnt_kernel
-umount $mnt_rootfs
-rm -rf $wget2nand_dir
-
-# all done
-echo "Image written, you can now reboot.  Remember to change the boot source to Boot from Nand"
index afd5608..0db359c 100644 (file)
@@ -94,7 +94,7 @@ static struct mtd_partition rb2011_nand_partitions[] = {
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        },
        {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index c88c522..0c5373c 100644 (file)
@@ -167,7 +167,7 @@ static struct mtd_partition rb922gs_nand_partitions[] = {
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        },
        {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index c2261ab..05e15e7 100644 (file)
@@ -53,7 +53,7 @@ static struct mtd_partition rb95x_nand_partitions[] = {
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        },
        {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index 94e0b44..129195d 100644 (file)
@@ -69,7 +69,7 @@ static struct mtd_partition rbsxtlite_nand_partitions[] = {
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        },
        {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index f2b430e..96ec5dd 100644 (file)
@@ -65,7 +65,7 @@ static struct mtd_partition rb4xx_nand_partitions[] = {
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        },
        {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index a9b287b..0604c5a 100644 (file)
@@ -71,7 +71,7 @@ static struct mtd_partition rb750_nand_partitions[] = {
                .offset = (256 * 1024),
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        }, {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index bfc5d4d..1308e18 100644 (file)
@@ -78,7 +78,7 @@ static struct mtd_partition rb91x_nand_partitions[] = {
                .offset = (256 * 1024),
                .size   = (4 * 1024 * 1024) - (256 * 1024),
        }, {
-               .name   = "rootfs",
+               .name   = "ubi",
                .offset = MTDPART_OFS_NXTBLK,
                .size   = MTDPART_SIZ_FULL,
        },
index b9c3fc3..8eac5fc 100644 (file)
@@ -21,6 +21,9 @@ endif
 ifeq ($(SUBTARGET),nand)
 include ./nand.mk
 endif
+ifeq ($(SUBTARGET),mikrotik)
+include ./mikrotik.mk
+endif
 include ./legacy.mk
 
 define Build/netgear-squashfs
diff --git a/target/linux/ar71xx/image/mikrotik.mk b/target/linux/ar71xx/image/mikrotik.mk
new file mode 100644 (file)
index 0000000..000253b
--- /dev/null
@@ -0,0 +1,22 @@
+define Device/mikrotik
+  PROFILES := Default
+  BOARD_NAME := routerboard
+  KERNEL_INITRAMFS :=
+  KERNEL_NAME := loader-generic.elf
+  KERNEL := kernel-bin | kernel2minor -s 2048 -e -c
+  FILESYSTEMS := squashfs
+  IMAGES := sysupgrade.bin
+  IMAGE/sysupgrade.bin := sysupgrade-tar
+endef
+
+define Device/nand-64m
+$(Device/mikrotik)
+  KERNEL := kernel-bin | kernel2minor -s 512 -e -c
+endef
+
+define Device/nand-large
+$(Device/mikrotik)
+  KERNEL := kernel-bin | kernel2minor -s 2048 -e -c
+endef
+
+TARGET_DEVICES += nand-64m nand-large
index 3e7cfd5..328e176 100644 (file)
@@ -100,8 +100,8 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
 # CONFIG_ATH79_MACH_TL_WR841N_V1 is not set
 # CONFIG_ATH79_MACH_TL_WR841N_V8 is not set
 # CONFIG_ATH79_MACH_TL_WR841N_V9 is not set
-# CONFIG_ATH79_MACH_TL_WR941ND is not set
 # CONFIG_ATH79_MACH_TL_WR940N_V4 is not set
+# CONFIG_ATH79_MACH_TL_WR941ND is not set
 # CONFIG_ATH79_MACH_TUBE2H is not set
 # CONFIG_ATH79_MACH_UBNT is not set
 # CONFIG_ATH79_MACH_UBNT_UNIFIAC is not set
@@ -130,18 +130,18 @@ CONFIG_ATH79_MACH_RBSXTLITE=y
 # CONFIG_ATH79_MACH_WZR_HP_G300NH2 is not set
 # CONFIG_ATH79_MACH_WZR_HP_G450H is not set
 # CONFIG_ATH79_MACH_ZCN_1523H is not set
-# CONFIG_ATH79_NVRAM is not set
 CONFIG_ATH79_ROUTERBOOT=y
-CONFIG_CMDLINE="rootfstype=yaffs noinitrd"
+CONFIG_CMDLINE="rootfstype=squashfs noinitrd"
+CONFIG_CRC16=y
+CONFIG_CRYPTO_DEFLATE=y
 CONFIG_GPIO_74X164=y
 CONFIG_GPIO_LATCH=y
 # CONFIG_JFFS2_FS is not set
 CONFIG_LEDS_RB750=y
 CONFIG_LZO_DECOMPRESS=y
-CONFIG_MDIO_BITBANG=y
-CONFIG_MDIO_GPIO=y
 # CONFIG_MTD_CFI is not set
 CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CYBERTAN_PARTS is not set
 CONFIG_MTD_MAP_BANK_WIDTH_1=y
 CONFIG_MTD_MAP_BANK_WIDTH_4=y
 # CONFIG_MTD_MYLOADER_PARTS is not set
@@ -154,22 +154,18 @@ CONFIG_MTD_NAND_RB91X=y
 # CONFIG_MTD_REDBOOT_PARTS is not set
 CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y
 # CONFIG_MTD_TPLINK_PARTS is not set
-# CONFIG_OVERLAY_FS is not set
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_BEB_LIMIT=20
+CONFIG_MTD_UBI_BLOCK=y
+# CONFIG_MTD_UBI_FASTMAP is not set
+# CONFIG_MTD_UBI_GLUEBI is not set
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
 CONFIG_RLE_DECOMPRESS=y
-# CONFIG_SOC_AR913X is not set
-# CONFIG_SOC_AR933X is not set
-# CONFIG_SOC_QCA953X is not set
 CONFIG_SPI_RB4XX=y
 CONFIG_SPI_RB4XX_CPLD=y
-# CONFIG_SQUASHFS is not set
-CONFIG_YAFFS_9BYTE_TAGS=y
-CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED=y
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_BACKGROUND is not set
-# CONFIG_YAFFS_DISABLE_BLOCK_REFRESHING is not set
-# CONFIG_YAFFS_DISABLE_TAGS_ECC is not set
-# CONFIG_YAFFS_EMPTY_LOST_AND_FOUND is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_XATTR=y
-CONFIG_YAFFS_YAFFS1=y
-CONFIG_YAFFS_YAFFS2=y
+CONFIG_UBIFS_FS=y
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+# CONFIG_UBIFS_FS_LZO is not set
+CONFIG_UBIFS_FS_ZLIB=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_ZLIB_INFLATE=y
index cb2447a..90ef51e 100644 (file)
@@ -1,5 +1,5 @@
 BOARDNAME:=Mikrotik devices with NAND/NOR flash
-FEATURES += targz ramdisk minor
+FEATURES += squashfs ramdisk minor nand
 
 define Target/Description
        Build firmware images for Atheros AR71xx/AR913x based Mikrotik boards.