Changeset 16742


Ignore:
Timestamp:
2009-07-08T10:17:26+02:00 (9 years ago)
Author:
juhosg
Message:

[tools] firmware-utils/mktplinkfw: add option for combined images

File:
1 edited

Legend:

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

    r16740 r16742  
    9191static struct file_info rootfs_info; 
    9292static struct file_info boot_info; 
     93static int combined; 
    9394 
    9495char md5salt_normal[MD5SUM_LEN] = { 
     
    178179"Options:\n" 
    179180"  -B <board>      create image for the board specified with <board>\n" 
     181"  -c              use combined kernel image\n" 
    180182"  -k <file>       read kernel image from the file <file>\n" 
    181183"  -r <file>       read rootfs image from the file <file>\n" 
     
    265267                return ret; 
    266268 
    267         if (kernel_info.file_size > board->rootfs_ofs - sizeof(struct fw_header)) { 
    268                 ERR("kernel image is too big"); 
    269                 return -1; 
    270         } 
    271  
    272         if (rootfs_info.file_name == NULL) { 
    273                 ERR("no rootfs image specified"); 
    274                 return -1; 
    275         } 
    276  
    277         ret = get_file_stat(&rootfs_info); 
    278         if (ret) 
    279                 return ret; 
    280  
    281         if (rootfs_info.file_size > (board->fw_max_len - board->rootfs_ofs)) { 
    282                 ERR("rootfs image is too big"); 
    283                 return -1; 
     269        if (combined) { 
     270                if (kernel_info.file_size > 
     271                    board->fw_max_len - sizeof(struct fw_header)) { 
     272                        ERR("kernel image is too big"); 
     273                        return -1; 
     274                } 
     275        } else { 
     276                if (kernel_info.file_size > 
     277                    board->rootfs_ofs - sizeof(struct fw_header)) { 
     278                        ERR("kernel image is too big"); 
     279                        return -1; 
     280                } 
     281                if (rootfs_info.file_name == NULL) { 
     282                        ERR("no rootfs image specified"); 
     283                        return -1; 
     284                } 
     285 
     286                ret = get_file_stat(&rootfs_info); 
     287                if (ret) 
     288                        return ret; 
     289 
     290                if (rootfs_info.file_size > 
     291                    (board->fw_max_len - board->rootfs_ofs)) { 
     292                        ERR("rootfs image is too big"); 
     293                        return -1; 
     294                } 
    284295        } 
    285296 
     
    314325        hdr->kernel_ofs = HOST_TO_BE32(sizeof(struct fw_header)); 
    315326        hdr->kernel_len = HOST_TO_BE32(kernel_info.file_size); 
    316         hdr->rootfs_ofs = HOST_TO_BE32(board->rootfs_ofs); 
    317         hdr->rootfs_len = HOST_TO_BE32(rootfs_info.file_size); 
     327        if (!combined) { 
     328                hdr->rootfs_ofs = HOST_TO_BE32(board->rootfs_ofs); 
     329                hdr->rootfs_len = HOST_TO_BE32(rootfs_info.file_size); 
     330        } 
    318331 
    319332        get_md5(buf, len, hdr->md5sum1); 
     
    373386                goto out_free_buf; 
    374387 
    375         p = buf + board->rootfs_ofs; 
    376         ret = read_to_buf(&rootfs_info, p); 
    377         if (ret) 
    378                 goto out_free_buf; 
     388        if (!combined) { 
     389                p = buf + board->rootfs_ofs; 
     390                ret = read_to_buf(&rootfs_info, p); 
     391                if (ret) 
     392                        goto out_free_buf; 
     393        } 
    379394 
    380395        fill_header(buf, buflen); 
     
    404419                int c; 
    405420 
    406                 c = getopt(argc, argv, "B:V:N:k:r:o:v:h:"); 
     421                c = getopt(argc, argv, "B:V:N:ck:r:o:v:h:"); 
    407422                if (c == -1) 
    408423                        break; 
     
    418433                        vendor = optarg; 
    419434                        break; 
     435                case 'c': 
     436                        combined++; 
     437                        break; 
    420438                case 'k': 
    421439                        kernel_info.file_name = optarg; 
Note: See TracChangeset for help on using the changeset viewer.