From 972dcfcdbfe75dcfeb777150c136576cf1a71e99 Mon Sep 17 00:00:00 2001 From: Tudor Florea Date: Fri, 9 Oct 2015 22:59:03 +0200 Subject: initial commit for Enea Linux 5.0 arm Signed-off-by: Tudor Florea --- .../add-exclusion-to-mkfs-jffs2-git-2.patch | 103 ++++++++++++++++ .../mtd/mtd-utils/fix-armv7-neon-alignment.patch | 44 +++++++ ...t-cleanmarker-with-flash_erase--j-command.patch | 133 +++++++++++++++++++++ meta/recipes-devtools/mtd/mtd-utils_git.bb | 34 ++++++ 4 files changed, 314 insertions(+) create mode 100644 meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch create mode 100644 meta/recipes-devtools/mtd/mtd-utils/fix-armv7-neon-alignment.patch create mode 100644 meta/recipes-devtools/mtd/mtd-utils/mtd-utils-fix-corrupt-cleanmarker-with-flash_erase--j-command.patch create mode 100644 meta/recipes-devtools/mtd/mtd-utils_git.bb (limited to 'meta/recipes-devtools/mtd') diff --git a/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch b/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch new file mode 100644 index 0000000000..57d6a30d82 --- /dev/null +++ b/meta/recipes-devtools/mtd/mtd-utils/add-exclusion-to-mkfs-jffs2-git-2.patch @@ -0,0 +1,103 @@ +Upstream-Status: Pending + +--- /tmp/mkfs.jffs2.c 2009-01-11 15:28:41.000000000 +0100 ++++ git/mkfs.jffs2.c 2009-01-11 15:59:29.000000000 +0100 +@@ -100,6 +100,11 @@ + 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; +@@ -408,7 +413,7 @@ + char *hpath, *tpath; + struct dirent *dp, **namelist; + struct filesystem_entry *entry; +- ++ struct ignorepath_entry* element = ignorepath; + + if (lstat(hostpath, &sb)) { + perror_msg_and_die("%s", hostpath); +@@ -417,6 +422,15 @@ + 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) { + perror_msg_and_die("opening directory %s", hostpath); +@@ -1453,6 +1467,7 @@ + {"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'}, +@@ -1500,6 +1515,7 @@ + " -L, --list-compressors Show the list of the avaiable 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" +@@ -1666,6 +1682,7 @@ + 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 ... */ +@@ -1676,7 +1693,7 @@ + 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': +@@ -1700,6 +1717,28 @@ + 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) { + error_msg_and_die("output filename specified more than once"); diff --git a/meta/recipes-devtools/mtd/mtd-utils/fix-armv7-neon-alignment.patch b/meta/recipes-devtools/mtd/mtd-utils/fix-armv7-neon-alignment.patch new file mode 100644 index 0000000000..44b25d164a --- /dev/null +++ b/meta/recipes-devtools/mtd/mtd-utils/fix-armv7-neon-alignment.patch @@ -0,0 +1,44 @@ +Upstream-Status: Pending + +NEON instruction VLD1.64 was used to copy 64 bits data after type +casting, and they will trigger alignment trap. +This patch uses memcpy to avoid alignment problem. + +Signed-off-by: Yuanjie Huang + +diff --git a/mkfs.ubifs/key.h b/mkfs.ubifs/key.h +index d3a02d4..e7e9218 100644 +--- a/mkfs.ubifs/key.h ++++ b/mkfs.ubifs/key.h +@@ -141,10 +141,12 @@ static inline void data_key_init(union ubifs_key *key, ino_t inum, + */ + static inline void key_write(const union ubifs_key *from, void *to) + { +- union ubifs_key *t = to; ++ __le32 x[2]; + +- t->j32[0] = cpu_to_le32(from->u32[0]); +- t->j32[1] = cpu_to_le32(from->u32[1]); ++ x[0] = cpu_to_le32(from->u32[0]); ++ x[1] = cpu_to_le32(from->u32[1]); ++ ++ memcpy(to, &x, 8); + memset(to + 8, 0, UBIFS_MAX_KEY_LEN - 8); + } + +@@ -156,10 +158,12 @@ static inline void key_write(const union ubifs_key *from, void *to) + */ + static inline void key_write_idx(const union ubifs_key *from, void *to) + { +- union ubifs_key *t = to; ++ __le32 x[2]; ++ ++ x[0] = cpu_to_le32(from->u32[0]); ++ x[1] = cpu_to_le32(from->u32[1]); + +- t->j32[0] = cpu_to_le32(from->u32[0]); +- t->j32[1] = cpu_to_le32(from->u32[1]); ++ memcpy(to, &x, 8); + } + + /** diff --git a/meta/recipes-devtools/mtd/mtd-utils/mtd-utils-fix-corrupt-cleanmarker-with-flash_erase--j-command.patch b/meta/recipes-devtools/mtd/mtd-utils/mtd-utils-fix-corrupt-cleanmarker-with-flash_erase--j-command.patch new file mode 100644 index 0000000000..a66087e301 --- /dev/null +++ b/meta/recipes-devtools/mtd/mtd-utils/mtd-utils-fix-corrupt-cleanmarker-with-flash_erase--j-command.patch @@ -0,0 +1,133 @@ +Upstream-Status: Pending +From patchwork Mon Aug 8 08:16:43 2011 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: mtd-utils: fix corrupt cleanmarker with flash_erase -j command +Date: Sun, 07 Aug 2011 22:16:43 -0000 +From: b35362@freescale.com +X-Patchwork-Id: 108873 +Message-Id: <1312791403-13473-1-git-send-email-b35362@freescale.com> +To: +Cc: Liu Shuo , Artem.Bityutskiy@nokia.com, + Li Yang , linux-mtd@lists.infradead.org + +From: Liu Shuo + +Flash_erase -j should fill discrete freeoob areas with required bytes +of JFFS2 cleanmarker in jffs2_check_nand_cleanmarker(). Not just fill +the first freeoob area. + +The below is the result without this workaround: + +JFFS2: Erase block at 0x00000000 is not formatted. It will be erased +JFFS2: Erase block at 0x00004000 is not formatted. It will be erased +JFFS2: Erase block at 0x00008000 is not formatted. It will be erased +JFFS2: Erase block at 0x0000c000 is not formatted. It will be erased +JFFS2: Erase block at 0x00010000 is not formatted. It will be erased +JFFS2: Erase block at 0x00014000 is not formatted. It will be erased +JFFS2: Erase block at 0x00018000 is not formatted. It will be erased +JFFS2: Erase block at 0x0001c000 is not formatted. It will be erased +JFFS2: Erase block at 0x00020000 is not formatted. It will be erased +JFFS2: Erase block at 0x00024000 is not formatted. It will be erased +JFFS2: Erase block at 0x00028000 is not formatted. It will be erased +... + +Signed-off-by: Liu Shuo +Signed-off-by: Li Yang + +--- +v2 : get length of availble freeoob bytes from oobinfo information, + not use the ioctl ECCGETLAYOUT which is being deprecated. + + flash_erase.c | 46 +++++++++++++++++++++++++++++++++++++++------- + 1 files changed, 39 insertions(+), 7 deletions(-) + +diff --git a/flash_erase.c b/flash_erase.c +index fe2eaca..3e94495 100644 +--- a/flash_erase.c ++++ b/flash_erase.c +@@ -98,6 +98,7 @@ int main(int argc, char *argv[]) + int isNAND; + int error = 0; + uint64_t offset = 0; ++ void *oob_data = NULL; + + /* + * Process user arguments +@@ -197,15 +198,43 @@ int main(int argc, char *argv[]) + if (ioctl(fd, MEMGETOOBSEL, &oobinfo) != 0) + return sys_errmsg("%s: unable to get NAND oobinfo", mtd_device); + ++ cleanmarker.totlen = cpu_to_je32(8); + /* Check for autoplacement */ + if (oobinfo.useecc == MTD_NANDECC_AUTOPLACE) { +- /* Get the position of the free bytes */ +- if (!oobinfo.oobfree[0][1]) ++ struct nand_ecclayout_user ecclayout; ++ int i, oobavail; ++ ++ for (i = 0, oobavail = 0; oobinfo.oobfree[i][1]; i++) ++ oobavail += oobinfo.oobfree[i][1]; ++ ++ if (!oobavail) + return errmsg(" Eeep. Autoplacement selected and no empty space in oob"); ++ ++ /* Get the position of the free bytes */ + clmpos = oobinfo.oobfree[0][0]; +- clmlen = oobinfo.oobfree[0][1]; +- if (clmlen > 8) +- clmlen = 8; ++ clmlen = MIN(oobavail, 8); ++ ++ if (oobinfo.oobfree[0][1] < 8 && oobavail >= 8) { ++ int left, n, last = 0; ++ void *cm; ++ ++ oob_data = malloc(mtd.oob_size); ++ if (!oob_data) ++ return -ENOMEM; ++ ++ memset(oob_data, 0xff, mtd.oob_size); ++ cm = &cleanmarker; ++ for (i = 0, left = clmlen; left ; i++) { ++ n = MIN(left, oobinfo.oobfree[i][1]); ++ memcpy(oob_data + oobinfo.oobfree[i][0], ++ cm, n); ++ left -= n; ++ cm += n; ++ last = oobinfo.oobfree[i][0] + n; ++ } ++ ++ clmlen = last - clmpos; ++ } + } else { + /* Legacy mode */ + switch (mtd.oob_size) { +@@ -223,7 +252,6 @@ int main(int argc, char *argv[]) + break; + } + } +- cleanmarker.totlen = cpu_to_je32(8); + } + cleanmarker.hdr_crc = cpu_to_je32(mtd_crc32(0, &cleanmarker, sizeof(cleanmarker) - 4)); + } +@@ -272,7 +300,8 @@ int main(int argc, char *argv[]) + + /* write cleanmarker */ + if (isNAND) { +- if (mtd_write_oob(mtd_desc, &mtd, fd, offset + clmpos, clmlen, &cleanmarker) != 0) { ++ void *data = oob_data ? oob_data + clmpos : &cleanmarker; ++ if (mtd_write_oob(mtd_desc, &mtd, fd, offset + clmpos, clmlen, data) != 0) { + sys_errmsg("%s: MTD writeoob failure", mtd_device); + continue; + } +@@ -291,5 +320,8 @@ int main(int argc, char *argv[]) + show_progress(&mtd, offset, eb, eb_start, eb_cnt); + bareverbose(!quiet, "\n"); + ++ if (oob_data) ++ free(oob_data); ++ + return 0; + } diff --git a/meta/recipes-devtools/mtd/mtd-utils_git.bb b/meta/recipes-devtools/mtd/mtd-utils_git.bb new file mode 100644 index 0000000000..52297c63ba --- /dev/null +++ b/meta/recipes-devtools/mtd/mtd-utils_git.bb @@ -0,0 +1,34 @@ +SUMMARY = "Tools for managing memory technology devices" +SECTION = "base" +DEPENDS = "zlib lzo e2fsprogs util-linux" +HOMEPAGE = "http://www.linux-mtd.infradead.org/" +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=0636e73ff0215e8d672dc4c32c317bb3 \ + file://include/common.h;beginline=1;endline=17;md5=ba05b07912a44ea2bf81ce409380049c" + +# Use the latest version at 26 Oct, 2013 +SRCREV = "9f107132a6a073cce37434ca9cda6917dd8d866b" +SRC_URI = "git://git.infradead.org/mtd-utils.git \ + file://add-exclusion-to-mkfs-jffs2-git-2.patch \ + file://fix-armv7-neon-alignment.patch \ +" + +PV = "1.5.1+git${SRCPV}" + +S = "${WORKDIR}/git/" + +EXTRA_OEMAKE = "'CC=${CC}' 'RANLIB=${RANLIB}' 'AR=${AR}' 'CFLAGS=${CFLAGS} -I${S}/include -DWITHOUT_XATTR' 'BUILDDIR=${S}'" + +do_install () { + oe_runmake install DESTDIR=${D} SBINDIR=${sbindir} MANDIR=${mandir} INCLUDEDIR=${includedir} +} + +PACKAGES =+ "mtd-utils-jffs2 mtd-utils-ubifs mtd-utils-misc" + +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" + +PARALLEL_MAKE = "" + +BBCLASSEXTEND = "native" -- cgit v1.2.3-54-g00ecf