Changeset 36583


Ignore:
Timestamp:
2013-05-08T19:11:08+02:00 (5 years ago)
Author:
juhosg
Message:

firmware-utils/mkcameofw: allow to use combined kernel image

Signed-off-by: Gabor Juhos <juhosg@…>

File:
1 edited

Legend:

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

    r33233 r36583  
    6262static uint32_t kernel_size; 
    6363static uint32_t image_size; 
     64static int combined; 
    6465 
    6566/* 
     
    9293"Options:\n" 
    9394"  -k <file>       read kernel image from the file <file>\n" 
     95"  -c              use the kernel image as a combined image\n" 
    9496"  -M <model>      set model to <model>\n" 
    9597"  -o <file>       write output to the file <file>\n" 
     
    197199        CHKSTR(ofname, "output file"); 
    198200        CHKSTR(kernel_info.file_name, "kernel image"); 
    199         CHKSTR(rootfs_info.file_name, "rootfs image"); 
    200201 
    201202        ret = get_file_stat(&kernel_info); 
     
    203204                return ret; 
    204205 
    205         ret = get_file_stat(&rootfs_info); 
    206         if (ret) 
    207                 return ret; 
    208  
    209         if (kernel_size) { 
    210                 /* override kernel size */ 
    211                 kernel_info.write_size = kernel_size; 
    212         } 
    213  
    214         if (image_size) { 
    215                 if (image_size < kernel_info.write_size) 
    216                         kernel_info.write_size = image_size; 
    217  
    218                 /* override rootfs size */ 
    219                 rootfs_info.write_size = image_size - kernel_info.write_size; 
    220         } 
    221  
    222         if (kernel_info.file_size > kernel_info.write_size) { 
    223                 ERR("kernel image is too big"); 
    224                 return -1; 
    225         } 
    226  
    227         if (rootfs_info.file_size > rootfs_info.write_size) { 
    228                 ERR("rootfs image is too big"); 
    229                 return -1; 
     206        if (combined) { 
     207                if (!kernel_size) { 
     208                        ERR("kernel size must be specified for combined images"); 
     209                        return -1;                              \ 
     210                } 
     211 
     212                if (!image_size) 
     213                        image_size = kernel_info.file_size; 
     214 
     215                if (kernel_info.file_size > image_size) { 
     216                        ERR("kernel image is too big"); 
     217                        return -1; 
     218                } 
     219 
     220                kernel_info.write_size = image_size; 
     221        } else { 
     222                CHKSTR(rootfs_info.file_name, "rootfs image"); 
     223 
     224                ret = get_file_stat(&rootfs_info); 
     225                if (ret) 
     226                        return ret; 
     227 
     228                if (kernel_size) { 
     229                        /* override kernel size */ 
     230                        kernel_info.write_size = kernel_size; 
     231                } 
     232 
     233                if (image_size) { 
     234                        if (image_size < kernel_info.write_size) 
     235                                kernel_info.write_size = image_size; 
     236 
     237                        /* override rootfs size */ 
     238                        rootfs_info.write_size = image_size - kernel_info.write_size; 
     239                } 
     240 
     241                if (kernel_info.file_size > kernel_info.write_size) { 
     242                        ERR("kernel image is too big"); 
     243                        return -1; 
     244                } 
     245 
     246                if (rootfs_info.file_size > rootfs_info.write_size) { 
     247                        ERR("rootfs image is too big"); 
     248                        return -1; 
     249                } 
    230250        } 
    231251 
     
    302322                goto out_free_buf; 
    303323 
    304         p += kernel_info.write_size; 
    305  
    306         /* read rootfs data */ 
    307         ret = read_to_buf(&rootfs_info, p); 
    308         if (ret) 
    309                 goto out_free_buf; 
     324        if (!combined) { 
     325                p += kernel_info.write_size; 
     326 
     327                /* read rootfs data */ 
     328                ret = read_to_buf(&rootfs_info, p); 
     329                if (ret) 
     330                        goto out_free_buf; 
     331        } 
    310332 
    311333        csum = get_csum((unsigned char *)(buf + sizeof(struct img_header)), 
     
    317339        hdr->checksum = htonl(csum); 
    318340        hdr->image_size = htonl(buflen - sizeof(struct img_header)); 
    319         hdr->kernel_size = htonl(kernel_info.write_size); 
     341        if (!combined) 
     342                hdr->kernel_size = htonl(kernel_info.write_size); 
     343        else 
     344                hdr->kernel_size = htonl(kernel_size); 
    320345        hdr->header_len = sizeof(struct img_header); 
    321346        strncpy(hdr->model, model, sizeof(hdr->model)); 
     
    345370                int c; 
    346371 
    347                 c = getopt(argc, argv, "M:S:V:R:k:K:I:r:o:h"); 
     372                c = getopt(argc, argv, "M:S:V:R:k:K:I:r:o:hc"); 
    348373                if (c == -1) 
    349374                        break; 
     
    382407                        rootfs_info.file_name = optarg; 
    383408                        break; 
     409                case 'c': 
     410                        combined = 1; 
     411                        break; 
    384412                case 'o': 
    385413                        ofname = optarg; 
Note: See TracChangeset for help on using the changeset viewer.