[OpenWrt-Devel] [PATCH 3/3] kernel: mtdsplit: support Seama entity with UBI

Rafał Miłecki zajec5 at gmail.com
Fri Jan 29 06:10:40 EST 2016


Some D-Link routers (e.g. DIR-885L) have NAND and use Seama format. It
means OpenWrt will want to have UBI in Sseama entity and should be able
to detect it.

Signed-off-by: Rafał Miłecki <zajec5 at gmail.com>
---
 target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h     |  1 +
 .../linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c  | 10 +++++++---
 2 files changed, 8 insertions(+), 3 deletions(-)

diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h
index 42841ef..0b52f08 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit.h
@@ -15,6 +15,7 @@
 
 #define KERNEL_PART_NAME	"kernel"
 #define ROOTFS_PART_NAME	"rootfs"
+#define UBI_PART_NAME		"ubi"
 
 #define ROOTFS_SPLIT_NAME	"rootfs_data"
 
diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c
index 228b899..f8ddee7 100644
--- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c
+++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_seama.c
@@ -36,6 +36,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
 	size_t hdr_len, retlen, kernel_ent_size;
 	size_t rootfs_offset;
 	struct mtd_partition *parts;
+	enum mtdsplit_part_type type;
 	int err;
 
 	hdr_len = sizeof(hdr);
@@ -56,7 +57,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
 		return -EINVAL;
 
 	/* Check for the rootfs right after Seama entity with a kernel. */
-	err = mtd_check_rootfs_magic(master, kernel_ent_size, NULL);
+	err = mtd_check_rootfs_magic(master, kernel_ent_size, &type);
 	if (!err) {
 		rootfs_offset = kernel_ent_size;
 	} else {
@@ -67,7 +68,7 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
 		 * Start the search from an arbitrary offset.
 		 */
 		err = mtd_find_rootfs_from(master, SEAMA_MIN_ROOTFS_OFFS,
-					   master->size, &rootfs_offset, NULL);
+					   master->size, &rootfs_offset, &type);
 		if (err)
 			return err;
 	}
@@ -80,7 +81,10 @@ static int mtdsplit_parse_seama(struct mtd_info *master,
 	parts[0].offset = 0;
 	parts[0].size = rootfs_offset;
 
-	parts[1].name = ROOTFS_PART_NAME;
+	if (type == MTDSPLIT_PART_TYPE_UBI)
+		parts[1].name = UBI_PART_NAME;
+	else
+		parts[1].name = ROOTFS_PART_NAME;
 	parts[1].offset = rootfs_offset;
 	parts[1].size = master->size - rootfs_offset;
 
-- 
1.8.4.5
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel


More information about the openwrt-devel mailing list