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 <zajec5@gmail.com>

SVN-Revision: 48600
This commit is contained in:
Rafał Miłecki 2016-02-01 12:41:53 +00:00
parent 4156f292c1
commit 9220dd5d36
2 changed files with 8 additions and 3 deletions

View File

@ -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"

View File

@ -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;