aboutsummaryrefslogtreecommitdiffstats
path: root/tools/firmware-utils/src/mktplinkfw.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools/firmware-utils/src/mktplinkfw.c')
-rw-r--r--tools/firmware-utils/src/mktplinkfw.c87
1 files changed, 12 insertions, 75 deletions
diff --git a/tools/firmware-utils/src/mktplinkfw.c b/tools/firmware-utils/src/mktplinkfw.c
index 7dbb290413..9bc112fe6c 100644
--- a/tools/firmware-utils/src/mktplinkfw.c
+++ b/tools/firmware-utils/src/mktplinkfw.c
@@ -71,7 +71,7 @@ struct fw_region {
/*
* Globals
*/
-static char *ofname;
+char *ofname;
char *progname;
static char *vendor = "TP-LINK Technologies";
static char *version = "ver. 1.0";
@@ -79,7 +79,7 @@ static char *fw_ver = "0.0.0";
static uint32_t hdr_ver = HEADER_VERSION_V1;
static char *layout_id;
-static struct flash_layout *layout;
+struct flash_layout *layout;
static char *opt_hw_id;
static uint32_t hw_id;
static char *opt_hw_rev;
@@ -90,17 +90,17 @@ static const struct fw_region *region;
static int fw_ver_lo;
static int fw_ver_mid;
static int fw_ver_hi;
-static struct file_info kernel_info;
+struct file_info kernel_info;
static uint32_t kernel_la = 0;
static uint32_t kernel_ep = 0;
-static uint32_t kernel_len = 0;
-static struct file_info rootfs_info;
-static uint32_t rootfs_ofs = 0;
-static uint32_t rootfs_align;
+uint32_t kernel_len = 0;
+struct file_info rootfs_info;
+uint32_t rootfs_ofs = 0;
+uint32_t rootfs_align;
static struct file_info boot_info;
-static int combined;
-static int strip_padding;
-static int add_jffs2_eof;
+int combined;
+int strip_padding;
+int add_jffs2_eof;
static uint32_t fw_max_len;
static uint32_t reserved_space;
@@ -355,7 +355,7 @@ static int check_options(void)
return 0;
}
-static void fill_header(char *buf, int len)
+void fill_header(char *buf, int len)
{
struct fw_header *hdr = (struct fw_header *)buf;
@@ -408,69 +408,6 @@ static void fill_header(char *buf, int len)
get_md5(buf, len, hdr->md5sum1);
}
-static int build_fw(void)
-{
- int buflen;
- char *buf;
- char *p;
- int ret = EXIT_FAILURE;
- int writelen = 0;
-
- writelen = sizeof(struct fw_header) + kernel_len;
-
- if (combined)
- buflen = writelen;
- else
- buflen = layout->fw_max_len;
-
- buf = malloc(buflen);
- if (!buf) {
- ERR("no memory for buffer\n");
- goto out;
- }
-
- memset(buf, 0xff, buflen);
- p = buf + sizeof(struct fw_header);
- ret = read_to_buf(&kernel_info, p);
- if (ret)
- goto out_free_buf;
-
-
- if (!combined) {
- if (rootfs_align)
- p = buf + writelen;
- else
- p = buf + rootfs_ofs;
-
- ret = read_to_buf(&rootfs_info, p);
- if (ret)
- goto out_free_buf;
-
- if (rootfs_align)
- writelen += rootfs_info.file_size;
- else
- writelen = rootfs_ofs + rootfs_info.file_size;
-
- if (add_jffs2_eof)
- writelen = pad_jffs2(buf, writelen, layout->fw_max_len);
- }
-
- if (!strip_padding)
- writelen = buflen;
-
- fill_header(buf, writelen);
- ret = write_fw(ofname, buf, writelen);
- if (ret)
- goto out_free_buf;
-
- ret = EXIT_SUCCESS;
-
- out_free_buf:
- free(buf);
- out:
- return ret;
-}
-
static int inspect_fw(void)
{
char *buf;
@@ -686,7 +623,7 @@ int main(int argc, char *argv[])
goto out;
if (!inspect_info.file_name)
- ret = build_fw();
+ ret = build_fw(sizeof(struct fw_header));
else
ret = inspect_fw();