From: Felix Fietkau Date: Thu, 5 Jan 2017 16:22:16 +0000 (+0100) Subject: rb532: switch to UBI, drop yaffs2 support, use sysupgrade for NAND X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=ad76fdfc8afc6e13b371cb47f6a82af39eabd414;p=openwrt%2Fstaging%2Faparcar.git rb532: switch to UBI, drop yaffs2 support, use sysupgrade for NAND Signed-off-by: Felix Fietkau --- diff --git a/target/linux/rb532/Makefile b/target/linux/rb532/Makefile index 8643103f98..e95524aed2 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 0000000000..4c932fde19 --- /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 0000000000..29fe18de30 --- /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 0bfc259ef6..0000000000 --- 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 9a111fa896..0000000000 --- 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@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 cfb7aeaf9e..3c6806f78c 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 d529957dc7..06255c60ed 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 0000000000..fd23e09e45 --- /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 a7ff9cba50..0000000000 --- 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, - }