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 erase before executing the command\n" " -d directory for jffs2write, defaults to \"tmp\"\n" " -j integrate into jffs2 data when writing an image\n" + " -s 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; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 266bf3fd5c..1eb9354057 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -327,6 +327,10 @@ platform_do_upgrade() { om2p-lc) platform_do_upgrade_openmesh "$ARGV" ;; + uap-pro) + MTD_CONFIG_ARGS="-s 0x180000" + default_do_upgrade "$ARGV" + ;; *) default_do_upgrade "$ARGV" ;;