[source] rb532: switch to UBI, drop yaffs2 support, use sysupgrade for NAND

LEDE Commits lede-commits at lists.infradead.org
Sat Jan 7 08:51:19 PST 2017


nbd pushed a commit to source.git, branch master:
https://git.lede-project.org/ad76fdfc8afc6e13b371cb47f6a82af39eabd414

commit ad76fdfc8afc6e13b371cb47f6a82af39eabd414
Author: Felix Fietkau <nbd at nbd.name>
AuthorDate: Thu Jan 5 17:22:16 2017 +0100

    rb532: switch to UBI, drop yaffs2 support, use sysupgrade for NAND
    
    Signed-off-by: Felix Fietkau <nbd at nbd.name>
---
 target/linux/rb532/Makefile                        |  4 +-
 .../linux/rb532/base-files/lib/preinit/10_sysinfo  | 11 ++++
 .../linux/rb532/base-files/lib/upgrade/platform.sh | 26 ++++++++
 target/linux/rb532/base-files/sbin/cf2nand         | 67 --------------------
 target/linux/rb532/base-files/sbin/wget2nand       | 71 ----------------------
 target/linux/rb532/config-4.4                      | 31 ++++++----
 target/linux/rb532/image/Makefile                  | 29 +++++++++
 .../patches-4.4/004-rb532-fix-partition-info.patch | 17 ++++++
 ...tion_info-rename-rootfs-to-rootfs_onboard.patch | 11 ----
 9 files changed, 105 insertions(+), 162 deletions(-)

diff --git a/target/linux/rb532/Makefile b/target/linux/rb532/Makefile
index 8643103..e95524a 100644
--- a/target/linux/rb532/Makefile
+++ b/target/linux/rb532/Makefile
@@ -9,12 +9,12 @@ include $(TOPDIR)/rules.mk
 ARCH:=mipsel
 BOARD:=rb532
 BOARDNAME:=Mikrotik RouterBoard 532
-FEATURES:=pci targz squashfs
+FEATURES:=pci targz squashfs minor nand
 
 KERNEL_PATCHVER:=4.4
 
 include $(INCLUDE_DIR)/target.mk
 
-DEFAULT_PACKAGES += wpad-mini kmod-ath5k kmod-input-rb532 e2fsprogs mkf2fs
+DEFAULT_PACKAGES += wpad-mini kmod-ath5k kmod-input-rb532 e2fsprogs mkf2fs nand-utils
 
 $(eval $(call BuildTarget))
