Changeset 20433


Ignore:
Timestamp:
2010-03-25T20:34:49+01:00 (8 years ago)
Author:
markus
Message:

added support for wrt54g3gv2-vf and new trx header format

  • hacked addpattern due to changes in header format
  • added "-5" to addpattern, some 0xFF are needed for trx2 header "-4" broke CRC checking in CFE
  • hacked trx.c due to new header format version
  • added target to create trx-V2 images

the flashmap driver possibly needs to be customized.

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/brcm-2.4/image/Makefile

    r18921 r20433  
    3333 
    3434define Image/Build/CyberTAN 
    35         $(STAGING_DIR_HOST)/bin/addpattern -4 -p $(3) -v v$(4) -i $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -o $(BIN_DIR)/openwrt-$(2)-$(5).bin 
     35        $(STAGING_DIR_HOST)/bin/addpattern -4 -p $(3) -v v$(4) -i $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -o $(BIN_DIR)/openwrt-$(2)-$(5).bin $(if $(6),-s $(6)) 
     36endef 
     37define Image/Build/CyberTAN2 
     38        $(STAGING_DIR_HOST)/bin/addpattern -4 -p $(3) -v v$(4) -i $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx2 -o $(BIN_DIR)/openwrt-$(2)-$(5).bin $(if $(6),-s $(6)) 
     39endef 
     40define Image/Build/CyberTANHead 
     41        $(STAGING_DIR_HOST)/bin/addpattern -5 -p $(3) -v v$(4) -i /dev/null -o $(KDIR)/openwrt-$(2)-header.bin $(if $(6),-s $(6)) 
    3642endef 
    3743 
     
    5157endef 
    5258define trxalign/squashfs 
    53 -a 1024 -f $(KDIR)/root.$(1) -a 0x10000 -A $(KDIR)/fs_mark 
     59-a 1024 -f $(KDIR)/root.$(1) $(if $(2),-f $(2)) -a 0x10000 -A $(KDIR)/fs_mark 
    5460endef 
    5561 
     62define Image/Build/trxV2 
     63        $(call Image/Build/CyberTANHead,$(1),$(2),$(3),$(4),$(5),$(if $(6),$(6))) 
     64        $(STAGING_DIR_HOST)/bin/trx -2 -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx2 \ 
     65                -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma \ 
     66                $(call trxalign/$(1),$(1),$(KDIR)/openwrt-$(2)-header.bin) 
     67        $(call Image/Build/CyberTAN2,$(1),$(2),$(3),$(4),$(5),$(if $(6),$(6))) 
     68endef 
    5669 
    5770define Image/Build/jffs2-128k 
    5871        $(call Image/Build/CyberTAN,$(1),wrt54gs,W54S,4.80.1,$(patsubst jffs2-%,jffs2,$(1))) 
    5972        $(call Image/Build/CyberTAN,$(1),wrtsl54gs,W54U,2.08.1,$(patsubst jffs2-%,jffs2,$(1))) 
     73        $(call Image/Build/trxV2,$(1),wrt54g3gv2-vf,3G2V,3.00.24,$(patsubst jffs2-%,jffs2,$(1)),6) 
    6074  ifeq ($(KERNEL),2.6) 
    6175        $(call Image/Build/wgt634u,$(1),$(patsubst jffs2-%,jffs2,$(1))) 
     
    86100 
    87101define Image/Build 
    88         $(STAGING_DIR_HOST)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma $(call trxalign/$(1),$(1)) 
     102        $(STAGING_DIR_HOST)/bin/trx -o $(BIN_DIR)/openwrt-$(BOARD)-$(1).trx \ 
     103                -f $(KDIR)/loader.gz -f $(KDIR)/vmlinux.lzma \ 
     104                $(call trxalign/$(1),$(1)) 
    89105        $(call Image/Build/$(1),$(1)) 
    90106        $(call Image/Build/Motorola,$(1),wr850g,1,$(1)) 
  • trunk/tools/firmware-utils/src/addpattern.c

    r17140 r20433  
    7575#define SUPPORT_INTEL_FLASH    0x0002 
    7676#define SUPPORT_5325E_SWITCH   0x0004 
     77/* (from 3.00.24 firmware cyutils.h) */ 
     78#define SUPPORT_4704_CHIP      0x0008 
     79#define SUPPORT_5352E_CHIP     0x0010 
    7780 
    7881struct code_header {                    /* from cyutils.h */ 
     
    8386        char id[4];                                     /* U2ND */ 
    8487        char hw_ver;                            /* 0: for 4702, 1: for 4712 -- new in 2.04.3 */ 
    85         char unused; 
    86         unsigned char flags[2];       /* SUPPORT_ flags new for 3.37.2 (WRT54G v2.2 and WRT54GS v1.1) */ 
    87         unsigned char res2[10]; 
     88 
     89        unsigned char  sn;              // Serial Number 
     90        unsigned char  flags[2];        /* SUPPORT_ flags new for 3.37.2 (WRT54G v2.2 and WRT54GS v1.1) */ 
     91        unsigned char  stable[2];       // The image is stable (for dual image) 
     92        unsigned char  try1[2];         // Try to boot image first time (for dual image) 
     93        unsigned char  try2[2];         // Try to boot image second time (for dual image) 
     94        unsigned char  try3[2];         // Try to boot image third time (for dual_image) 
     95        unsigned char  res3[2]; 
    8896} ; 
    8997 
     
    92100        char    *pattern; 
    93101        char    hw_ver; 
    94         char    unused; 
     102        char    sn; 
    95103        char    flags[2]; 
    96104}; 
     
    101109                .pattern        = "NL16", 
    102110                .hw_ver         = 0x00, 
    103                 .unused         = 0x0f, 
     111                .sn             = 0x0f, 
    104112                .flags          = {0x3f, 0x00}, 
    105113        }, { 
     
    115123void usage(void) 
    116124{ 
    117         fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-B board_id] [-p pattern] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4}] -h\n"); 
     125        fprintf(stderr, "Usage: addpattern [-i trxfile] [-o binfile] [-B board_id] [-p pattern] [-s serial] [-g] [-b] [-v v#.#.#] [-r #.#] [-{0|1|2|4|5}] -h\n"); 
    118126        exit(EXIT_FAILURE); 
    119127} 
     
    156164        memset(hdr, 0, sizeof(struct code_header)); 
    157165 
    158         while ((c = getopt(argc, argv, "i:o:p:gbv:0124hr:B:")) != -1) { 
     166        while ((c = getopt(argc, argv, "i:o:p:s:gbv:01245hr:B:")) != -1) { 
    159167                switch (c) { 
    160168                        case 'i': 
     
    166174                        case 'p': 
    167175                                pattern = optarg; 
     176                                break; 
     177                        case 's': 
     178                                hdr->sn = (unsigned char) atoi (optarg); 
    168179                                break; 
    169180                        case 'g': 
     
    192203                                hdr->hw_ver = 0; 
    193204                                hdr->flags[0] = 0x1f; 
     205                                break; 
     206                        case '5': 
     207                                /* V5 is appended to trxV2 image */ 
     208                                hdr->stable[0] = hdr->stable[1] = 0xFF; 
     209                                hdr->try1[0]   = hdr->try1[1]   = 0xFF; 
     210                                hdr->try2[0]   = hdr->try2[1]   = 0xFF; 
     211                                hdr->try3[0]   = hdr->try3[1]   = 0xFF; 
    194212                                break; 
    195213                        case 'r': 
     
    219237                pattern = board->pattern; 
    220238                hdr->hw_ver = board->hw_ver; 
    221                 hdr->unused = board->unused; 
     239                hdr->sn = board->sn; 
    222240                hdr->flags[0] = board->flags[0]; 
    223241                hdr->flags[1] = board->flags[1]; 
  • trunk/tools/firmware-utils/src/trx.c

    r17537 r20433  
    3636 * 
    3737 * Add -a (align offset) and -b (absolute offset) 
     38 * 
     39 * March 24, 2010 - markus 
     40 * 
     41 * extend trx header struct for new version 
     42 * assume v1 for as default 
     43 * Add option -2 to allow v2 header 
    3844 */ 
    3945 
     
    6066 
    6167#define TRX_MAGIC       0x30524448      /* "HDR0" */ 
    62 #define TRX_VERSION     1 
    6368#define TRX_MAX_LEN     0x720000 
    6469#define TRX_NO_HEADER   1               /* Do not write TRX header */    
     
    6974        uint32_t crc32;                 /* 32-bit CRC from flag_version to end of file */ 
    7075        uint32_t flag_version;  /* 0:15 flags, 16:31 version */ 
    71         uint32_t offsets[3];    /* Offsets of partitions from start of header */ 
     76        uint32_t offsets[4];    /* Offsets of partitions from start of header */ 
    7277}; 
    7378 
     
    7883void usage(void) 
    7984{ 
    80         fprintf(stderr, "Usage: trx [-o outfile] [-m maxlen] [-a align] [-b offset] [-f file] [-f file [-f file]]\n"); 
     85        fprintf(stderr, "Usage:\n"); 
     86        fprintf(stderr, " trx [-2] [-o outfile] [-m maxlen] [-a align] [-b offset] \\\n"); 
     87        fprintf(stderr, "     [-f file] [-f file [-f file [-f file (v2 only)]]]\n"); 
    8188        exit(EXIT_FAILURE); 
    8289} 
     
    94101        unsigned long maxlen = TRX_MAX_LEN; 
    95102        struct trx_header *p; 
     103        char trx_version = 1; 
    96104 
    97105        fprintf(stderr, "mjn3's trx replacement - v0.81.1\n"); 
     
    105113 
    106114        p->magic = STORE32_LE(TRX_MAGIC); 
    107         cur_len = sizeof(struct trx_header); 
    108         p->flag_version = STORE32_LE((TRX_VERSION << 16)); 
     115        cur_len = sizeof(struct trx_header) - 4; /* assume v1 header */ 
     116        p->flag_version = STORE32_LE((trx_version << 16)); 
    109117 
    110118        in = NULL; 
    111119        i = 0; 
    112120 
    113         while ((c = getopt(argc, argv, "-:o:m:a:b:f:A:")) != -1) { 
     121        while ((c = getopt(argc, argv, "-:2o:m:a:b:f:A:")) != -1) { 
    114122                switch (c) { 
     123                        case '2': 
     124                                /* take care that nothing was written to buf so far */ 
     125                                if (cur_len != sizeof(struct trx_header) - 4) { 
     126                                        fprintf(stderr, "-2 has to be used before any other argument!\n"); 
     127                                } 
     128                                else { 
     129                                        trx_version = 2; 
     130                                        cur_len += 4; 
     131                                } 
     132                                break; 
    115133                        case 'A': 
    116134                                append = 1; 
Note: See TracChangeset for help on using the changeset viewer.