Commit 0b758e02 authored by Oleg Dzhimiev's avatar Oleg Dzhimiev

mtd-utils: roll back from 2.0.2 to a working version: 2.0.0 - patches were...

mtd-utils: roll back from 2.0.2 to a working version: 2.0.0 - patches were copied back from rocko branch
parent e74ee31c
From 4dab9bed1033f797ef9b482c77342fe3fe26d0be Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 6 Oct 2015 23:51:34 +0000
Subject: [PATCH] Fix build with musl
Upstream-Status: Backport
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
jffsX-utils/mkfs.jffs2.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/jffsX-utils/mkfs.jffs2.c b/jffsX-utils/mkfs.jffs2.c
index 5446a16..ca5e0d5 100644
--- a/jffsX-utils/mkfs.jffs2.c
+++ b/jffsX-utils/mkfs.jffs2.c
@@ -72,6 +72,7 @@
#include <byteswap.h>
#include <crc32.h>
#include <inttypes.h>
+#include <limits.h>
#include "rbtree.h"
#include "common.h"
--
2.6.1
From 82839c3c0371ca2a1643a99d7d01f5bc1c850b28 Mon Sep 17 00:00:00 2001
From: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
Date: Thu, 2 Mar 2017 11:40:36 +0100
Subject: [PATCH] Replace rpmatch() usage with checking first character of line
This is based on the patch from Khem Raj used by openembedded. In
addition to the original patch, this also removes the fallback
implementation that was provided for C libraries that don't implement
rpmatch.
Upstream-Status: Backport
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
include/common.h | 25 ++++++-------------------
1 file changed, 6 insertions(+), 19 deletions(-)
diff --git a/include/common.h b/include/common.h
index d0c706d..d609257 100644
--- a/include/common.h
+++ b/include/common.h
@@ -129,21 +129,6 @@ extern "C" {
fprintf(stderr, "%s: warning!: " fmt "\n", PROGRAM_NAME, ##__VA_ARGS__); \
} while(0)
-/* uClibc versions before 0.9.34 and musl don't have rpmatch() */
-#if defined(__UCLIBC__) && \
- (__UCLIBC_MAJOR__ == 0 && \
- (__UCLIBC_MINOR__ < 9 || \
- (__UCLIBC_MINOR__ == 9 && __UCLIBC_SUBLEVEL__ < 34))) || \
- !defined(__GLIBC__)
-#undef rpmatch
-#define rpmatch __rpmatch
-static inline int __rpmatch(const char *resp)
-{
- return (resp[0] == 'y' || resp[0] == 'Y') ? 1 :
- (resp[0] == 'n' || resp[0] == 'N') ? 0 : -1;
-}
-#endif
-
/**
* prompt the user for confirmation
*/
@@ -164,10 +149,12 @@ static inline bool prompt(const char *msg, bool def)
}
if (strcmp("\n", line) != 0) {
- switch (rpmatch(line)) {
- case 0: ret = false; break;
- case 1: ret = true; break;
- case -1:
+ switch (line[0]) {
+ case 'N':
+ case 'n': ret = false; break;
+ case 'Y':
+ case 'y': ret = true; break;
+ default:
puts("unknown response; please try again");
continue;
}
--
2.6.1
Upstream-Status: Pending
--- /tmp/mkfs.jffs2.c 2009-01-11 15:28:41.000000000 +0100
+++ git/jffsX-utils/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");
From 7d026a85946a08b8167dcd792ea6660bf6a49e08 Mon Sep 17 00:00:00 2001
From: Yuanjie Huang <Yuanjie.Huang@windriver.com>
Date: Thu, 2 Mar 2017 10:43:56 +0100
Subject: [PATCH] Fix alignment trap triggered by NEON instructions
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.
Upstream-Status: Backport
Signed-off-by: Yuanjie Huang <Yuanjie.Huang@windriver.com>
Signed-off-by: David Oberhollenzer <david.oberhollenzer@sigma-star.at>
---
ubifs-utils/mkfs.ubifs/key.h | 16 ++++++++++------
1 file changed, 10 insertions(+), 6 deletions(-)
diff --git a/ubifs-utils/mkfs.ubifs/key.h b/ubifs-utils/mkfs.ubifs/key.h
index 39379fd..118858b 100644
--- a/ubifs-utils/mkfs.ubifs/key.h
+++ b/ubifs-utils/mkfs.ubifs/key.h
@@ -159,10 +159,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);
}
@@ -174,10 +176,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);
}
/**
--
2.6.1
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: <dwmw2@infradead.org>
Cc: Liu Shuo <b35362@freescale.com>, Artem.Bityutskiy@nokia.com,
Li Yang <leoli@freescale.com>, linux-mtd@lists.infradead.org
From: Liu Shuo <b35362@freescale.com>
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 <b35362@freescale.com>
Signed-off-by: Li Yang <leoli@freescale.com>
Updated for the new version
Signed-off-by: Robert Yang <liezhi.yang@windriver.com>
---
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 933373a..4b9d84b 100644
--- a/misc-utils/flash_erase.c
+++ b/misc-utils/flash_erase.c
@@ -99,6 +99,7 @@ int main(int argc, char *argv[])
bool isNAND;
int error = 0;
off_t offset = 0;
+ void *oob_data = NULL;
/*
* Process user arguments
@@ -201,15 +202,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) {
@@ -227,7 +256,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));
}
@@ -276,7 +304,8 @@ int main(int argc, char *argv[])
/* write cleanmarker */
if (isNAND) {
- if (mtd_write_oob(mtd_desc, &mtd, fd, (uint64_t)offset + clmpos, clmlen, &cleanmarker) != 0) {
+ void *data = oob_data ? oob_data + clmpos : &cleanmarker;
+ if (mtd_write_oob(mtd_desc, &mtd, fd, (uint64_t)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;
}
FILESEXTRAPATHS_prepend := "${THISDIR}/mtd-utils:"
PV = "2.0.0"
SRCREV = "1bfee8660131fca7a18f68e9548a18ca6b3378a0"
SRC_URI = "git://git.infradead.org/mtd-utils.git \
file://add-exclusion-to-mkfs-jffs2-git-2.patch \
file://fix-armv7-neon-alignment.patch \
file://mtd-utils-fix-corrupt-cleanmarker-with-flash_erase--j-command.patch \
file://0001-Fix-build-with-musl.patch \
file://010-fix-rpmatch.patch \
"
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment