diff options
| author | Alexander Couzens | 2019-05-07 14:33:58 +0000 |
|---|---|---|
| committer | Alexander Couzens | 2023-09-19 18:01:06 +0000 |
| commit | 9e211d2980fe556b70c7191a8c908916316ebc1a (patch) | |
| tree | 85f2f56e41ff48ad2426c5cf60bb85a5893c7561 | |
| parent | 89875fc18b57e72ffcfbe716a6a3e2ae6c9ead5e (diff) | |
| download | firmware-utils-9e211d2980fe556b70c7191a8c908916316ebc1a.tar.gz | |
mktplinkfw2: add support to extract bootloader images
tplinkfw2 images from TP-Link contains a bootloader image in most cases.
-x will create a -bootloader.bin file.
Signed-off-by: Alexander Couzens <lynxis@fe80.eu>
| -rw-r--r-- | src/mktplinkfw2.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/src/mktplinkfw2.c b/src/mktplinkfw2.c index f25355a..d51e9ca 100644 --- a/src/mktplinkfw2.c +++ b/src/mktplinkfw2.c @@ -207,7 +207,7 @@ static void usage(int status) " -v <version> set firmware version to <version>\n" " -y <version> set secondary version to <version>\n" " -i <file> inspect given firmware file <file>\n" -" -x extract kernel and rootfs while inspecting (requires -i)\n" +" -x extract bootloader, kernel and rootfs while inspecting (requires -i)\n" " -h show this screen\n" ); @@ -507,6 +507,23 @@ static int inspect_fw(void) printf("\n"); + if (hdr->boot_len) { + filename = malloc(strlen(inspect_info.file_name) + 8); + sprintf(filename, "%s-bootloader", inspect_info.file_name); + printf("Extracting bootloader to \"%s\"...\n", filename); + fp = fopen(filename, "w"); + if (fp) { + if (!fwrite(buf + sizeof(struct fw_header) + ntohl(hdr->boot_ofs), + ntohl(hdr->boot_len), 1, fp)) { + ERR("error in fwrite(): %s", strerror(errno)); + } + fclose(fp); + } else { + ERR("error in fopen(): %s", strerror(errno)); + } + free(filename); + } + filename = malloc(strlen(inspect_info.file_name) + 8); sprintf(filename, "%s-kernel", inspect_info.file_name); printf("Extracting kernel to \"%s\"...\n", filename); |