mtd: add option for TRX magic to fixtrx
Buffalo uses the TRX header with a different magic and even changes this magic with different devices. This change allows to specify the header to use as a command line argument. This is needed for the Buffalo WSR-2533DHP2 based on mt7622. Co-Developed-by: Hauke Mehrtens <hauke@hauke-m.de> Signed-off-by: INAGAKI Hiroshi <musashino.open@gmail.com> Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
This commit is contained in:
parent
4d9f69322c
commit
b5b0796a13
|
@ -94,6 +94,7 @@ int mtdsize = 0;
|
||||||
int erasesize = 0;
|
int erasesize = 0;
|
||||||
int jffs2_skip_bytes=0;
|
int jffs2_skip_bytes=0;
|
||||||
int mtdtype = 0;
|
int mtdtype = 0;
|
||||||
|
uint32_t opt_trxmagic = TRX_MAGIC;
|
||||||
|
|
||||||
int mtd_open(const char *mtd, bool block)
|
int mtd_open(const char *mtd, bool block)
|
||||||
{
|
{
|
||||||
|
@ -205,7 +206,7 @@ image_check(int imagefd, const char *mtd)
|
||||||
|
|
||||||
magic = ((uint32_t *)buf)[0];
|
magic = ((uint32_t *)buf)[0];
|
||||||
|
|
||||||
if (be32_to_cpu(magic) == TRX_MAGIC)
|
if (be32_to_cpu(magic) == opt_trxmagic)
|
||||||
imageformat = MTD_IMAGE_FORMAT_TRX;
|
imageformat = MTD_IMAGE_FORMAT_TRX;
|
||||||
else if (be32_to_cpu(magic) == SEAMA_MAGIC)
|
else if (be32_to_cpu(magic) == SEAMA_MAGIC)
|
||||||
imageformat = MTD_IMAGE_FORMAT_SEAMA;
|
imageformat = MTD_IMAGE_FORMAT_SEAMA;
|
||||||
|
@ -810,6 +811,7 @@ static void usage(void)
|
||||||
" -l <length> the length of data that we want to dump\n");
|
" -l <length> the length of data that we want to dump\n");
|
||||||
if (mtd_fixtrx) {
|
if (mtd_fixtrx) {
|
||||||
fprintf(stderr,
|
fprintf(stderr,
|
||||||
|
" -M <magic> magic number of the image header in the partition (for fixtrx)\n"
|
||||||
" -o offset offset of the image header in the partition(for fixtrx)\n");
|
" -o offset offset of the image header in the partition(for fixtrx)\n");
|
||||||
}
|
}
|
||||||
if (mtd_fixtrx || mtd_fixseama || mtd_fixwrg || mtd_fixwrgg) {
|
if (mtd_fixtrx || mtd_fixseama || mtd_fixwrg || mtd_fixwrgg) {
|
||||||
|
@ -877,7 +879,7 @@ int main (int argc, char **argv)
|
||||||
#ifdef FIS_SUPPORT
|
#ifdef FIS_SUPPORT
|
||||||
"F:"
|
"F:"
|
||||||
#endif
|
#endif
|
||||||
"frnqe:d:s:j:p:o:c:t:l:")) != -1)
|
"frnqe:d:s:j:p:o:c:t:l:M:")) != -1)
|
||||||
switch (ch) {
|
switch (ch) {
|
||||||
case 'f':
|
case 'f':
|
||||||
force = 1;
|
force = 1;
|
||||||
|
@ -929,6 +931,14 @@ int main (int argc, char **argv)
|
||||||
usage();
|
usage();
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case 'M':
|
||||||
|
errno = 0;
|
||||||
|
opt_trxmagic = strtoul(optarg, 0, 0);
|
||||||
|
if (errno) {
|
||||||
|
fprintf(stderr, "-M: illegal numeric string\n");
|
||||||
|
usage();
|
||||||
|
}
|
||||||
|
break;
|
||||||
case 'o':
|
case 'o':
|
||||||
errno = 0;
|
errno = 0;
|
||||||
offset = strtoul(optarg, 0, 0);
|
offset = strtoul(optarg, 0, 0);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
extern int quiet;
|
extern int quiet;
|
||||||
extern int mtdsize;
|
extern int mtdsize;
|
||||||
extern int erasesize;
|
extern int erasesize;
|
||||||
|
extern uint32_t opt_trxmagic;
|
||||||
|
|
||||||
extern int mtd_open(const char *mtd, bool block);
|
extern int mtd_open(const char *mtd, bool block);
|
||||||
extern int mtd_check_open(const char *mtd);
|
extern int mtd_check_open(const char *mtd);
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#include "mtd.h"
|
#include "mtd.h"
|
||||||
#include "crc32.h"
|
#include "crc32.h"
|
||||||
|
|
||||||
#define TRX_MAGIC 0x30524448 /* "HDR0" */
|
|
||||||
#define TRX_CRC32_DATA_OFFSET 12 /* First 12 bytes are not covered by CRC32 */
|
#define TRX_CRC32_DATA_OFFSET 12 /* First 12 bytes are not covered by CRC32 */
|
||||||
#define TRX_CRC32_DATA_SIZE 16
|
#define TRX_CRC32_DATA_SIZE 16
|
||||||
struct trx_header {
|
struct trx_header {
|
||||||
|
@ -92,7 +91,7 @@ trx_fixup(int fd, const char *name)
|
||||||
}
|
}
|
||||||
|
|
||||||
trx = ptr;
|
trx = ptr;
|
||||||
if (trx->magic != TRX_MAGIC) {
|
if (ntohl(trx->magic) != opt_trxmagic) {
|
||||||
fprintf(stderr, "TRX header not found\n");
|
fprintf(stderr, "TRX header not found\n");
|
||||||
goto err;
|
goto err;
|
||||||
}
|
}
|
||||||
|
@ -127,7 +126,8 @@ trx_check(int imagefd, const char *mtd, char *buf, int *len)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (trx->magic != TRX_MAGIC || trx->len < sizeof(struct trx_header)) {
|
if (ntohl(trx->magic) != opt_trxmagic ||
|
||||||
|
trx->len < sizeof(struct trx_header)) {
|
||||||
if (quiet < 2) {
|
if (quiet < 2) {
|
||||||
fprintf(stderr, "Bad trx header\n");
|
fprintf(stderr, "Bad trx header\n");
|
||||||
fprintf(stderr, "This is not the correct file format; refusing to flash.\n"
|
fprintf(stderr, "This is not the correct file format; refusing to flash.\n"
|
||||||
|
@ -200,7 +200,7 @@ mtd_fixtrx(const char *mtd, size_t offset, size_t data_size)
|
||||||
}
|
}
|
||||||
|
|
||||||
trx = (struct trx_header *)(first_block + offset);
|
trx = (struct trx_header *)(first_block + offset);
|
||||||
if (trx->magic != STORE32_LE(0x30524448)) {
|
if (ntohl(trx->magic) != opt_trxmagic) {
|
||||||
fprintf(stderr, "No trx magic found\n");
|
fprintf(stderr, "No trx magic found\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue