firmware-utils: mktplinkfw: add option for endianness swap
This adds command line option in "mktplinkfw" tool for endianness swap in kernel load address and entry point fields. As in "mktplinkfw2" tool, we will need this for little-endian targets, like "ramips". Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
This commit is contained in:
parent
cf23547e57
commit
a3d232e1e6
1 changed files with 13 additions and 1 deletions
|
@ -19,6 +19,8 @@
|
||||||
#include <libgen.h>
|
#include <libgen.h>
|
||||||
#include <getopt.h> /* for getopt() */
|
#include <getopt.h> /* for getopt() */
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <endian.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
@ -123,6 +125,7 @@ static uint32_t reserved_space;
|
||||||
|
|
||||||
static struct file_info inspect_info;
|
static struct file_info inspect_info;
|
||||||
static int extract = 0;
|
static int extract = 0;
|
||||||
|
static bool endian_swap = false;
|
||||||
|
|
||||||
static const char md5salt_normal[MD5SUM_LEN] = {
|
static const char md5salt_normal[MD5SUM_LEN] = {
|
||||||
0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb,
|
0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb,
|
||||||
|
@ -256,6 +259,7 @@ static void usage(int status)
|
||||||
"\n"
|
"\n"
|
||||||
"Options:\n"
|
"Options:\n"
|
||||||
" -c use combined kernel image\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"
|
" -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"
|
" -L <la> overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
|
||||||
" -H <hwid> use hardware id specified with <hwid>\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 ) {
|
while ( 1 ) {
|
||||||
int c;
|
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)
|
if (c == -1)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -873,6 +882,9 @@ int main(int argc, char *argv[])
|
||||||
case 'x':
|
case 'x':
|
||||||
extract = 1;
|
extract = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'e':
|
||||||
|
endian_swap = true;
|
||||||
|
break;
|
||||||
case 'h':
|
case 'h':
|
||||||
usage(EXIT_SUCCESS);
|
usage(EXIT_SUCCESS);
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue