Просмотр исходного кода

kernel: mtdsplit: support Seama entity with UBI

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 <[email protected]>

SVN-Revision: 48600
Rafał Miłecki 10 лет назад
Родитель
Сommit
9220dd5d36

+ 1 - 0
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"
 

+ 7 - 3
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;