diff --git a/target/linux/rb532/base-files/lib/preinit/10_sysinfo b/target/linux/rb532/base-files/lib/preinit/10_sysinfo
new file mode 100644
index 0000000..4c932fd
--- /dev/null
+++ b/target/linux/rb532/base-files/lib/preinit/10_sysinfo
@@ -0,0 +1,11 @@
+get_model_rb532() {
+	grep system\ type /proc/cpuinfo | awk -F ": " '{print $2}'
+}
+
+do_sysinfo_rb532() {
+	mkdir -p /tmp/sysinfo
+	echo rb532 > /tmp/sysinfo/board_name
+	get_model_rb532 > /tmp/sysinfo/model
+}
+
+boot_hook_add preinit_main do_sysinfo_rb532
diff --git a/target/linux/rb532/base-files/lib/upgrade/platform.sh b/target/linux/rb532/base-files/lib/upgrade/platform.sh
new file mode 100644
index 0000000..29fe18d
--- /dev/null
+++ b/target/linux/rb532/base-files/lib/upgrade/platform.sh
@@ -0,0 +1,26 @@
+REQUIRE_IMAGE_METADATA=1
+RAMFS_COPY_BIN=/usr/sbin/nandwrite
+CI_KERNPART=none
+
+platform_check_image() {
+	[ -e /dev/ubi0 ] || {
+		ubiattach -m 1
+		sleep 1
+	}
+	return 0;
+}
+
+platform_pre_upgrade() {
+	nand_do_upgrade "$1"
+}
+
+platform_nand_pre_upgrade() {
+	local board_name="$(cat /tmp/sysinfo/board_name)"
+
+	mtd erase kernel
+	tar xf "$1" sysupgrade-$board_name/kernel -O | nandwrite -o /dev/mtd0 -
+}
+
+platform_do_upgrade() {
+	default_do_upgrade "$ARGV"
+}
diff --git a/target/linux/rb532/base-files/sbin/cf2nand b/target/linux/rb532/base-files/sbin/cf2nand
deleted file mode 100755
index 0bfc259..0000000
--- a/target/linux/rb532/base-files/sbin/cf2nand
+++ /dev/null
@@ -1,67 +0,0 @@
-#!/bin/sh
-. /lib/functions.sh
-
-copy_kernel() {
-	local input="$1"
-	local output="$2"
-	local cmdline="$3"
-	size="$(echo -n "$cmdline" | wc -c)"
-	dd if="$input" bs=3M count=1 > "$output"
-	/sbin/patch-cmdline "$output" "$cmdline"
-}
-
-fstype="$(mount | grep ' / ' | awk '$5 != "rootfs" {print $5}')"
-case "$fstype" in
-	ext2|jffs2) echo "Copying from $fstype to yaffs2";;
-	*) echo "Invalid filesystem."; exit 1;;
-esac
-
-[ -d /tmp/cf2nand ] && {
-	echo "/tmp/cf2nand already exists"
-	exit 1
-}
-
-mkdir /tmp/cf2nand
-mkdir /tmp/cf2nand/rootfs
-mount -t "$fstype" /dev/root /tmp/cf2nand/rootfs || {
-	echo "Mounting rootfs failed."
-	exit 1
-}
-
-boot="$(find_mtd_part 'Routerboard NAND boot')"
-main="$(find_mtd_part 'rootfs')"
-[ -z "$boot" -o -z "$main" ] && {
-	echo "Cannot find NAND Flash partitions"
-	exit 1
-}
-
-echo "Erasing filesystem..."
-mtd erase Boot 2>/dev/null >/dev/null
-mtd erase Main 2>/dev/null >/dev/null
-
-mkdir /tmp/cf2nand/p1
-mkdir /tmp/cf2nand/p2
-mount -t yaffs2 "$boot" /tmp/cf2nand/p1
-mount -t yaffs2 "$main" /tmp/cf2nand/p2
-
-echo "Copying kernel..."
-copy_kernel /dev/cfa1 /tmp/cf2nand/p1/kernel "root=/dev/mtdblock1 rootfstype=yaffs2 " 2>/dev/null >/dev/null
-umount /tmp/cf2nand/p1
-rmdir /tmp/cf2nand/p1
-
-echo "Copying filesystem..."
-( cd /tmp/cf2nand/rootfs; tar c . ) | ( cd /tmp/cf2nand/p2; tar x )
-echo "chmod ugo+x /" > /tmp/cf2nand/p2/etc/uci-defaults/set_root_permission
-sync
-# Use kexec is present
-[ -x /usr/bin/kexec ] && {
-	kexec -l /tmp/cf2nand/p1/kernel --command-line="$(cat /proc/cmdline) root=/dev/mtdblock1 rootfstype=yaffs2"
-	kexec -e
-}
-umount /tmp/cf2nand/p2
-rmdir /tmp/cf2nand/p2
-
-umount /tmp/cf2nand/rootfs
-rmdir /tmp/cf2nand/rootfs
-rmdir /tmp/cf2nand
-
diff --git a/target/linux/rb532/base-files/sbin/wget2nand b/target/linux/rb532/base-files/sbin/wget2nand
deleted file mode 100755
index 9a111fa..0000000
--- a/target/linux/rb532/base-files/sbin/wget2nand
+++ /dev/null
@@ -1,71 +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
-
-[ -d /tmp/wget2nand ] && {
-	echo "/tmp/wget2nand already exists"
-	exit 1
-}
-
-# first get an address for br-lan using udhcpc
-killall udhcpc
-/sbin/udhcpc -i br-lan
-
-# 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
-}
-
-boot="$(find_mtd_part 'Routerboard NAND Boot')"
-main="$(find_mtd_part 'rootfs')"
-[ -z "$boot" -o -z "$main" ] && {
-	echo "Cannot find NAND Flash partitions"
-	exit 1
-}
-
-echo "Erasing filesystem."
-mtd erase Boot 2>/dev/null >/dev/null
-mtd erase Main 2>/dev/null >/dev/null
-
-echo "Mounting $main as new root and $boot as boot partition"
-
-mkdir /tmp/wget2nand/
-mkdir /tmp/wget2nand-boot
-mount -t yaffs2 "$main" /tmp/wget2nand/
-mount -t yaffs2 "$boot" /tmp/wget2nand-boot
-
-echo "Copying filesystem..."
-( wget -O - $url/openwrt-rb532-rootfs.tgz) | ( cd /tmp/wget2nand/; tar xvz )
-wget -O /tmp/wget2nand-boot/kernel $url/openwrt-rb532-vmlinux
-
-# No need to patch the kernel, this was done during the build process
-chmod +x /tmp/wget2nand-boot/kernel
-
-# make sure everything is written before we unmount the partitions
-echo "chmod ugo+x /" > /tmp/wget2nand/etc/uci-defaults/set_root_permission
-sync
-ls /tmp/wget2nand-boot/
-ls /tmp/wget2nand/
-# use kexec if present
-[ -x /usr/bin/kexec ] && {
-	kexec -l /tmp/wget2nand-boot/kernel --command-line="$(cat /proc/cmdline) root=$main rootfstype=yaffs2"
-	kexec -e
-}
-
-# unmount the partitions and remove the directories into which they were mounted
-umount /tmp/wget2nand-boot
-umount /tmp/wget2nand
-rmdir /tmp/wget2nand-boot
-rmdir /tmp/wget2nand
-
-# all done
-echo "Image written, you can now reboot.  Remember to change the boot source to Boot from Nand"
diff --git a/target/linux/rb532/config-4.4 b/target/linux/rb532/config-4.4
index cfb7aea..3c6806f 100644
--- a/target/linux/rb532/config-4.4
+++ b/target/linux/rb532/config-4.4
@@ -33,10 +33,13 @@ CONFIG_CPU_SUPPORTS_32BIT_KERNEL=y
 CONFIG_CPU_SUPPORTS_HIGHMEM=y
 CONFIG_CRC16=y
 CONFIG_CRYPTO_CRC32C=y
