[source] ar71xx: convert mikrotik routerboard support to UBI

LEDE Commits lede-commits at lists.infradead.org
Wed Feb 1 06:06:17 PST 2017


nbd pushed a commit to source.git, branch lede-17.01:
https://git.lede-project.org/0656bee36b157c19a248f35999001f48b91c8ec1

commit 0656bee36b157c19a248f35999001f48b91c8ec1
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Sun Jan 8 14:27:38 2017 +0100

    ar71xx: convert mikrotik routerboard support to UBI
    
    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 at nbd.name>
---
 .../ar71xx/base-files/lib/upgrade/platform.sh      | 30 ++++++++
 target/linux/ar71xx/base-files/sbin/wget2nand      | 85 ----------------------
 .../ar71xx/files/arch/mips/ath79/mach-rb2011.c     |  2 +-
 .../ar71xx/files/arch/mips/ath79/mach-rb922.c      |  2 +-
 .../ar71xx/files/arch/mips/ath79/mach-rb95x.c      |  2 +-
 .../ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c  |  2 +-
 .../ar71xx/files/drivers/mtd/nand/rb4xx_nand.c     |  2 +-
 .../ar71xx/files/drivers/mtd/nand/rb750_nand.c     |  2 +-
 .../ar71xx/files/drivers/mtd/nand/rb91x_nand.c     |  2 +-
 target/linux/ar71xx/image/Makefile                 |  3 +
 target/linux/ar71xx/image/mikrotik.mk              | 22 ++++++
 target/linux/ar71xx/mikrotik/config-default        | 38 +++++-----
 target/linux/ar71xx/mikrotik/target.mk             |  2 +-
 13 files changed, 80 insertions(+), 114 deletions(-)

diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 6341a31..82ed041 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -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
index c80e21c..0000000
--- a/target/linux/ar71xx/base-files/sbin/wget2nand
+++ /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 at 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"
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
index afd5608..0db359c 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb2011.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
index c88c522..0c5373c 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb922.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
index c2261ab..05e15e7 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rb95x.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
index 94e0b44..129195d 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-rbsxtlite.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
index f2b430e..96ec5dd 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb4xx_nand.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
index a9b287b..0604c5a 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb750_nand.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
index bfc5d4d..1308e18 100644
--- a/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
+++ b/target/linux/ar71xx/files/drivers/mtd/nand/rb91x_nand.c
@@ -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,
 	},
diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile
index b9c3fc3..8eac5fc 100644
--- a/target/linux/ar71xx/image/Makefile
+++ b/target/linux/ar71xx/image/Makefile
@@ -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
index 0000000..000253b
--- /dev/null
+++ b/target/linux/ar71xx/image/mikrotik.mk
@@ -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
diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
index 3e7cfd5..328e176 100644
--- a/target/linux/ar71xx/mikrotik/config-default
+++ b/target/linux/ar71xx/mikrotik/config-default
@@ -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
diff --git a/target/linux/ar71xx/mikrotik/target.mk b/target/linux/ar71xx/mikrotik/target.mk
index cb2447a..90ef51e 100644
--- a/target/linux/ar71xx/mikrotik/target.mk
+++ b/target/linux/ar71xx/mikrotik/target.mk
@@ -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.



More information about the lede-commits mailing list