1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-12-12 00:44:03 +02:00

backfire: firmware-utils/wndr3700: allow to specify image magic via command line (backport of r24980)

git-svn-id: svn://svn.openwrt.org/openwrt/branches/backfire@26111 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg 2011-03-13 14:53:43 +00:00
parent 589922047c
commit cd60b74186

View File

@ -37,7 +37,10 @@
#define BPB 8 /* bits/byte */ #define BPB 8 /* bits/byte */
#define WNDR3700_MAGIC_LEN 4
static uint32_t crc32[1<<BPB]; static uint32_t crc32[1<<BPB];
static char *magic = "3700";
static void init_crc32() static void init_crc32()
{ {
@ -64,7 +67,7 @@ static uint32_t crc32buf(unsigned char *buf, size_t len)
} }
struct header { struct header {
uint32_t magic; unsigned char magic[WNDR3700_MAGIC_LEN];
uint32_t crc; uint32_t crc;
unsigned char stuff[56]; unsigned char stuff[56];
}; };
@ -74,7 +77,7 @@ static void usage(const char *) __attribute__ (( __noreturn__ ));
static void usage(const char *mess) static void usage(const char *mess)
{ {
fprintf(stderr, "Error: %s\n", mess); fprintf(stderr, "Error: %s\n", mess);
fprintf(stderr, "Usage: wndr3700 input_file output_file\n"); fprintf(stderr, "Usage: wndr3700 input_file output_file [magic]\n");
fprintf(stderr, "\n"); fprintf(stderr, "\n");
exit(1); exit(1);
} }
@ -90,9 +93,17 @@ int main(int argc, char **argv)
// verify parameters // verify parameters
if (argc != 3) if (argc < 3)
usage("wrong number of arguments"); usage("wrong number of arguments");
if (argc > 3)
magic = argv[3];
if (strlen(magic) != WNDR3700_MAGIC_LEN) {
fprintf(stderr, "Invalid magic: '%s'\n", magic);
exit(1);
}
// mmap input_file // mmap input_file
if ((fd = open(argv[1], O_RDONLY)) < 0 if ((fd = open(argv[1], O_RDONLY)) < 0
|| (len = lseek(fd, 0, SEEK_END)) < 0 || (len = lseek(fd, 0, SEEK_END)) < 0
@ -110,7 +121,7 @@ int main(int argc, char **argv)
// preload header // preload header
memcpy(&header, input_file, sizeof(header)); memcpy(&header, input_file, sizeof(header));
header.magic = htonl(0x33373030); /* 3700 in ascii */ memcpy(header.magic, magic, WNDR3700_MAGIC_LEN);
header.crc = 0; header.crc = 0;
// create a firmware image in memory and copy the input_file to it // create a firmware image in memory and copy the input_file to it