+CONFIG_CRYPTO_DEFLATE=y
 CONFIG_CRYPTO_HASH=y
 CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_LZO=y
 CONFIG_CRYPTO_RNG2=y
 CONFIG_CRYPTO_WORKQUEUE=y
+CONFIG_CRYPTO_XZ=y
 CONFIG_CSRC_R4K=y
 CONFIG_DMA_NONCOHERENT=y
 # CONFIG_ENABLE_WARN_DEPRECATED is not set
@@ -115,6 +118,8 @@ CONFIG_KEXEC=y
 CONFIG_KEXEC_CORE=y
 CONFIG_KORINA=y
 CONFIG_LEDS_MIKROTIK_RB532=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
 CONFIG_MIKROTIK_RB532=y
 CONFIG_MIPS=y
 CONFIG_MIPS_CLOCK_VSYSCALL=y
@@ -134,6 +139,12 @@ CONFIG_MTD_NAND_ECC=y
 CONFIG_MTD_NAND_PLATFORM=y
 CONFIG_MTD_PHYSMAP=y
 # CONFIG_MTD_ROOTFS_ROOT_DEV 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_NEED_DMA_MAP_STATE=y
 CONFIG_NEED_PER_CPU_KM=y
 CONFIG_NO_GENERIC_PCI_IOPORT_MAP=y
@@ -153,6 +164,8 @@ CONFIG_SCSI=y
 # CONFIG_SCSI_LOWLEVEL is not set
 # CONFIG_SCSI_PROC_FS is not set
 # CONFIG_SERIAL_8250_FSL is not set
+CONFIG_SQUASHFS_DECOMP_MULTI=y
+# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set
 CONFIG_SRCU=y
 # CONFIG_SWAP is not set
 CONFIG_SWAP_IO_SPACE=y
@@ -162,17 +175,13 @@ CONFIG_SYS_SUPPORTS_32BIT_KERNEL=y
 CONFIG_SYS_SUPPORTS_ARBIT_HZ=y
 CONFIG_SYS_SUPPORTS_LITTLE_ENDIAN=y
 CONFIG_TICK_CPU_ACCOUNTING=y
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_XZ=y
+CONFIG_UBIFS_FS_ZLIB=y
 CONFIG_VIA_RHINE=y
 CONFIG_VIA_RHINE_MMIO=y
-CONFIG_YAFFS_9BYTE_TAGS=y
-# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
-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_ZLIB_DEFLATE=y
+CONFIG_ZLIB_INFLATE=y
 CONFIG_ZONE_DMA_FLAG=0
