aboutsummaryrefslogtreecommitdiffstats
path: root/package
diff options
context:
space:
mode:
Diffstat (limited to 'package')
-rw-r--r--package/base-files/files/lib/upgrade/common.sh2
-rwxr-xr-xpackage/base-files/files/sbin/sysupgrade1
-rw-r--r--package/system/mtd/src/mtd.c15
3 files changed, 14 insertions, 4 deletions
diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
index 9116206965..6122ae7712 100644
--- a/package/base-files/files/lib/upgrade/common.sh
+++ b/package/base-files/files/lib/upgrade/common.sh
@@ -188,7 +188,7 @@ jffs2_copy_config() {
default_do_upgrade() {
sync
if [ "$SAVE_CONFIG" -eq 1 ]; then
- get_image "$1" | mtd -j "$CONF_TAR" write - "${PART_NAME:-image}"
+ get_image "$1" | mtd $MTD_CONFIG_ARGS -j "$CONF_TAR" write - "${PART_NAME:-image}"
else
get_image "$1" | mtd write - "${PART_NAME:-image}"
fi
diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
index eb5ab035c6..14b09eb0b5 100755
--- a/package/base-files/files/sbin/sysupgrade
+++ b/package/base-files/files/sbin/sysupgrade
@@ -4,6 +4,7 @@
# initialize defaults
RAMFS_COPY_BIN="" # extra programs for temporary ramfs root
RAMFS_COPY_DATA="" # extra data files
+export MTD_CONFIG_ARGS=""
export INTERACTIVE=0
export VERBOSE=1
export SAVE_CONFIG=1
diff --git a/package/system/mtd/src/mtd.c b/package/system/mtd/src/mtd.c
index a660486283..2ec02a871b 100644
--- a/package/system/mtd/src/mtd.c
+++ b/package/system/mtd/src/mtd.c
@@ -55,6 +55,7 @@ int quiet;
int no_erase;
int mtdsize = 0;
int erasesize = 0;
+int jffs2_skip_bytes=0;
int mtd_open(const char *mtd, bool block)
{
@@ -339,7 +340,6 @@ resume:
fprintf(stderr, "Could not open mtd device: %s\n", mtd);
exit(1);
}
-
if (part_offset > 0) {
fprintf(stderr, "Seeking on mtd device '%s' to: %u\n", mtd, part_offset);
lseek(fd, part_offset, SEEK_SET);
@@ -379,7 +379,7 @@ resume:
continue;
}
- if (jffs2file) {
+ if (jffs2file && w >= jffs2_skip_bytes) {
if (memcmp(buf, JFFS2_EOF, sizeof(JFFS2_EOF) - 1) == 0) {
if (!quiet)
fprintf(stderr, "\b\b\b ");
@@ -503,6 +503,7 @@ static void usage(void)
" -e <device> erase <device> before executing the command\n"
" -d <name> directory for jffs2write, defaults to \"tmp\"\n"
" -j <name> integrate <file> into jffs2 data when writing an image\n"
+ " -s <number> skip the first n bytes when appending data to the jffs2 partiton, defaults to \"0\"\n"
" -p write beginning at partition offset\n");
if (mtd_fixtrx) {
fprintf(stderr,
@@ -560,7 +561,7 @@ int main (int argc, char **argv)
#ifdef FIS_SUPPORT
"F:"
#endif
- "frnqe:d:j:p:o:")) != -1)
+ "frnqe:d:s:j:p:o:")) != -1)
switch (ch) {
case 'f':
force = 1;
@@ -574,6 +575,14 @@ int main (int argc, char **argv)
case 'j':
jffs2file = optarg;
break;
+ case 's':
+ errno = 0;
+ jffs2_skip_bytes = strtoul(optarg, 0, 0);
+ if (errno) {
+ fprintf(stderr, "-s: illegal numeric string\n");
+ usage();
+ }
+ break;
case 'q':
quiet++;
break;