summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authormarkus <markus@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-27 15:37:37 +0000
committermarkus <markus@3c298f89-4303-0410-b956-a3cf2f4a3e73>2010-07-27 15:37:37 +0000
commit3c05ba24723fa368dd070c212376b7dbaa4269a6 (patch)
treea55f21b7f7bc5cd6bc5ab6545f976b4e155367f8 /tools
parentdbf130182cf039b11903162e88b063ce4267e8bd (diff)
fix CRC32 calculation for sysupgrade
* reduce image size for CRC calculation by fs_mark size sysupgrade sometimes failed for me and I noticed that it was due to incorrect CRC values in trx-header after performing it. It seems that the fs_mark was completely included in the calculation and that it was nevertheless modified by sysupgrade while appending the jffs data. This only occurs for the first boot after sysupgrade as the flashmap driver recalculates the CRC to an even smaller area when it boots. git-svn-id: svn://svn.openwrt.org/openwrt/trunk@22396 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'tools')
-rw-r--r--tools/firmware-utils/src/trx.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/tools/firmware-utils/src/trx.c b/tools/firmware-utils/src/trx.c
index 7a64cfd1a..9697ad79d 100644
--- a/tools/firmware-utils/src/trx.c
+++ b/tools/firmware-utils/src/trx.c
@@ -98,7 +98,7 @@ int main(int argc, char **argv)
int c, i, append = 0;
size_t n;
ssize_t n2;
- uint32_t cur_len;
+ uint32_t cur_len, fsmark=0;
unsigned long maxlen = TRX_MAX_LEN;
struct trx_header *p;
char trx_version = 1;
@@ -131,6 +131,8 @@ int main(int argc, char **argv)
cur_len += 4;
}
break;
+ case 'F':
+ fsmark = cur_len;
case 'A':
append = 1;
/* fall through */
@@ -269,10 +271,10 @@ int main(int argc, char **argv)
}
p->crc32 = crc32buf((char *) &p->flag_version,
- cur_len - offsetof(struct trx_header, flag_version));
+ (fsmark)?fsmark:cur_len - offsetof(struct trx_header, flag_version));
p->crc32 = STORE32_LE(p->crc32);
- p->len = STORE32_LE(cur_len);
+ p->len = (fsmark)?fsmark:cur_len - offsetof(struct trx_header, flag_version);
/* restore TRXv2 bin-header */
if (trx_version == 2) {