Changeset 13253


Ignore:
Timestamp:
2008-11-17T08:45:01+01:00 (8 years ago)
Author:
juhosg
Message:

[tools] firmware_utils/mkmylofw: add support of named partitions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/firmware-utils/src/mkmylofw.c

    r13226 r13253  
    4949#define MAX_ARG_LEN     1024 
    5050#define FILE_BUF_LEN    (16*1024) 
     51#define PART_NAME_LEN   32 
    5152 
    5253struct fw_block { 
     
    5859        uint32_t        size;   /* length of the file */ 
    5960        uint32_t        crc;    /* crc value of the file */ 
     61}; 
     62 
     63struct fw_part { 
     64        struct mylo_partition   mylo; 
     65        char                    name[PART_NAME_LEN]; 
    6066}; 
    6167 
     
    104110 
    105111struct mylo_fw_header fw_header; 
    106 struct mylo_partition fw_partitions[MYLO_MAX_PARTITIONS]; 
     112struct fw_part fw_parts[MYLO_MAX_PARTITIONS]; 
    107113struct fw_block fw_blocks[MAX_FW_BLOCKS]; 
    108114struct cpx_board *board; 
     
    227233"                  valid <flag> values:\n" 
    228234"                      h : add crc header before the file data.\n" 
    229 "  -p <addr>:<len>[:<flags>[:<param>[:<file>]]]\n" 
     235"  -p <addr>:<len>[:<flags>[:<param>[:<name>[:<file>]]]]\n" 
    230236"                  add partition at <addr>, with size of <len> to the\n" 
    231 "                  partition table, set partition flags to <flags> and\n" 
    232 "                  partition parameter to <param>. If the <file> is specified\n" 
    233 "                  content of the file is also added to the firmware image.\n" 
     237"                  partition table, set partition name to <name>, partition \n" 
     238"                  flags to <flags> and partition parameter to <param>.\n" 
     239"                  If the <file> is specified content of the file will be \n" 
     240"                  added to the firmware image.\n" 
    234241"                  valid <flag> values:\n" 
    235242"                      a:  this is the active partition. The bootloader loads\n" 
     
    448455 
    449456        for (i = 0; i < fw_num_partitions; i++) { 
    450                 part = &fw_partitions[i]; 
     457                part = &fw_parts[i].mylo; 
    451458 
    452459                if (part->addr > flash_size) { 
     
    612619{ 
    613620        struct mylo_partition_table p; 
    614         struct mylo_partition *p1, *p2; 
     621        char part_names[MYLO_MAX_PARTITIONS][PART_NAME_LEN]; 
     622        int ret; 
    615623        int i; 
    616624 
     
    619627 
    620628        memset(&p, 0, sizeof(p)); 
     629        memset(part_names, 0, sizeof(part_names)); 
    621630 
    622631        p.magic = HOST_TO_LE32(MYLO_MAGIC_PARTITIONS); 
    623632        for (i = 0; i < fw_num_partitions; i++) { 
    624                 p1 = &p.partitions[i]; 
    625                 p2 = &fw_partitions[i]; 
    626                 p1->flags = HOST_TO_LE16(p2->flags); 
    627                 p1->type = HOST_TO_LE16(PARTITION_TYPE_USED); 
    628                 p1->addr = HOST_TO_LE32(p2->addr); 
    629                 p1->size = HOST_TO_LE32(p2->size); 
    630                 p1->param = HOST_TO_LE32(p2->param); 
    631         } 
    632  
    633         return write_out_data(outfile, (uint8_t *)&p, sizeof(p), crc); 
     633                struct mylo_partition *mp; 
     634                struct fw_part *fp; 
     635 
     636                mp = &p.partitions[i]; 
     637                fp = &fw_parts[i]; 
     638                mp->flags = HOST_TO_LE16(fp->mylo.flags); 
     639                mp->type = HOST_TO_LE16(PARTITION_TYPE_USED); 
     640                mp->addr = HOST_TO_LE32(fp->mylo.addr); 
     641                mp->size = HOST_TO_LE32(fp->mylo.size); 
     642                mp->param = HOST_TO_LE32(fp->mylo.param); 
     643 
     644                memcpy(part_names[i], fp->name, PART_NAME_LEN); 
     645        } 
     646 
     647        ret = write_out_data(outfile, (uint8_t *)&p, sizeof(p), crc); 
     648        if (ret) 
     649                return ret; 
     650 
     651        ret = write_out_data(outfile, (uint8_t *)part_names, sizeof(part_names), 
     652                                crc); 
     653        return ret; 
    634654} 
    635655 
     
    650670                desc.type = HOST_TO_LE32(FW_DESC_TYPE_USED); 
    651671                desc.addr = HOST_TO_LE32(board->part_offset); 
    652                 desc.dlen = HOST_TO_LE32(sizeof(struct mylo_partition_table)); 
     672                desc.dlen = HOST_TO_LE32(sizeof(struct mylo_partition_table) + 
     673                                        (MYLO_MAX_PARTITIONS * PART_NAME_LEN)); 
    653674                desc.blen = HOST_TO_LE32(board->part_size); 
    654675 
     
    9901011        int argc; 
    9911012        char *p; 
    992  
    9931013        struct mylo_partition *part; 
     1014        struct fw_part *fp; 
    9941015 
    9951016        if (required_arg(ch, arg)) { 
     
    10021023        } 
    10031024 
    1004         part = &fw_partitions[fw_num_partitions++]; 
     1025        fp = &fw_parts[fw_num_partitions++]; 
     1026        part = &fp->mylo; 
    10051027 
    10061028        argc = parse_arg(arg, buf, argv); 
     
    10601082        } 
    10611083 
     1084        p = argv[4]; 
     1085        if (is_empty_arg(p)) { 
     1086                /* set default partition parameter */ 
     1087                fp->name[0] = '\0'; 
     1088        } else { 
     1089                strncpy(fp->name, p, PART_NAME_LEN); 
     1090        } 
     1091 
    10621092#if 1 
    10631093        if (part->size == 0) { 
     
    10661096 
    10671097        /* processing file parameter */ 
    1068         p = argv[4]; 
     1098        p = argv[5]; 
    10691099        if (is_empty_arg(p) == 0) { 
    10701100                struct fw_block *b; 
Note: See TracChangeset for help on using the changeset viewer.