From ac780e3ac8bd842ebf407ab16f64fbfeec3384e7 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Thu, 12 May 2016 17:39:46 +0200 Subject: tools/firmware-utils: remove obsolete firmware utility for airlink 525w Signed-off-by: Felix Fietkau --- tools/firmware-utils/Makefile | 1 - tools/firmware-utils/src/airlink.c | 332 ------------------------------------- 2 files changed, 333 deletions(-) delete mode 100644 tools/firmware-utils/src/airlink.c (limited to 'tools') diff --git a/tools/firmware-utils/Makefile b/tools/firmware-utils/Makefile index 20f26e2f33..f4a5222b46 100644 --- a/tools/firmware-utils/Makefile +++ b/tools/firmware-utils/Makefile @@ -25,7 +25,6 @@ define Host/Compile $(call cc,mksenaofw md5) $(call cc,trx2usr) $(call cc,ptgen) - $(call cc,airlink) $(call cc,srec2bin) $(call cc,mkmylofw) $(call cc,mkcsysimg) diff --git a/tools/firmware-utils/src/airlink.c b/tools/firmware-utils/src/airlink.c deleted file mode 100644 index 06c83a0fbb..0000000000 --- a/tools/firmware-utils/src/airlink.c +++ /dev/null @@ -1,332 +0,0 @@ -/* - * Thanks to Vassily Galinsky for this tool -***************************************************************************** -AIRLINK AR525W firmware image structure - -8:-5 Extended (httpd) header checksum - sum2 - -4:-1 Extended (httpd) header magic - "ARRN" - 0x4e525241 - 0: 3 Standard (tftpd) header magic - "GMTK" - 0x4b544d47 - 4: 7 Standard (tftpd) header checksum - sum1 - 8: b 0 - c: f Size of compressed linux kernel - 10:13 Size of firmware image file with standard header - 14:17 Product code - 0x5 - 18:1b Bootloader checksum - sum0 - 1c:1f 0 - 20: Compressed linux kernel - - Squashfs or jffs2 file system - kernel dependent - either 32 bytes or sector aligned -*****************************************************************************/ -#include -#include -#include -#include -#include -#include -#include -#include -#include - -typedef unsigned char uchar; - -uint32_t crctab[257] = { - 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, - 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, - 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, - 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, - 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, - 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, - 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, - 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, - 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, - 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, - 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, - 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, - 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, - 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, - 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, - 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, - 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, - 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, - 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, - 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, - 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, - 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, - 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, - 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, - 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, - 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, - 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, - 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, - 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, - 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, - 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, - 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, - 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, - 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, - 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, - 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, - 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, - 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, - 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, - 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, - 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, - 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, - 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, - 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, - 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, - 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, - 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, - 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, - 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, - 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, - 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, - 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, - 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, - 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, - 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, - 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, - 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, - 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, - 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, - 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, - 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, - 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, - 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, - 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d, - 0 -}; - -uint32_t header[] = { - 0x00000000, 0x4e525241, - 0x4b544d47, 0x00000000, 0x00000000, 0x000afd4a, - 0x00000000, 0x00000005, 0x00000000, 0x00000000 -}; - -static int JFFS2 = 0; - -int generate_image(char *kname, char *fsname, char *fname, int EHDR) -{ - int i; - uint32_t lenk, lens; - uchar *bk, *bs; - int fkd, ffd, fsd; - fkd = open(kname, O_RDONLY); - ffd = creat(fname, 0644); - if ((fkd < 0) || (ffd < 0)) - return -1; - if (fsname) { - fsd = open(fsname, O_RDONLY); - if (fsd < 0) - return -1; - } - lenk = lseek(fkd, 0, SEEK_END); - header[5] = lenk; - bk = (uchar *) mmap(NULL, lenk, PROT_READ, MAP_SHARED, fkd, 0); - if (bk == MAP_FAILED) - return -1; - if (fsname) { - lens = lseek(fsd, 0, SEEK_END); - bs = (uchar *) mmap(NULL, lens, PROT_READ, MAP_SHARED, fsd, - 0); - if (bs == MAP_FAILED) - return -1; - } - if (EHDR) - write(ffd, header, 0x28); - else - write(ffd, header + 2, 0x20); - write(ffd, bk, lenk); - lenk += 0x20; - if (!JFFS2) JFFS2 = 0x20; - printf("Padding header+kernel - 0x%x + 0x%x = 0x%x\n", - lenk, ((lenk - 1 + JFFS2) / JFFS2) * JFFS2 - lenk, - ((lenk - 1 + JFFS2) / JFFS2) * JFFS2); - for (i = 0; i < ((lenk - 1 + JFFS2) / JFFS2) * JFFS2 - lenk; i++) - write(ffd, header, 1); - if (fsname) { - write(ffd, bs, lens); - close(fsd); - } - close(ffd); - close(fkd); - return 0; -} - -uint32_t crc32(uchar * buf, uint32_t len) -{ - register int i; - uint32_t sum; - register uint32_t s0; - s0 = ~0; - for (i = 0; i < len; i++) { - s0 = (s0 >> 8) ^ crctab[(uchar) (s0 & 0xFF) ^ buf[i]]; - } - sum = ~s0; - return sum; -} - -void usage(char *prog) -{ - printf("Usage: %s [-b 0/1] image_filename \n", prog); - printf(" update checksums for firmware file\n"); - printf - ("Usage: %s [-b 0/1] [-j erasesize_in_kibytes] [-e] kernel filesystem image_filename \n", - prog); - printf(" generate firmware file and update checksums\n"); - printf("--------------------------------------------------\n"); - printf(" -e - generate header for web upload\n"); - printf(" -b 0/1 - clear/update bootloader checksum\n"); - printf(" -j erasesize_in_kibytes - generate header for jffs2 filesystem\n"); -} - -int main(int argc, char **argv) -{ - uchar b[0x400]; - char EHDR = 0; - char BHDR = 0; - int c, fd; - extern char *optarg; - extern int optind, optopt; - - while ((c = getopt(argc, argv, "b:ej:")) != -1) { - switch (c) { - case 'b': - if (optarg[0] == '1') - BHDR = 1; - break; - case 'e': - EHDR = 1; - break; - case 'j': - sscanf(optarg, "%i", &JFFS2); - JFFS2 *= 1024; - break; - case '?': - fprintf(stderr, "\nError: unknown arg %c\n\n\n", - optopt); - usage(argv[0]); - exit(-1); - } - } - if (((argc - optind) < 1) && ((argc - optind) > 3)) { - usage(argv[0]); - exit(-1); - } - if ((argc - optind) == 3) - if (generate_image - (argv[optind], argv[optind + 1], argv[optind + 2], - EHDR)) { - fprintf(stderr, - "\nError generating image file %s\n\n\n", - argv[argc - 1]); - usage(argv[0]); - exit(-1); - } - if ((argc - optind) == 2) - if (generate_image - (argv[optind], NULL, argv[optind + 1], EHDR)) { - fprintf(stderr, - "\nError generating image file %s\n\n\n", - argv[argc - 1]); - usage(argv[0]); - exit(-1); - } - - fd = open(argv[argc - 1], O_RDWR); - if (fd < 0) { - fprintf(stderr, "\nImage file not found %s\n\n\n", - argv[argc - 1]); - usage(argv[0]); - exit(-1); - } - long i, len = lseek(fd, 0, SEEK_END); - lseek(fd, 0, SEEK_SET); - uchar *buf = malloc(len); - read(fd, buf, len); - uint32_t sum, l0; - uint32_t MagicS = 0x474d544b; - uint32_t MagicE = 0x4152524e; - if (ntohl(*((uint32_t *) buf)) == MagicS) { - fprintf(stderr, - "Image without extra 8 bytes - Standard header\n"); - buf[0x10] = len & 0xff; - buf[0x11] = (len >> 8) & 0xff; - buf[0x12] = (len >> 16) & 0xff; - buf[0x13] = (len >> 24) & 0xff; - lseek(fd, 0x10, SEEK_SET); - write(fd, buf + 0x10, 0x4); - EHDR = 0; - } else if ((ntohl(*((uint32_t *) (buf + 0x8))) == MagicS) - && ((ntohl(*((uint32_t *) (buf + 0x4))) == MagicE))) { - fprintf(stderr, - "Image with extra 8 bytes - Extended header\n"); - *((uint32_t *) (buf + 0x18)) = len - 8; - buf[0x18] = (len - 8) & 0xff; - buf[0x19] = ((len - 8) >> 8) & 0xff; - buf[0x1a] = ((len - 8) >> 16) & 0xff; - buf[0x1b] = ((len - 8) >> 24) & 0xff; - lseek(fd, 0x18, SEEK_SET); - write(fd, buf + 0x18, 0x4); - buf += 8; - EHDR = 1; - } else if (len == buf[0x10] | ((uint32_t)buf[0x11] << 8) | ((uint32_t)buf[0x12] << 16) | ((uint32_t)buf[0x13] << 24)) { - fprintf(stderr, - "Image without extra 8 bytes - Standard header\n"); - EHDR = 0; - } else if (len == (buf[0x18] | ((uint32_t)buf[0x19] << 8) | ((uint32_t)buf[0x1a] << 16) | ((uint32_t)buf[0x1b] << 24)) + 8) { - fprintf(stderr, - "Image with extra 8 bytes - Extended header\n"); - buf += 8; - EHDR = 1; - } else { - fprintf(stderr, "ERROR: Wrong image size\n"); - exit(-1); - } - l0 = buf[0x10] | ((uint32_t)buf[0x11] << 8) | ((uint32_t)buf[0x12] << 16) | ((uint32_t)buf[0x13] << 24); - if (!BHDR) - *((uint32_t *) & buf[0x18]) = 0; - unsigned long sum0 = buf[0x18] | ((uint32_t)buf[0x19] << 8) | ((uint32_t)buf[0x1a] << 16) | ((uint32_t)buf[0x1b] << 24); - unsigned long sum1 = buf[0x4] | ((uint32_t)buf[0x5] << 8) | ((uint32_t)buf[0x6] << 16) | ((uint32_t)buf[0x7] << 24); - *((uint32_t *) & buf[0x4]) = 0x0L; - memcpy(b, buf, 0x100); - memcpy(b + 0x100, buf + ((l0 >> 1) - ((l0 & 0x6) >> 1)), 0x100); - memcpy(b + 0x200, buf + (l0 - 0x200), 0x200); - *((uint32_t *) & b[0x18]) = 0x0L; - - sum = crc32(b, 0x400); - printf("CRC32 sum0 - (%x, %lx, %x)\n", sum, sum0, 0x400); - if (EHDR) - lseek(fd, 0x20, SEEK_SET); - else - lseek(fd, 0x18, SEEK_SET); - buf[0x18] = (BHDR ? sum : sum0) & 0xff; - buf[0x19] = ((BHDR ? sum : sum0) >> 8) & 0xff; - buf[0x1a] = ((BHDR ? sum : sum0) >> 16) & 0xff; - buf[0x1b] = ((BHDR ? sum : sum0) >> 24) & 0xff; - write(fd, &buf[0x18], 0x4); - - sum = crc32(buf, l0); - printf("CRC32 sum1 - (%x, %lx, %x)\n", sum, sum1, l0); - if (EHDR) - lseek(fd, 0xC, SEEK_SET); - else - lseek(fd, 0x4, SEEK_SET); - buf[0x4] = sum & 0xff; - buf[0x5] = (sum >> 8) & 0xff; - buf[0x6] = (sum >> 16) & 0xff; - buf[0x7] = (sum >> 24) & 0xff; - write(fd, &buf[0x4], 0x4); - if (EHDR) { - unsigned long sum2 = buf[-0x8] | ((uint32_t)buf[-0x7] << 8) | ((uint32_t)buf[-0x6] << 16) | ((uint32_t)buf[-0x5] << 24); - *((uint32_t *) & buf[-0x8]) = 0L; - sum = crc32(buf - 0x4, len - 0x4); - printf("CRC32 sum2 - (%x, %lx, %lx)\n", sum, sum2, - len - 0x4); - lseek(fd, 0, SEEK_SET); - *((uint32_t *) & buf[-0x8]) = htonl(sum); - write(fd, &buf[-0x8], 0x4); - buf -= 8; - } - close(fd); - free(buf); - return 0; -} -- cgit v1.2.3 href='#n260'>260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293