[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