rb532: switch to UBI, drop yaffs2 support, use sysupgrade for NAND
authorFelix Fietkau <nbd@nbd.name>
Thu, 5 Jan 2017 16:22:16 +0000 (17:22 +0100)
committerFelix Fietkau <nbd@nbd.name>
Sat, 7 Jan 2017 16:50:57 +0000 (17:50 +0100)
Signed-off-by: Felix Fietkau <nbd@nbd.name>
target/linux/rb532/Makefile
target/linux/rb532/base-files/lib/preinit/10_sysinfo [new file with mode: 0644]
target/linux/rb532/base-files/lib/upgrade/platform.sh [new file with mode: 0644]
target/linux/rb532/base-files/sbin/cf2nand [deleted file]
target/linux/rb532/base-files/sbin/wget2nand [deleted file]
target/linux/rb532/config-4.4
target/linux/rb532/image/Makefile
target/linux/rb532/patches-4.4/004-rb532-fix-partition-info.patch [new file with mode: 0644]
target/linux/rb532/patches-4.4/004-rb532_partition_info-rename-rootfs-to-rootfs_onboard.patch [deleted file]

index 8643103f98f22e422d491e94964b8bc4001a1bbb..e95524aed215deec920125263a65f65bf99bcce0 100644 (file)
@@ -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 (file)
index 0000000..4c932fd
--- /dev/null
@@ -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 (file)
index 0000000..29fe18d
--- /dev/null
@@ -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 (executable)
index 0bfc259..0000000
+++ /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 (executable)
index 9a111fa..0000000
+++ /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@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"
index cfb7aeaf9eee393500e103e20f7d667db6d83610..3c6806f78cbcb873c89315f9963d89342fa686ff 100644 (file)
@@ -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
index d529957dc7fb16c2795e569cb4f56da737b0c781..06255c60ed650ba9188e80e1bbbdfcebf82ed2d3 100644 (file)
@@ -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 (file)
index 0000000..fd23e09
--- /dev/null
@@ -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 (file)
index a7ff9cb..0000000
+++ /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,
-       }