ar71xx-generic: add support for CPE210/220/510/520 v1.1 (untested)
This commit is contained in:
parent
f292ba1d7a
commit
cad2e8e4b7
@ -0,0 +1,107 @@
|
|||||||
|
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
Date: Thu, 15 Oct 2015 20:03:51 +0200
|
||||||
|
Subject: tools/firmware-utils: tplink-safeloader: clean up code
|
||||||
|
|
||||||
|
There is no reason for the internal functions not to be static.
|
||||||
|
|
||||||
|
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
|
||||||
|
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
index 9c5bb54..4607a1d 100644
|
||||||
|
--- a/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
+++ b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
@@ -152,7 +152,7 @@ static const unsigned char cpe510_support_list[] =
|
||||||
|
|
||||||
|
|
||||||
|
/** Allocates a new image partition */
|
||||||
|
-struct image_partition_entry alloc_image_partition(const char *name, size_t len) {
|
||||||
|
+static struct image_partition_entry alloc_image_partition(const char *name, size_t len) {
|
||||||
|
struct image_partition_entry entry = {name, len, malloc(len)};
|
||||||
|
if (!entry.data)
|
||||||
|
error(1, errno, "malloc");
|
||||||
|
@@ -161,12 +161,12 @@ struct image_partition_entry alloc_image_partition(const char *name, size_t len)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Frees an image partition */
|
||||||
|
-void free_image_partition(struct image_partition_entry entry) {
|
||||||
|
+static void free_image_partition(struct image_partition_entry entry) {
|
||||||
|
free(entry.data);
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates the partition-table partition */
|
||||||
|
-struct image_partition_entry make_partition_table(const struct flash_partition_entry *p) {
|
||||||
|
+static struct image_partition_entry make_partition_table(const struct flash_partition_entry *p) {
|
||||||
|
struct image_partition_entry entry = alloc_image_partition("partition-table", 0x800);
|
||||||
|
|
||||||
|
char *s = (char *)entry.data, *end = (char *)(s+entry.size);
|
||||||
|
@@ -202,7 +202,7 @@ static inline uint8_t bcd(uint8_t v) {
|
||||||
|
|
||||||
|
|
||||||
|
/** Generates the soft-version partition */
|
||||||
|
-struct image_partition_entry make_soft_version(uint32_t rev) {
|
||||||
|
+static struct image_partition_entry make_soft_version(uint32_t rev) {
|
||||||
|
struct image_partition_entry entry = alloc_image_partition("soft-version", sizeof(struct soft_version));
|
||||||
|
struct soft_version *s = (struct soft_version *)entry.data;
|
||||||
|
|
||||||
|
@@ -233,14 +233,14 @@ struct image_partition_entry make_soft_version(uint32_t rev) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates the support-list partition */
|
||||||
|
-struct image_partition_entry make_support_list(const unsigned char *support_list, size_t len) {
|
||||||
|
+static struct image_partition_entry make_support_list(const unsigned char *support_list, size_t len) {
|
||||||
|
struct image_partition_entry entry = alloc_image_partition("support-list", len);
|
||||||
|
memcpy(entry.data, support_list, len);
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates a new image partition with an arbitrary name from a file */
|
||||||
|
-struct image_partition_entry read_file(const char *part_name, const char *filename, bool add_jffs2_eof) {
|
||||||
|
+static struct image_partition_entry read_file(const char *part_name, const char *filename, bool add_jffs2_eof) {
|
||||||
|
struct stat statbuf;
|
||||||
|
|
||||||
|
if (stat(filename, &statbuf) < 0)
|
||||||
|
@@ -300,7 +300,7 @@ struct image_partition_entry read_file(const char *part_name, const char *filena
|
||||||
|
|
||||||
|
I think partition-table must be the first partition in the firmware image.
|
||||||
|
*/
|
||||||
|
-void put_partitions(uint8_t *buffer, const struct image_partition_entry *parts) {
|
||||||
|
+static void put_partitions(uint8_t *buffer, const struct image_partition_entry *parts) {
|
||||||
|
size_t i;
|
||||||
|
char *image_pt = (char *)buffer, *end = image_pt + 0x800;
|
||||||
|
|
||||||
|
@@ -325,7 +325,7 @@ void put_partitions(uint8_t *buffer, const struct image_partition_entry *parts)
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates and writes the image MD5 checksum */
|
||||||
|
-void put_md5(uint8_t *md5, uint8_t *buffer, unsigned int len) {
|
||||||
|
+static void put_md5(uint8_t *md5, uint8_t *buffer, unsigned int len) {
|
||||||
|
MD5_CTX ctx;
|
||||||
|
|
||||||
|
MD5_Init(&ctx);
|
||||||
|
@@ -349,7 +349,7 @@ void put_md5(uint8_t *md5, uint8_t *buffer, unsigned int len) {
|
||||||
|
1014-1813 Image partition table (2048 bytes, padded with 0xff)
|
||||||
|
1814-xxxx Firmware partitions
|
||||||
|
*/
|
||||||
|
-void * generate_factory_image(const unsigned char *vendor, size_t vendor_len, const struct image_partition_entry *parts, size_t *len) {
|
||||||
|
+static void * generate_factory_image(const unsigned char *vendor, size_t vendor_len, const struct image_partition_entry *parts, size_t *len) {
|
||||||
|
*len = 0x1814;
|
||||||
|
|
||||||
|
size_t i;
|
||||||
|
@@ -381,7 +381,7 @@ void * generate_factory_image(const unsigned char *vendor, size_t vendor_len, co
|
||||||
|
should be generalized when TP-LINK starts building its safeloader into hardware with
|
||||||
|
different flash layouts.
|
||||||
|
*/
|
||||||
|
-void * generate_sysupgrade_image(const struct flash_partition_entry *flash_parts, const struct image_partition_entry *image_parts, size_t *len) {
|
||||||
|
+static void * generate_sysupgrade_image(const struct flash_partition_entry *flash_parts, const struct image_partition_entry *image_parts, size_t *len) {
|
||||||
|
const struct flash_partition_entry *flash_os_image = &flash_parts[5];
|
||||||
|
const struct flash_partition_entry *flash_soft_version = &flash_parts[6];
|
||||||
|
const struct flash_partition_entry *flash_support_list = &flash_parts[7];
|
||||||
|
@@ -459,7 +459,7 @@ static void do_cpe510(const char *output, const char *kernel_image, const char *
|
||||||
|
|
||||||
|
|
||||||
|
/** Usage output */
|
||||||
|
-void usage(const char *argv0) {
|
||||||
|
+static void usage(const char *argv0) {
|
||||||
|
fprintf(stderr,
|
||||||
|
"Usage: %s [OPTIONS...]\n"
|
||||||
|
"\n"
|
@ -0,0 +1,60 @@
|
|||||||
|
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
Date: Thu, 15 Oct 2015 21:01:25 +0200
|
||||||
|
Subject: tools/firmware-utils: tplink-safeloader: fix support-list format
|
||||||
|
|
||||||
|
The first 4 bytes of the support-list image partition are supposed to
|
||||||
|
contain the size of the hardware support list.
|
||||||
|
|
||||||
|
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
|
||||||
|
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
index 4607a1d..719ed4a 100644
|
||||||
|
--- a/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
+++ b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
@@ -133,14 +133,13 @@ static const struct flash_partition_entry cpe510_partitions[] = {
|
||||||
|
The stock images also contain strings for two more devices: BS510 and BS210.
|
||||||
|
At the moment, there exists no public information about these devices.
|
||||||
|
*/
|
||||||
|
-static const unsigned char cpe510_support_list[] =
|
||||||
|
- "\x00\x00\x00\xc8\x00\x00\x00\x00"
|
||||||
|
+static const char cpe510_support_list[] =
|
||||||
|
"SupportList:\r\n"
|
||||||
|
"CPE510(TP-LINK|UN|N300-5):1.0\r\n"
|
||||||
|
"CPE520(TP-LINK|UN|N300-5):1.0\r\n"
|
||||||
|
"CPE210(TP-LINK|UN|N300-2):1.0\r\n"
|
||||||
|
"CPE220(TP-LINK|UN|N300-2):1.0\r\n"
|
||||||
|
- "\r\n\xff";
|
||||||
|
+ "\r\n";
|
||||||
|
|
||||||
|
#define error(_ret, _errno, _str, ...) \
|
||||||
|
do { \
|
||||||
|
@@ -233,9 +232,17 @@ static struct image_partition_entry make_soft_version(uint32_t rev) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Generates the support-list partition */
|
||||||
|
-static struct image_partition_entry make_support_list(const unsigned char *support_list, size_t len) {
|
||||||
|
- struct image_partition_entry entry = alloc_image_partition("support-list", len);
|
||||||
|
- memcpy(entry.data, support_list, len);
|
||||||
|
+static struct image_partition_entry make_support_list(const char *support_list) {
|
||||||
|
+ size_t len = strlen(support_list);
|
||||||
|
+ struct image_partition_entry entry = alloc_image_partition("support-list", len + 9);
|
||||||
|
+
|
||||||
|
+ uint32_t len32 = htonl(len);
|
||||||
|
+
|
||||||
|
+ memcpy(entry.data, &len32, 4);
|
||||||
|
+ memset(entry.data+4, 0, 4);
|
||||||
|
+ memcpy(entry.data+8, support_list, len);
|
||||||
|
+ entry.data[len+8] = '\xff';
|
||||||
|
+
|
||||||
|
return entry;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -430,7 +437,7 @@ static void do_cpe510(const char *output, const char *kernel_image, const char *
|
||||||
|
|
||||||
|
parts[0] = make_partition_table(cpe510_partitions);
|
||||||
|
parts[1] = make_soft_version(rev);
|
||||||
|
- parts[2] = make_support_list(cpe510_support_list, sizeof(cpe510_support_list)-1);
|
||||||
|
+ parts[2] = make_support_list(cpe510_support_list);
|
||||||
|
parts[3] = read_file("os-image", kernel_image, false);
|
||||||
|
parts[4] = read_file("file-system", rootfs_image, add_jffs2_eof);
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
Date: Thu, 15 Oct 2015 21:56:40 +0200
|
||||||
|
Subject: tools/firmware-utils: tplink-safeloader: add version 1.1 support to CPE210/220/510/520
|
||||||
|
|
||||||
|
The hardware is identical to version 1.0, add the new models to the support
|
||||||
|
list.
|
||||||
|
|
||||||
|
Also remove the empty line at the end of the support list, the current
|
||||||
|
stock images don't have it either.
|
||||||
|
|
||||||
|
Signed-off-by: Matthias Schiffer <mschiffer@universe-factory.net>
|
||||||
|
|
||||||
|
diff --git a/tools/firmware-utils/src/tplink-safeloader.c b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
index 719ed4a..27daacc 100644
|
||||||
|
--- a/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
+++ b/tools/firmware-utils/src/tplink-safeloader.c
|
||||||
|
@@ -129,17 +129,17 @@ static const struct flash_partition_entry cpe510_partitions[] = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
The support list for CPE210/220/510/520
|
||||||
|
-
|
||||||
|
- The stock images also contain strings for two more devices: BS510 and BS210.
|
||||||
|
- At the moment, there exists no public information about these devices.
|
||||||
|
*/
|
||||||
|
static const char cpe510_support_list[] =
|
||||||
|
"SupportList:\r\n"
|
||||||
|
"CPE510(TP-LINK|UN|N300-5):1.0\r\n"
|
||||||
|
+ "CPE510(TP-LINK|UN|N300-5):1.1\r\n"
|
||||||
|
"CPE520(TP-LINK|UN|N300-5):1.0\r\n"
|
||||||
|
+ "CPE520(TP-LINK|UN|N300-5):1.1\r\n"
|
||||||
|
"CPE210(TP-LINK|UN|N300-2):1.0\r\n"
|
||||||
|
+ "CPE210(TP-LINK|UN|N300-2):1.1\r\n"
|
||||||
|
"CPE220(TP-LINK|UN|N300-2):1.0\r\n"
|
||||||
|
- "\r\n";
|
||||||
|
+ "CPE220(TP-LINK|UN|N300-2):1.1\r\n";
|
||||||
|
|
||||||
|
#define error(_ret, _errno, _str, ...) \
|
||||||
|
do { \
|
@ -8,6 +8,12 @@ $(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe210-v1.0))
|
|||||||
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe220-v1.0))
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe220-v1.0))
|
||||||
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe510-v1.0))
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe510-v1.0))
|
||||||
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe520-v1.0))
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe520-v1.0))
|
||||||
|
ifeq ($(BROKEN),1)
|
||||||
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe210-v1.1))
|
||||||
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe220-v1.1))
|
||||||
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe510-v1.1))
|
||||||
|
$(eval $(call GluonModel,CPE510,cpe210-220-510-520,tp-link-cpe520-v1.1))
|
||||||
|
endif
|
||||||
|
|
||||||
# TL-WA701N/ND v1, v2
|
# TL-WA701N/ND v1, v2
|
||||||
$(eval $(call GluonProfile,TLWA701))
|
$(eval $(call GluonProfile,TLWA701))
|
||||||
|
Loading…
Reference in New Issue
Block a user