X-Git-Url: http://git.openwrt.org/?a=blobdiff_plain;f=tools%2Ffirmware-utils%2Fsrc%2Fmktplinkfw.c;fp=tools%2Ffirmware-utils%2Fsrc%2Fmktplinkfw.c;h=93db44135728dba51b0883051d67a206934ec150;hb=a3d232e1e6e5a49e7d1c1d9bc56be9ebd8ae6171;hp=fbf89609c22dd0fb50c4c8656141c8a8b9c29817;hpb=cf23547e57420cefeca11daf03d71e92629a6d00;p=openwrt%2Fstaging%2Fchunkeey.git diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c index fbf89609c2..93db441357 100644 --- a/tools/firmware-utils/src/mktplinkfw.c +++ b/tools/firmware-utils/src/mktplinkfw.c @@ -19,6 +19,8 @@ #include #include /* for getopt() */ #include +#include +#include #include #include @@ -123,6 +125,7 @@ static uint32_t reserved_space; static struct file_info inspect_info; static int extract = 0; +static bool endian_swap = false; static const char md5salt_normal[MD5SUM_LEN] = { 0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb, @@ -256,6 +259,7 @@ static void usage(int status) "\n" "Options:\n" " -c use combined kernel image\n" +" -e swap endianness in kernel load address and entry point\n" " -E overwrite kernel entry point with (hexval prefixed with 0x)\n" " -L overwrite kernel load address with (hexval prefixed with 0x)\n" " -H use hardware id specified with \n" @@ -521,6 +525,11 @@ static void fill_header(char *buf, int len) ); } + if (endian_swap) { + hdr->kernel_la = bswap_32(hdr->kernel_la); + hdr->kernel_ep = bswap_32(hdr->kernel_ep); + } + get_md5(buf, len, hdr->md5sum1); } @@ -805,7 +814,7 @@ int main(int argc, char *argv[]) while ( 1 ) { int c; - c = getopt(argc, argv, "a:H:E:F:L:m:V:N:W:C:ci:k:r:R:o:xX:hsSjv:"); + c = getopt(argc, argv, "a:H:E:F:L:m:V:N:W:C:ci:k:r:R:o:xX:ehsSjv:"); if (c == -1) break; @@ -873,6 +882,9 @@ int main(int argc, char *argv[]) case 'x': extract = 1; break; + case 'e': + endian_swap = true; + break; case 'h': usage(EXIT_SUCCESS); break;