aboutsummaryrefslogtreecommitdiffstats
path: root/package/system/mtd/src/mtd.c
diff options
context:
space:
mode:
authorRafał Miłecki <zajec5@gmail.com>2016-05-09 18:10:35 +0000
committerLuka Perkov <luka@openwrt.org>2016-06-19 19:24:31 +0200
commite894664b490c35b3ca06568024de6a00c8c0de24 (patch)
tree5056455cc6e2353c35e4c450cbe04ced4a53c294 /package/system/mtd/src/mtd.c
parent5a5787d877400eb83809ea5dc9af5e9fccc5b986 (diff)
downloadmaster-187ad058-e894664b490c35b3ca06568024de6a00c8c0de24.tar.gz
master-187ad058-e894664b490c35b3ca06568024de6a00c8c0de24.tar.bz2
master-187ad058-e894664b490c35b3ca06568024de6a00c8c0de24.zip
mtd: add -c option for specifying amount of data to be used for checksum
So far fixtrx was calculating checksum over amount of data matching partition erase size. It was mostly a workaround of checksum problem after changing anything in initial TRX content (e.g. formatting JFFS2). Its main purpose was to make bootloader accept modified TRX. This didn't provide much protection of flash data against corruption. This new option lets caller request calculating checksum over a bigger amount of data. It may be used e.g. to include whole kernel data for checksum and hopefully make bootloader go info failsafe mode if something goes wrong. Signed-off-by: Rafał Miłecki <zajec5@gmail.com> git-svn-id: svn://svn.openwrt.org/openwrt/trunk@49317 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'package/system/mtd/src/mtd.c')
-rw-r--r--package/system/mtd/src/mtd.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/package/system/mtd/src/mtd.c b/package/system/mtd/src/mtd.c
index c5115a794c..a8464947f3 100644
--- a/package/system/mtd/src/mtd.c
+++ b/package/system/mtd/src/mtd.c
@@ -737,6 +737,8 @@ static void usage(void)
if (mtd_fixtrx) {
fprintf(stderr,
" -o offset offset of the image header in the partition(for fixtrx)\n");
+ fprintf(stderr,
+ " -c datasize amount of data to be used for checksum calculation (for fixtrx)\n");
}
fprintf(stderr,
#ifdef FIS_SUPPORT
@@ -769,7 +771,7 @@ int main (int argc, char **argv)
int ch, i, boot, imagefd = 0, force, unlocked;
char *erase[MAX_ARGS], *device = NULL;
char *fis_layout = NULL;
- size_t offset = 0, part_offset = 0, dump_len = 0;
+ size_t offset = 0, data_size = 0, part_offset = 0, dump_len = 0;
enum {
CMD_ERASE,
CMD_WRITE,
@@ -793,7 +795,7 @@ int main (int argc, char **argv)
#ifdef FIS_SUPPORT
"F:"
#endif
- "frnqe:d:s:j:p:o:l:")) != -1)
+ "frnqe:d:s:j:p:o:c:l:")) != -1)
switch (ch) {
case 'f':
force = 1;
@@ -853,6 +855,14 @@ int main (int argc, char **argv)
usage();
}
break;
+ case 'c':
+ errno = 0;
+ data_size = strtoul(optarg, 0, 0);
+ if (errno) {
+ fprintf(stderr, "-d: illegal numeric string\n");
+ usage();
+ }
+ break;
#ifdef FIS_SUPPORT
case 'F':
fis_layout = optarg;
@@ -967,7 +977,7 @@ int main (int argc, char **argv)
break;
case CMD_FIXTRX:
if (mtd_fixtrx) {
- mtd_fixtrx(device, offset);
+ mtd_fixtrx(device, offset, data_size);
}
break;
case CMD_RESETBC: