[OpenWrt-Devel] [PATCH] [tools] firmware-utils: Add Archer C2600 support to tplink-safeloader
Josh Bendavid
joshbendavid at gmail.com
Fri Dec 4 20:18:07 EST 2015
From: Josh Bendavid <joshbendavid at gmail.com>
Add support for Archer C2600 to tplink-safeloader by adding needed
partition table, and vendor information plus support list strings.
Additional string C2600 is enabled for the -B option.
Signed-off-by: Josh Bendavid <joshbendavid at gmail.com>
---
diff --git a/tools/firmware-utils/src/tplink-safeloader.c
b/tools/firmware-utils/src/tplink-safeloader.c
index 77a894b..9bc2bcb 100644
--- a/tools/firmware-utils/src/tplink-safeloader.c
+++ b/tools/firmware-utils/src/tplink-safeloader.c
@@ -105,6 +105,8 @@ static const uint8_t md5_salt[16] = {
/** Vendor information for CPE210/220/510/520 */
static const char cpe510_vendor[] = "CPE510(TP-LINK|UN|N300-5):1.0\r\n";
+/** Vendor information for C2600 */
+static const char c2600_vendor[] = "";
/**
The flash partition table for CPE210/220/510/520;
@@ -128,6 +130,39 @@ static const struct flash_partition_entry
cpe510_partitions[] = {
};
/**
+ The flash partition table for C2600;
+ it is the same as the one used by the stock images.
+*/
+static const struct flash_partition_entry c2600_partitions[] = {
+ {"SBL1", 0x00000, 0x20000},
+ {"MIBIB", 0x20000, 0x20000},
+ {"SBL2", 0x40000, 0x20000},
+ {"SBL3", 0x60000, 0x30000},
+ {"DDRCONFIG", 0x90000, 0x10000},
+ {"SSD", 0xa0000, 0x10000},
+ {"TZ", 0xb0000, 0x30000},
+ {"RPM", 0xe0000, 0x20000},
+ {"fs-uboot", 0x100000, 0x70000},
+ {"uboot-env", 0x170000, 0x40000},
+ {"radio", 0x1b0000, 0x40000},
+ {"os-image", 0x1f0000, 0x200000},
+ {"file-system", 0x3f0000, 0x1b00000},
+ {"default-mac", 0x1ef0000, 0x00200},
+ {"pin", 0x1ef0200, 0x00200},
+ {"product-info", 0x1ef0400, 0x0fc00},
+ {"partition-table", 0x1f00000, 0x10000},
+ {"soft-version", 0x1f10000, 0x10000},
+ {"support-list", 0x1f20000, 0x10000},
+ {"profile", 0x1f30000, 0x10000},
+ {"default-config", 0x1f40000, 0x10000},
+ {"user-config", 0x1f50000, 0x40000},
+ {"qos-db", 0x1f90000, 0x40000},
+ {"usb-config", 0x1fd0000, 0x10000},
+ {"log", 0x1fe0000, 0x20000},
+ {NULL, 0, 0}
+};
+
+/**
The support list for CPE210/220/510/520
*/
static const char cpe510_support_list[] =
@@ -141,6 +176,13 @@ static const char cpe510_support_list[] =
"CPE220(TP-LINK|UN|N300-2):1.0\r\n"
"CPE220(TP-LINK|UN|N300-2):1.1\r\n";
+/**
+ The support list for C2600
+*/
+static const char c2600_support_list[] =
+ "SupportList:\r\n"
+ "{product_name:Archer C2600,product_ver:1.0.0,special_id:00000000}\r\n";
+
#define error(_ret, _errno, _str, ...) \
do { \
fprintf(stderr, _str ": %s\n", ## __VA_ARGS__, \
@@ -470,6 +512,39 @@ static void do_cpe510(const char *output, const char
*kernel_image, const char *
free_image_partition(parts[i]);
}
+/** Generates an image for C2600 and writes it to a file */
+static void do_c2600(const char *output, const char *kernel_image, const
char *rootfs_image, uint32_t rev, bool add_jffs2_eof, bool sysupgrade) {
+ struct image_partition_entry parts[6] = {};
+
+ parts[0] = make_partition_table(c2600_partitions);
+ parts[1] = make_soft_version(rev);
+ parts[2] = make_support_list(c2600_support_list);
+ parts[3] = read_file("os-image", kernel_image, false);
+ parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof);
+
+ size_t len;
+ void *image;
+ if (sysupgrade)
+ image = generate_sysupgrade_image(c2600_partitions, parts, &len);
+ else
+ image = generate_factory_image(c2600_vendor, parts, &len);
+
+ FILE *file = fopen(output, "wb");
+ if (!file)
+ error(1, errno, "unable to open output file");
+
+ if (fwrite(image, len, 1, file) != 1)
+ error(1, 0, "unable to write output file");
+
+ fclose(file);
+
+ free(image);
+
+ size_t i;
+ for (i = 0; parts[i].name; i++)
+ free_image_partition(parts[i]);
+}
+
/** Usage output */
static void usage(const char *argv0) {
@@ -552,6 +627,8 @@ int main(int argc, char *argv[]) {
if (strcmp(board, "CPE510") == 0)
do_cpe510(output, kernel_image, rootfs_image, rev, add_jffs2_eof,
sysupgrade);
+ else if (strcmp(board, "C2600") == 0)
+ do_c2600(output, kernel_image, rootfs_image, rev, add_jffs2_eof,
sysupgrade);
else
error(1, 0, "unsupported board %s", board);
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/openwrt-devel/attachments/20151205/214670c7/attachment.htm>
-------------- next part --------------
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel
More information about the openwrt-devel
mailing list