diff options
Diffstat (limited to 'tools/firmware-utils/src/mktplinkfw.c')
-rw-r--r-- | tools/firmware-utils/src/mktplinkfw.c | 87 |
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(); |