1
0
mirror of git://projects.qi-hardware.com/openwrt-xburst.git synced 2024-07-04 21:02:21 +03:00

firmware-utils/mktplinkfw: allow to specify firmware version

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@32616 3c298f89-4303-0410-b956-a3cf2f4a3e73
This commit is contained in:
juhosg 2012-07-05 16:25:29 +00:00
parent fd349e4b0c
commit 72923143d4

View File

@ -79,7 +79,10 @@ struct fw_header {
uint32_t rootfs_len; /* rootfs data length */ uint32_t rootfs_len; /* rootfs data length */
uint32_t boot_ofs; /* bootloader data offset */ uint32_t boot_ofs; /* bootloader data offset */
uint32_t boot_len; /* bootloader data length */ uint32_t boot_len; /* bootloader data length */
uint8_t pad[360]; uint16_t ver_hi;
uint16_t ver_mid;
uint16_t ver_lo;
uint8_t pad[354];
} __attribute__ ((packed)); } __attribute__ ((packed));
struct flash_layout { struct flash_layout {
@ -104,6 +107,7 @@ static char *ofname;
static char *progname; static char *progname;
static char *vendor = "TP-LINK Technologies"; static char *vendor = "TP-LINK Technologies";
static char *version = "ver. 1.0"; static char *version = "ver. 1.0";
static char *fw_ver = "0.0.0";
static char *board_id; static char *board_id;
static struct board_info *board; static struct board_info *board;
@ -113,6 +117,9 @@ static char *opt_hw_id;
static uint32_t hw_id; static uint32_t hw_id;
static char *opt_hw_rev; static char *opt_hw_rev;
static uint32_t hw_rev; static uint32_t hw_rev;
static int fw_ver_lo;
static int fw_ver_mid;
static int fw_ver_hi;
static struct file_info kernel_info; static struct file_info kernel_info;
static uint32_t kernel_la = 0; static uint32_t kernel_la = 0;
static uint32_t kernel_ep = 0; static uint32_t kernel_ep = 0;
@ -368,6 +375,7 @@ static void usage(int status)
" -j add jffs2 end-of-filesystem markers\n" " -j add jffs2 end-of-filesystem markers\n"
" -N <vendor> set image vendor to <vendor>\n" " -N <vendor> set image vendor to <vendor>\n"
" -V <version> set image version to <version>\n" " -V <version> set image version to <version>\n"
" -v <version> set firmware version to <version>\n"
" -i <file> inspect given firmware file <file>\n" " -i <file> inspect given firmware file <file>\n"
" -x extract kernel and rootfs while inspecting (requires -i)\n" " -x extract kernel and rootfs while inspecting (requires -i)\n"
" -h show this screen\n" " -h show this screen\n"
@ -545,6 +553,12 @@ static int check_options(void)
return -1; return -1;
} }
ret = sscanf(fw_ver, "%d.%d.%d", &fw_ver_hi, &fw_ver_mid, &fw_ver_lo);
if (ret != 3) {
ERR("invalid firmware version '%s'", fw_ver);
return -1;
}
return 0; return 0;
} }
@ -575,6 +589,10 @@ static void fill_header(char *buf, int len)
hdr->rootfs_len = htonl(rootfs_info.file_size); hdr->rootfs_len = htonl(rootfs_info.file_size);
} }
hdr->ver_hi = htons(fw_ver_hi);
hdr->ver_mid = htons(fw_ver_mid);
hdr->ver_lo = htons(fw_ver_lo);
get_md5(buf, len, hdr->md5sum1); get_md5(buf, len, hdr->md5sum1);
} }
@ -926,7 +944,7 @@ int main(int argc, char *argv[])
while ( 1 ) { while ( 1 ) {
int c; int c;
c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:ci:k:r:R:o:xhsj"); c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:ci:k:r:R:o:xhsjv:");
if (c == -1) if (c == -1)
break; break;
@ -955,6 +973,9 @@ int main(int argc, char *argv[])
case 'V': case 'V':
version = optarg; version = optarg;
break; break;
case 'v':
fw_ver = optarg;
break;
case 'N': case 'N':
vendor = optarg; vendor = optarg;
break; break;