From patchwork Sat Dec 5 01:18:07 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Bendavid X-Patchwork-Id: 552935 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 5C23A1402A9 for ; Sat, 5 Dec 2015 12:18:32 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=i47iJHPK; dkim-atps=neutral Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 65B3E28AE04; Sat, 5 Dec 2015 02:18:13 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,FREEMAIL_FROM, HTML_MESSAGE,T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 70E8B28003E for ; Sat, 5 Dec 2015 02:18:03 +0100 (CET) X-policyd-weight: using cached result; rate: -8.5 Received: from mail-pf0-f169.google.com (mail-pf0-f169.google.com [209.85.192.169]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Sat, 5 Dec 2015 02:18:02 +0100 (CET) Received: by pfbg73 with SMTP id g73so34908009pfb.1 for ; Fri, 04 Dec 2015 17:18:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:content-type; bh=kdtWVYXO+qIBCLiOVx2njznZKnpvRfDf4kXxXOqwOXg=; b=i47iJHPKO2BcpnptV9SMNVldpw/H9bBmjpq5MtuqPDYweRhz6Iy9YUIdoApU9eMXre inf6fv70xNi5Mc0+xcOjoxF0bm+jaOXz/hhIiQzQntQPjVx7fsxLSlmJnSG3aYisH9zm R/RItrdbf3Db4qn/jpj/uaDVpsrnk4O3DtQ3H3Y28WiSYHRqwvvx2cWn6h4Y9BDnFIKh u0Z5I2X7oQXM9NhYx5XNL5jWMytbqIG2er5d/KF9X1sJJw1BZLrR/c/QsKI2K/R666aJ wCFmwV3VYmO/F/aL4NO3qe//rHig3G2gvc3J55mx8IocNXFiLUJ8bgPI0yY1aH6SJmjc QcNA== MIME-Version: 1.0 X-Received: by 10.98.11.71 with SMTP id t68mr26296369pfi.82.1449278287922; Fri, 04 Dec 2015 17:18:07 -0800 (PST) Received: by 10.66.50.69 with HTTP; Fri, 4 Dec 2015 17:18:07 -0800 (PST) Date: Sat, 5 Dec 2015 02:18:07 +0100 Message-ID: From: Josh Bendavid To: openwrt-devel@lists.openwrt.org Subject: [OpenWrt-Devel] [PATCH] [tools] firmware-utils: Add Archer C2600 support to tplink-safeloader X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" From: Josh Bendavid 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 --- 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); 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 */