diff --git a/target/linux/rb532/image/Makefile b/target/linux/rb532/image/Makefile
index d529957..06255c6 100644
--- a/target/linux/rb532/image/Makefile
+++ b/target/linux/rb532/image/Makefile
@@ -13,12 +13,41 @@ RAMSIZE = 0x00100000		# 1MB
 IMAGE_COPY = 1
 
 LOADER_MAKEOPTS= \
+		CROSS_COMPILE="$(TARGET_CROSS)" \
+		PATH="$(TARGET_PATH)" \
+		CC="$(TARGET_CC)" \
 		KDIR=$(KDIR) \
 		LOADADDR=$(LOADADDR) \
 		KERNEL_ENTRY=$(KERNEL_ENTRY) \
 		RAMSIZE=$(RAMSIZE) \
 		IMAGE_COPY=$(IMAGE_COPY)
 
+
+LOADER_DIR = $(GENERIC_PLATFORM_DIR)/image/lzma-loader
+
+define Build/lzma-loader-elf
+	rm -rf $@.loader
+	mkdir -p $@.loader
+	$(CP) $(LOADER_DIR)/src/* $@.loader/
+	$(CP) $@ $@.loader/vmlinux.lzma
+	$(MAKE) -C $@.loader $(LOADER_MAKEOPTS)
+	cp $@.loader/lzma.elf $@
+	rm -rf $@.loader
+endef
+
+define Device/nand
+  CMDLINE := ubi.mtd=1 ubi.block=0,rootfs root=/dev/ubiblock0_1
+  BOARD_NAME := rb532
+  SUPPORTED_DEVICES := rb532
+  KERNEL_INITRAMFS := append-kernel | patch-cmdline | lzma | lzma-loader-elf
+  KERNEL := $$(KERNEL_INITRAMFS) | kernel2minor -s 2048 -i 0 -c
+  IMAGES := sysupgrade.bin
+  FILESYSTEMS := squashfs
+  IMAGE/sysupgrade.bin := sysupgrade-tar | append-metadata
+endef
+
+TARGET_DEVICES := nand
+
 define Build/Clean
 	$(MAKE) -C $(GENERIC_PLATFORM_DIR)/image/lzma-loader $(LOADER_MAKEOPTS) clean
 endef
diff --git a/target/linux/rb532/patches-4.4/004-rb532-fix-partition-info.patch b/target/linux/rb532/patches-4.4/004-rb532-fix-partition-info.patch
new file mode 100644
index 0000000..fd23e09
--- /dev/null
+++ b/target/linux/rb532/patches-4.4/004-rb532-fix-partition-info.patch
@@ -0,0 +1,17 @@
+--- a/arch/mips/rb532/devices.c
++++ b/arch/mips/rb532/devices.c
+@@ -199,11 +199,11 @@ static struct platform_device nand_slot0
+ 
+ static struct mtd_partition rb532_partition_info[] = {
+ 	{
+-		.name = "Routerboard NAND boot",
++		.name = "kernel",
+ 		.offset = 0,
+-		.size = 4 * 1024 * 1024,
++		.size = 8 * 1024 * 1024,
+ 	}, {
+-		.name = "rootfs",
++		.name = "ubi",
+ 		.offset = MTDPART_OFS_NXTBLK,
+ 		.size = MTDPART_SIZ_FULL,
+ 	}
diff --git a/target/linux/rb532/patches-4.4/004-rb532_partition_info-rename-rootfs-to-rootfs_onboard.patch b/target/linux/rb532/patches-4.4/004-rb532_partition_info-rename-rootfs-to-rootfs_onboard.patch
deleted file mode 100644
index a7ff9cb..0000000
--- a/target/linux/rb532/patches-4.4/004-rb532_partition_info-rename-rootfs-to-rootfs_onboard.patch
+++ /dev/null
@@ -1,11 +0,0 @@
---- a/arch/mips/rb532/devices.c
-+++ b/arch/mips/rb532/devices.c
-@@ -203,7 +203,7 @@ static struct mtd_partition rb532_partit
- 		.offset = 0,
- 		.size = 4 * 1024 * 1024,
- 	}, {
--		.name = "rootfs",
-+		.name = "rootfs_onboard",
- 		.offset = MTDPART_OFS_NXTBLK,
- 		.size = MTDPART_SIZ_FULL,
- 	}



More information about the lede-commits mailing list