[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