diff options
Diffstat (limited to 'poky/meta/recipes-devtools/mtd')
3 files changed, 269 insertions, 0 deletions
diff --git a/poky/meta/recipes-devtools/mtd/mtd-utils/0001-Revert-Return-correct-error-number-in-ubi_get_vol_in.patch b/poky/meta/recipes-devtools/mtd/mtd-utils/0001-Revert-Return-correct-error-number-in-ubi_get_vol_in.patch new file mode 100644 index 000000000..4ece56b9c --- /dev/null +++ b/poky/meta/recipes-devtools/mtd/mtd-utils/0001-Revert-Return-correct-error-number-in-ubi_get_vol_in.patch @@ -0,0 +1,92 @@ +From 0f833ac73ad631248826386e2918d8571ecf0347 Mon Sep 17 00:00:00 2001 +From: David Oberhollenzer <david.oberhollenzer@sigma-star.at> +Date: Sat, 9 Jun 2018 16:45:22 +0200 +Subject: [PATCH] Revert "Return correct error number in ubi_get_vol_info1" + +This reverts commit dede98ffb706676309488d7cc660f569548d5930. + +The original commit tried to fix a descrepancy between the implementation +and the documentation by making the implementation comply. + +When making the change, it was overlooked, that ubinfo and ubirename were +written against the implementation instead of the behaviour specified by +the documentation. So were further internal functions like +ubi_get_vol_info1_nm which further breaks ubirmvol. + +A report with an outline of a resulting problem can be read on +the mailing list: + +http://lists.infradead.org/pipermail/linux-mtd/2018-June/081562.html + +From the report: + +steps to reproduce: have mtd-utils 2.0.1 or 2.0.2 + +0. make a bunch of ubi volumes in sequential order + +ubimkvol /dev/ubi0 -s 64KiB -N test1 +ubimkvol /dev/ubi0 -s 64KiB -N test2 +ubimkvol /dev/ubi0 -s 64KiB -N test3 +ubimkvol /dev/ubi0 -s 64KiB -N test4 +.. + +1. delete the test1 volume, making a hole in the volume table + +ubirmvol /dev/ubi0 -N test1 + +2. try an affected tool (i.e. "ubirmvol /dev/ubi0 -N test4" ) + + |root at mr24:/# ubirmvol /dev/ubi0 -N test4 + |ubirmvol: error!: cannot find UBI volume "test4" + | error 19 (No such device) + +or "ubinfo -a" + + | root at mr24:/# ubinfo -a + | UBI version: 1 + | Count of UBI devices: 1 + | UBI control device major/minor: 10:59 + | Present UBI devices: ubi0 + | + | ubi0 + | Volumes count: 11 + | Logical eraseblock size: 15872 bytes, 15.5 KiB + | Total amount of logical eraseblocks: 1952 (30982144 bytes, 29.5 MiB) + | Amount of available logical eraseblocks: 75 (1190400 bytes, 1.1 MiB) + | Maximum count of volumes 92 + | Count of bad physical eraseblocks: 0 + | Count of reserved physical eraseblocks: 40 + | Current maximum erase counter value: 984 + | Minimum input/output unit size: 512 bytes + | Character device major/minor: 251:0 + | ubinfo: error!: libubi failed to probe volume 5 on ubi0 + | error 19 (No such device) + | Present volumes: 0, 1, 2, 3, 4root at mr24:/# + +Reported-by: Christian Lamparter <chunkeey@gmail.com> +Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at> +Upstream-Status: Accepted [http://git.infradead.org/mtd-utils.git/commit/0f833ac73ad631248826386e2918d8571ecf0347] +--- + lib/libubi.c | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/lib/libubi.c b/lib/libubi.c +index b50e68a..978b433 100644 +--- a/lib/libubi.c ++++ b/lib/libubi.c +@@ -1240,11 +1240,8 @@ int ubi_get_vol_info1(libubi_t desc, int dev_num, int vol_id, + info->dev_num = dev_num; + info->vol_id = vol_id; + +- if (vol_get_major(lib, dev_num, vol_id, &info->major, &info->minor)) { +- if (errno == ENOENT) +- errno = ENODEV; ++ if (vol_get_major(lib, dev_num, vol_id, &info->major, &info->minor)) + return -1; +- } + + ret = vol_read_data(lib->vol_type, dev_num, vol_id, buf, 50); + if (ret < 0) +-- +2.14.4 + diff --git a/poky/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch b/poky/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch new file mode 100644 index 000000000..5d874d981 --- /dev/null +++ b/poky/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch @@ -0,0 +1,105 @@ +Upstream-Status: Pending + +Index: git/jffsX-utils/mkfs.jffs2.c +=================================================================== +--- git.orig/jffsX-utils/mkfs.jffs2.c ++++ git/jffsX-utils/mkfs.jffs2.c +@@ -100,6 +100,11 @@ struct filesystem_entry { + struct rb_node hardlink_rb; + }; + ++struct ignorepath_entry { ++ struct ignorepath_entry* next; /* Points to the next ignorepath element */ ++ char name[PATH_MAX]; /* Name of the entry */ ++}; ++static struct ignorepath_entry* ignorepath = 0; + struct rb_root hardlinks; + static int out_fd = -1; + static int in_fd = -1; +@@ -309,7 +314,7 @@ static struct filesystem_entry *recursiv + char *hpath, *tpath; + struct dirent *dp, **namelist; + struct filesystem_entry *entry; +- ++ struct ignorepath_entry* element = ignorepath; + + if (lstat(hostpath, &sb)) { + sys_errmsg_die("%s", hostpath); +@@ -318,6 +323,15 @@ static struct filesystem_entry *recursiv + entry = add_host_filesystem_entry(targetpath, hostpath, + sb.st_uid, sb.st_gid, sb.st_mode, 0, parent); + ++ while ( element ) { ++ if ( strcmp( element->name, targetpath ) == 0 ) { ++ printf( "Note: ignoring directories below '%s'\n", targetpath ); ++ return entry; ++ break; ++ } ++ element = element->next; ++ } ++ + n = scandir(hostpath, &namelist, 0, alphasort); + if (n < 0) { + sys_errmsg_die("opening directory %s", hostpath); +@@ -1359,6 +1373,7 @@ static struct option long_options[] = { + {"root", 1, NULL, 'r'}, + {"pagesize", 1, NULL, 's'}, + {"eraseblock", 1, NULL, 'e'}, ++ {"ignore", 1, NULL, 'I'}, + {"output", 1, NULL, 'o'}, + {"help", 0, NULL, 'h'}, + {"verbose", 0, NULL, 'v'}, +@@ -1409,6 +1424,7 @@ static const char helptext[] = + " -L, --list-compressors Show the list of the available compressors\n" + " -t, --test-compression Call decompress and compare with the original (for test)\n" + " -n, --no-cleanmarkers Don't add a cleanmarker to every eraseblock\n" ++" -I, --ignore=PATH Ignore sub directory and file tree below PATH when recursing over the file system\n" + " -o, --output=FILE Output to FILE (default: stdout)\n" + " -l, --little-endian Create a little-endian filesystem\n" + " -b, --big-endian Create a big-endian filesystem\n" +@@ -1566,6 +1582,7 @@ int main(int argc, char **argv) + char *compr_name = NULL; + int compr_prior = -1; + int warn_page_size = 0; ++ struct ignorepath_entry* element = ignorepath; + + page_size = sysconf(_SC_PAGESIZE); + if (page_size < 0) /* System doesn't know so ... */ +@@ -1576,7 +1593,7 @@ int main(int argc, char **argv) + jffs2_compressors_init(); + + while ((opt = getopt_long(argc, argv, +- "D:d:r:s:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0) ++ "D:d:r:s:I:o:qUPfh?vVe:lbp::nc:m:x:X:Lty:i:", long_options, &c)) >= 0) + { + switch (opt) { + case 'D': +@@ -1600,6 +1617,28 @@ int main(int argc, char **argv) + warn_page_size = 0; /* set by user, so don't need to warn */ + break; + ++ case 'I': ++ printf( "Note: Adding '%s' to ignore Path\n", optarg ); ++ element = ignorepath; ++ if ( !ignorepath ) { ++ ignorepath = xmalloc( sizeof( struct ignorepath_entry ) ); ++ ignorepath->next = 0; ++ strcpy( &ignorepath->name[0], optarg ); ++ } else { ++ while ( element->next ) element = element->next; ++ element->next = xmalloc( sizeof( struct ignorepath_entry ) ); ++ element->next->next = 0; ++ strcpy( &element->next->name[0], optarg ); ++ } ++ printf( "--------- Dumping ignore path list ----------------\n" ); ++ element = ignorepath; ++ while ( element ) { ++ printf( " * '%s'\n", &element->name[0] ); ++ element = element->next; ++ } ++ printf( "---------------------------------------------------\n" ); ++ break; ++ + case 'o': + if (out_fd != -1) { + errmsg_die("output filename specified more than once"); diff --git a/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb b/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb new file mode 100644 index 000000000..69f2eba1f --- /dev/null +++ b/poky/meta/recipes-devtools/mtd/mtd-utils_git.bb @@ -0,0 +1,72 @@ +SUMMARY = "Tools for managing memory technology devices" +HOMEPAGE = "http://www.linux-mtd.infradead.org/" +SECTION = "base" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \ + file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c" + +inherit autotools pkgconfig update-alternatives + +DEPENDS = "zlib lzo e2fsprogs util-linux" +RDEPENDS_mtd-utils-tests += "bash" + +PV = "2.0.1+${SRCPV}" + +SRCREV = "9c6173559f95e939e66efb2ec3193d6f3618cf69" +SRC_URI = "git://git.infradead.org/mtd-utils.git \ + file://add-exclusion-to-mkfs-jffs2-git-2.patch \ + file://0001-Revert-Return-correct-error-number-in-ubi_get_vol_in.patch \ +" + +S = "${WORKDIR}/git/" + +EXTRA_OECONF += "--enable-install-tests" + +# xattr support creates an additional compile-time dependency on acl because +# the sys/acl.h header is needed. libacl is not needed and thus enabling xattr +# regardless whether acl is enabled or disabled in the distro should be okay. +PACKAGECONFIG ?= "${@bb.utils.filter('DISTRO_FEATURES', 'xattr', d)}" +PACKAGECONFIG[xattr] = ",,acl," + +CPPFLAGS_append_riscv64 = " -pthread -D_REENTRANT" + +EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} ${@bb.utils.contains('PACKAGECONFIG', 'xattr', '', '-DWITHOUT_XATTR', d)} -I${S}/include' 'BUILDDIR=${S}'" + +# Use higher priority than corresponding BusyBox-provided applets +ALTERNATIVE_PRIORITY = "100" + +ALTERNATIVE_${PN} = "flashcp flash_eraseall flash_lock flash_unlock nanddump nandwrite" +ALTERNATIVE_${PN}-ubifs = "ubiattach ubidetach ubimkvol ubirename ubirmvol ubirsvol ubiupdatevol" + +ALTERNATIVE_LINK_NAME[flash_eraseall] = "${sbindir}/flash_eraseall" +ALTERNATIVE_LINK_NAME[nandwrite] = "${sbindir}/nandwrite" +ALTERNATIVE_LINK_NAME[nanddump] = "${sbindir}/nanddump" +ALTERNATIVE_LINK_NAME[ubiattach] = "${sbindir}/ubiattach" +ALTERNATIVE_LINK_NAME[ubiattach] = "${sbindir}/ubiattach" +ALTERNATIVE_LINK_NAME[ubidetach] = "${sbindir}/ubidetach" +ALTERNATIVE_LINK_NAME[ubimkvol] = "${sbindir}/ubimkvol" +ALTERNATIVE_LINK_NAME[ubirename] = "${sbindir}/ubirename" +ALTERNATIVE_LINK_NAME[ubirmvol] = "${sbindir}/ubirmvol" +ALTERNATIVE_LINK_NAME[ubirsvol] = "${sbindir}/ubirsvol" +ALTERNATIVE_LINK_NAME[ubiupdatevol] = "${sbindir}/ubiupdatevol" +ALTERNATIVE_LINK_NAME[flash_eraseall] = "${sbindir}/flash_eraseall" +ALTERNATIVE_LINK_NAME[flash_lock] = "${sbindir}/flash_lock" +ALTERNATIVE_LINK_NAME[flash_unlock] = "${sbindir}/flash_unlock" +ALTERNATIVE_LINK_NAME[flashcp] = "${sbindir}/flashcp" + +do_install () { + oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir} +} + +PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc mtd-utils-tests" + +FILES_mtd-utils-jffs2 = "${sbindir}/mkfs.jffs2 ${sbindir}/jffs2dump ${sbindir}/jffs2reader ${sbindir}/sumtool" +FILES_mtd-utils-ubifs = "${sbindir}/mkfs.ubifs ${sbindir}/ubi*" +FILES_mtd-utils-misc = "${sbindir}/nftl* ${sbindir}/ftl* ${sbindir}/rfd* ${sbindir}/doc* ${sbindir}/serve_image ${sbindir}/recv_image" +FILES_mtd-utils-tests = "${libexecdir}/mtd-utils/*" + +BBCLASSEXTEND = "native nativesdk" + +# git/.compr.c.dep:46: warning: NUL character seen; rest of line ignored +# git/.compr.c.dep:47: *** missing separator. Stop. +PARALLEL_MAKE = "" |