projects
/
openwrt
/
openwrt.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
firmware-utils: mktplinkfw: add option for endianness swap
[openwrt/openwrt.git]
/
tools
/
firmware-utils
/
src
/
mktplinkfw.c
diff --git
a/tools/firmware-utils/src/mktplinkfw.c
b/tools/firmware-utils/src/mktplinkfw.c
index fbf89609c22dd0fb50c4c8656141c8a8b9c29817..93db44135728dba51b0883051d67a206934ec150 100644
(file)
--- a/
tools/firmware-utils/src/mktplinkfw.c
+++ b/
tools/firmware-utils/src/mktplinkfw.c
@@
-19,6
+19,8
@@
#include <libgen.h>
#include <getopt.h> /* for getopt() */
#include <stdarg.h>
#include <libgen.h>
#include <getopt.h> /* for getopt() */
#include <stdarg.h>
+#include <stdbool.h>
+#include <endian.h>
#include <errno.h>
#include <sys/stat.h>
#include <errno.h>
#include <sys/stat.h>
@@
-123,6
+125,7
@@
static uint32_t reserved_space;
static struct file_info inspect_info;
static int extract = 0;
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,
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"
"\n"
"Options:\n"
" -c use combined kernel image\n"
+" -e swap endianness in kernel load address and entry point\n"
" -E <ep> overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
" -L <la> overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
" -H <hwid> use hardware id specified with <hwid>\n"
" -E <ep> overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
" -L <la> overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
" -H <hwid> use hardware id specified with <hwid>\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);
}
get_md5(buf, len, hdr->md5sum1);
}
@@
-805,7
+814,7
@@
int main(int argc, char *argv[])
while ( 1 ) {
int c;
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:
e
hsSjv:");
if (c == -1)
break;
if (c == -1)
break;
@@
-873,6
+882,9
@@
int main(int argc, char *argv[])
case 'x':
extract = 1;
break;
case 'x':
extract = 1;
break;
+ case 'e':
+ endian_swap = true;
+ break;
case 'h':
usage(EXIT_SUCCESS);
break;
case 'h':
usage(EXIT_SUCCESS);
break;