Blame view
tools/mkimage.c
14.7 KB
5b1d71372 Initial revision |
1 |
/* |
9d25438fe [new uImage] Add ... |
2 3 |
* (C) Copyright 2008 Semihalf * |
89a4d6b12 tools: mkimage: s... |
4 |
* (C) Copyright 2000-2009 |
5b1d71372 Initial revision |
5 6 |
* DENX Software Engineering * Wolfgang Denk, wd@denx.de |
0c852a288 * Patch by Rahul ... |
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
* * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of * the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, * MA 02111-1307 USA |
5b1d71372 Initial revision |
22 |
*/ |
b97a2a0a2 [new uImage] Defi... |
23 |
#include "mkimage.h" |
5b1d71372 Initial revision |
24 |
#include <image.h> |
976b38c07 mkimage: add "-V"... |
25 |
#include <version.h> |
89a4d6b12 tools: mkimage: s... |
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
static void copy_file(int, const char *, int); static void usage(void); /* image_type_params link list to maintain registered image type supports */ struct image_type_params *mkimage_tparams = NULL; /* parameters initialized by core will be used by the image type code */ struct mkimage_params params = { .os = IH_OS_LINUX, .arch = IH_ARCH_PPC, .type = IH_TYPE_KERNEL, .comp = IH_COMP_GZIP, .dtc = MKIMAGE_DEFAULT_DTC_OPTIONS, |
04387d24a mkimage: fix Segm... |
40 |
.imagename = "", |
89a4d6b12 tools: mkimage: s... |
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 |
}; /* * mkimage_register - * * It is used to register respective image generation/list support to the * mkimage core * * the input struct image_type_params is checked and appended to the link * list, if the input structure is already registered, error */ void mkimage_register (struct image_type_params *tparams) { struct image_type_params **tp; if (!tparams) { fprintf (stderr, "%s: %s: Null input ", params.cmdname, __FUNCTION__); exit (EXIT_FAILURE); } /* scan the linked list, check for registry and point the last one */ for (tp = &mkimage_tparams; *tp != NULL; tp = &(*tp)->next) { if (!strcmp((*tp)->name, tparams->name)) { fprintf (stderr, "%s: %s already registered ", params.cmdname, tparams->name); return; } } /* add input struct entry at the end of link list */ *tp = tparams; /* mark input entry as last entry in the link list */ tparams->next = NULL; debug ("Registered %s ", tparams->name); } /* * mkimage_get_type - * * It scans all registers image type supports * checks the input type_id for each supported image type * * if successful, * returns respective image_type_params pointer if success * if input type_id is not supported by any of image_type_support * returns NULL */ struct image_type_params *mkimage_get_type(int type) { struct image_type_params *curr; for (curr = mkimage_tparams; curr != NULL; curr = curr->next) { if (curr->check_image_type) { if (!curr->check_image_type (type)) return curr; } } return NULL; } /* * mkimage_verify_print_header - * * It scans mkimage_tparams link list, * verifies image_header for each supported image type * if verification is successful, prints respective header * * returns negative if input image format does not match with any of * supported image types */ int mkimage_verify_print_header (void *ptr, struct stat *sbuf) { int retval = -1; struct image_type_params *curr; for (curr = mkimage_tparams; curr != NULL; curr = curr->next ) { if (curr->verify_header) { retval = curr->verify_header ( (unsigned char *)ptr, sbuf->st_size, ¶ms); if (retval == 0) { /* * Print the image information * if verify is successful */ if (curr->print_header) curr->print_header (ptr); else { fprintf (stderr, "%s: print_header undefined for %s ", params.cmdname, curr->name); } break; } } } return retval; } |
5b1d71372 Initial revision |
146 147 148 149 |
int main (int argc, char **argv) { |
9d25438fe [new uImage] Add ... |
150 |
int ifd = -1; |
5b1d71372 Initial revision |
151 |
struct stat sbuf; |
a2513e27e mkimage: Fix stri... |
152 |
char *ptr; |
449609f5b tools: mkimage: F... |
153 |
int retval = 0; |
89a4d6b12 tools: mkimage: s... |
154 |
struct image_type_params *tparams = NULL; |
5b1d71372 Initial revision |
155 |
|
aa0c7a86c mkimage: Add Kirk... |
156 157 |
/* Init Kirkwood Boot image generation/list support */ init_kwb_image_type (); |
8edcde5e4 mkimage: Add Free... |
158 159 |
/* Init Freescale imx Boot image generation/list support */ init_imx_image_type (); |
89a4d6b12 tools: mkimage: s... |
160 161 |
/* Init FIT image generation/list support */ init_fit_image_type (); |
3decb14ab mkimage: Add OMAP... |
162 163 |
/* Init TI OMAP Boot image generation/list support */ init_omap_image_type(); |
89a4d6b12 tools: mkimage: s... |
164 165 |
/* Init Default image generation/list support */ init_default_image_type (); |
7816f2cf8 mkimage: add UBL ... |
166 167 |
/* Init Davinci UBL support */ init_ubl_image_type(); |
4962e38e9 mkimage: adding s... |
168 169 |
/* Init Davinci AIS support */ init_ais_image_type(); |
5b1d71372 Initial revision |
170 |
|
89a4d6b12 tools: mkimage: s... |
171 172 |
params.cmdname = *argv; params.addr = params.ep = 0; |
5b1d71372 Initial revision |
173 174 175 176 177 |
while (--argc > 0 && **++argv == '-') { while (*++*argv) { switch (**argv) { case 'l': |
89a4d6b12 tools: mkimage: s... |
178 |
params.lflag = 1; |
5b1d71372 Initial revision |
179 180 181 |
break; case 'A': if ((--argc <= 0) || |
89a4d6b12 tools: mkimage: s... |
182 183 |
(params.arch = genimg_get_arch_id (*++argv)) < 0) |
5b1d71372 Initial revision |
184 185 186 187 |
usage (); goto NXTARG; case 'C': if ((--argc <= 0) || |
89a4d6b12 tools: mkimage: s... |
188 189 |
(params.comp = genimg_get_comp_id (*++argv)) < 0) |
5b1d71372 Initial revision |
190 191 |
usage (); goto NXTARG; |
9d25438fe [new uImage] Add ... |
192 193 194 |
case 'D': if (--argc <= 0) usage (); |
89a4d6b12 tools: mkimage: s... |
195 |
params.dtc = *++argv; |
9d25438fe [new uImage] Add ... |
196 |
goto NXTARG; |
5b1d71372 Initial revision |
197 198 |
case 'O': if ((--argc <= 0) || |
89a4d6b12 tools: mkimage: s... |
199 200 |
(params.os = genimg_get_os_id (*++argv)) < 0) |
5b1d71372 Initial revision |
201 202 203 204 |
usage (); goto NXTARG; case 'T': if ((--argc <= 0) || |
89a4d6b12 tools: mkimage: s... |
205 206 |
(params.type = genimg_get_type_id (*++argv)) < 0) |
5b1d71372 Initial revision |
207 208 209 210 211 212 |
usage (); goto NXTARG; case 'a': if (--argc <= 0) usage (); |
a2513e27e mkimage: Fix stri... |
213 |
params.addr = strtoul (*++argv, &ptr, 16); |
5b1d71372 Initial revision |
214 215 216 217 |
if (*ptr) { fprintf (stderr, "%s: invalid load address %s ", |
89a4d6b12 tools: mkimage: s... |
218 |
params.cmdname, *argv); |
5b1d71372 Initial revision |
219 220 221 222 223 224 |
exit (EXIT_FAILURE); } goto NXTARG; case 'd': if (--argc <= 0) usage (); |
89a4d6b12 tools: mkimage: s... |
225 226 |
params.datafile = *++argv; params.dflag = 1; |
5b1d71372 Initial revision |
227 228 229 230 |
goto NXTARG; case 'e': if (--argc <= 0) usage (); |
a2513e27e mkimage: Fix stri... |
231 |
params.ep = strtoul (*++argv, &ptr, 16); |
5b1d71372 Initial revision |
232 233 234 235 |
if (*ptr) { fprintf (stderr, "%s: invalid entry point %s ", |
89a4d6b12 tools: mkimage: s... |
236 |
params.cmdname, *argv); |
5b1d71372 Initial revision |
237 238 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
239 |
params.eflag = 1; |
5b1d71372 Initial revision |
240 |
goto NXTARG; |
9d25438fe [new uImage] Add ... |
241 242 243 |
case 'f': if (--argc <= 0) usage (); |
1a99de2cb tools/mkimage: As... |
244 245 246 247 248 |
/* * The flattened image tree (FIT) format * requires a flattened device tree image type */ params.type = IH_TYPE_FLATDT; |
fbc1c8f6f tools/mkimage: Re... |
249 250 |
params.datafile = *++argv; params.fflag = 1; |
9d25438fe [new uImage] Add ... |
251 |
goto NXTARG; |
5b1d71372 Initial revision |
252 253 254 |
case 'n': if (--argc <= 0) usage (); |
89a4d6b12 tools: mkimage: s... |
255 |
params.imagename = *++argv; |
5b1d71372 Initial revision |
256 |
goto NXTARG; |
f0662105b mkimage: Add vari... |
257 258 259 |
case 's': params.skipcpy = 1; break; |
5b1d71372 Initial revision |
260 |
case 'v': |
89a4d6b12 tools: mkimage: s... |
261 |
params.vflag++; |
5b1d71372 Initial revision |
262 |
break; |
976b38c07 mkimage: add "-V"... |
263 264 265 266 |
case 'V': printf("mkimage version %s ", PLAIN_VERSION); exit(EXIT_SUCCESS); |
5b1d71372 Initial revision |
267 |
case 'x': |
89a4d6b12 tools: mkimage: s... |
268 |
params.xflag++; |
5b1d71372 Initial revision |
269 270 271 272 273 274 275 |
break; default: usage (); } } NXTARG: ; } |
89a4d6b12 tools: mkimage: s... |
276 277 278 279 280 281 282 283 284 285 286 |
if (argc != 1) usage (); /* set tparams as per input type_id */ tparams = mkimage_get_type(params.type); if (tparams == NULL) { fprintf (stderr, "%s: unsupported type %s ", params.cmdname, genimg_get_type_name(params.type)); exit (EXIT_FAILURE); } |
5b1d71372 Initial revision |
287 |
|
89a4d6b12 tools: mkimage: s... |
288 289 290 291 292 293 294 295 296 297 |
/* * check the passed arguments parameters meets the requirements * as per image type to be generated/listed */ if (tparams->check_params) if (tparams->check_params (¶ms)) usage (); if (!params.eflag) { params.ep = params.addr; |
5b1d71372 Initial revision |
298 |
/* If XIP, entry point must be after the U-Boot header */ |
89a4d6b12 tools: mkimage: s... |
299 300 |
if (params.xflag) params.ep += tparams->header_size; |
5b1d71372 Initial revision |
301 |
} |
89a4d6b12 tools: mkimage: s... |
302 |
params.imagefile = *argv; |
5b1d71372 Initial revision |
303 |
|
c81296c16 tools/mkimage: Pr... |
304 305 306 307 308 309 310 311 312 |
if (params.fflag){ if (tparams->fflag_handle) /* * in some cases, some additional processing needs * to be done if fflag is defined * * For ex. fit_handle_file for Fit file support */ retval = tparams->fflag_handle(¶ms); |
5b1d71372 Initial revision |
313 |
|
c81296c16 tools/mkimage: Pr... |
314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 |
if (retval != EXIT_SUCCESS) exit (retval); } if (params.lflag || params.fflag) { ifd = open (params.imagefile, O_RDONLY|O_BINARY); } else { ifd = open (params.imagefile, O_RDWR|O_CREAT|O_TRUNC|O_BINARY, 0666); } if (ifd < 0) { fprintf (stderr, "%s: Can't open %s: %s ", params.cmdname, params.imagefile, strerror(errno)); exit (EXIT_FAILURE); |
5b1d71372 Initial revision |
331 |
} |
c81296c16 tools/mkimage: Pr... |
332 |
if (params.lflag || params.fflag) { |
5b1d71372 Initial revision |
333 334 335 336 337 338 |
/* * list header information of existing image */ if (fstat(ifd, &sbuf) < 0) { fprintf (stderr, "%s: Can't stat %s: %s ", |
89a4d6b12 tools: mkimage: s... |
339 340 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
341 342 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
343 |
if ((unsigned)sbuf.st_size < tparams->header_size) { |
5b1d71372 Initial revision |
344 |
fprintf (stderr, |
89a4d6b12 tools: mkimage: s... |
345 346 347 |
"%s: Bad size: \"%s\" is not valid image ", params.cmdname, params.imagefile); |
5b1d71372 Initial revision |
348 349 |
exit (EXIT_FAILURE); } |
fa956fde6 mkimage: make mma... |
350 351 |
ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, ifd, 0); if (ptr == MAP_FAILED) { |
5b1d71372 Initial revision |
352 353 |
fprintf (stderr, "%s: Can't read %s: %s ", |
89a4d6b12 tools: mkimage: s... |
354 355 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
356 357 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
358 359 360 361 362 363 364 |
/* * scan through mkimage registry for all supported image types * and verify the input image file header for match * Print the image information for matched image type * Returns the error code if not matched */ retval = mkimage_verify_print_header (ptr, &sbuf); |
5b1d71372 Initial revision |
365 |
|
5b1d71372 Initial revision |
366 367 |
(void) munmap((void *)ptr, sbuf.st_size); (void) close (ifd); |
f7644c0bf tools: mkimage : ... |
368 |
exit (retval); |
5b1d71372 Initial revision |
369 370 371 |
} /* |
f0662105b mkimage: Add vari... |
372 373 374 375 |
* In case there an header with a variable * length will be added, the corresponding * function is called. This is responsible to * allocate memory for the header itself. |
5b1d71372 Initial revision |
376 |
*/ |
f0662105b mkimage: Add vari... |
377 378 379 380 |
if (tparams->vrec_header) tparams->vrec_header(¶ms, tparams); else memset(tparams->hdr, 0, tparams->header_size); |
5b1d71372 Initial revision |
381 |
|
89a4d6b12 tools: mkimage: s... |
382 383 |
if (write(ifd, tparams->hdr, tparams->header_size) != tparams->header_size) { |
5b1d71372 Initial revision |
384 385 |
fprintf (stderr, "%s: Write error on %s: %s ", |
89a4d6b12 tools: mkimage: s... |
386 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
387 388 |
exit (EXIT_FAILURE); } |
d1be8f922 mkimage: Fix vari... |
389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 |
if (!params.skipcpy) { if (params.type == IH_TYPE_MULTI || params.type == IH_TYPE_SCRIPT) { char *file = params.datafile; uint32_t size; for (;;) { char *sep = NULL; if (file) { if ((sep = strchr(file, ':')) != NULL) { *sep = '\0'; } if (stat (file, &sbuf) < 0) { fprintf (stderr, "%s: Can't stat %s: %s ", params.cmdname, file, strerror(errno)); exit (EXIT_FAILURE); } size = cpu_to_uimage (sbuf.st_size); } else { size = 0; |
5b1d71372 Initial revision |
412 |
} |
d1be8f922 mkimage: Fix vari... |
413 414 415 416 417 |
if (write(ifd, (char *)&size, sizeof(size)) != sizeof(size)) { fprintf (stderr, "%s: Write error on %s: %s ", params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
418 419 |
exit (EXIT_FAILURE); } |
5b1d71372 Initial revision |
420 |
|
d1be8f922 mkimage: Fix vari... |
421 422 423 |
if (!file) { break; } |
5b1d71372 Initial revision |
424 |
|
d1be8f922 mkimage: Fix vari... |
425 426 427 428 429 430 |
if (sep) { *sep = ':'; file = sep + 1; } else { file = NULL; } |
5b1d71372 Initial revision |
431 |
} |
d1be8f922 mkimage: Fix vari... |
432 |
file = params.datafile; |
5b1d71372 Initial revision |
433 |
|
d1be8f922 mkimage: Fix vari... |
434 435 436 437 438 439 440 441 442 443 444 |
for (;;) { char *sep = strchr(file, ':'); if (sep) { *sep = '\0'; copy_file (ifd, file, 1); *sep++ = ':'; file = sep; } else { copy_file (ifd, file, 0); break; } |
5b1d71372 Initial revision |
445 |
} |
d1be8f922 mkimage: Fix vari... |
446 447 |
} else { copy_file (ifd, params.datafile, 0); |
5b1d71372 Initial revision |
448 |
} |
5b1d71372 Initial revision |
449 450 451 |
} /* We're a bit of paranoid */ |
89a4d6b12 tools: mkimage: s... |
452 453 454 455 |
#if defined(_POSIX_SYNCHRONIZED_IO) && \ !defined(__sun__) && \ !defined(__FreeBSD__) && \ !defined(__APPLE__) |
5b1d71372 Initial revision |
456 457 458 459 460 461 462 463 |
(void) fdatasync (ifd); #else (void) fsync (ifd); #endif if (fstat(ifd, &sbuf) < 0) { fprintf (stderr, "%s: Can't stat %s: %s ", |
89a4d6b12 tools: mkimage: s... |
464 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
465 466 |
exit (EXIT_FAILURE); } |
fa956fde6 mkimage: make mma... |
467 468 |
ptr = mmap(0, sbuf.st_size, PROT_READ|PROT_WRITE, MAP_SHARED, ifd, 0); if (ptr == MAP_FAILED) { |
5b1d71372 Initial revision |
469 470 |
fprintf (stderr, "%s: Can't map %s: %s ", |
89a4d6b12 tools: mkimage: s... |
471 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
472 473 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
474 475 476 477 478 479 480 481 482 |
/* Setup the image header as per input image type*/ if (tparams->set_header) tparams->set_header (ptr, &sbuf, ifd, ¶ms); else { fprintf (stderr, "%s: Can't set header for %s: %s ", params.cmdname, tparams->name, strerror(errno)); exit (EXIT_FAILURE); } |
5b1d71372 Initial revision |
483 |
|
89a4d6b12 tools: mkimage: s... |
484 485 486 487 488 489 490 491 492 |
/* Print the image information by processing image header */ if (tparams->print_header) tparams->print_header (ptr); else { fprintf (stderr, "%s: Can't print header for %s: %s ", params.cmdname, tparams->name, strerror(errno)); exit (EXIT_FAILURE); } |
5b1d71372 Initial revision |
493 494 495 496 |
(void) munmap((void *)ptr, sbuf.st_size); /* We're a bit of paranoid */ |
89a4d6b12 tools: mkimage: s... |
497 498 499 500 |
#if defined(_POSIX_SYNCHRONIZED_IO) && \ !defined(__sun__) && \ !defined(__FreeBSD__) && \ !defined(__APPLE__) |
5b1d71372 Initial revision |
501 502 503 504 505 506 507 508 |
(void) fdatasync (ifd); #else (void) fsync (ifd); #endif if (close(ifd)) { fprintf (stderr, "%s: Write error on %s: %s ", |
89a4d6b12 tools: mkimage: s... |
509 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 |
exit (EXIT_FAILURE); } exit (EXIT_SUCCESS); } static void copy_file (int ifd, const char *datafile, int pad) { int dfd; struct stat sbuf; unsigned char *ptr; int tail; int zero = 0; int offset = 0; int size; |
89a4d6b12 tools: mkimage: s... |
526 |
struct image_type_params *tparams = mkimage_get_type (params.type); |
5b1d71372 Initial revision |
527 |
|
89a4d6b12 tools: mkimage: s... |
528 |
if (params.vflag) { |
5b1d71372 Initial revision |
529 530 531 |
fprintf (stderr, "Adding Image %s ", datafile); } |
ef1464cc0 * Patch by Anders... |
532 |
if ((dfd = open(datafile, O_RDONLY|O_BINARY)) < 0) { |
5b1d71372 Initial revision |
533 534 |
fprintf (stderr, "%s: Can't open %s: %s ", |
89a4d6b12 tools: mkimage: s... |
535 |
params.cmdname, datafile, strerror(errno)); |
5b1d71372 Initial revision |
536 537 538 539 540 541 |
exit (EXIT_FAILURE); } if (fstat(dfd, &sbuf) < 0) { fprintf (stderr, "%s: Can't stat %s: %s ", |
89a4d6b12 tools: mkimage: s... |
542 |
params.cmdname, datafile, strerror(errno)); |
5b1d71372 Initial revision |
543 544 |
exit (EXIT_FAILURE); } |
fa956fde6 mkimage: make mma... |
545 546 |
ptr = mmap(0, sbuf.st_size, PROT_READ, MAP_SHARED, dfd, 0); if (ptr == MAP_FAILED) { |
5b1d71372 Initial revision |
547 548 |
fprintf (stderr, "%s: Can't read %s: %s ", |
89a4d6b12 tools: mkimage: s... |
549 |
params.cmdname, datafile, strerror(errno)); |
5b1d71372 Initial revision |
550 551 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
552 |
if (params.xflag) { |
5b1d71372 Initial revision |
553 554 555 556 557 558 |
unsigned char *p = NULL; /* * XIP: do not append the image_header_t at the * beginning of the file, but consume the space * reserved for it. */ |
89a4d6b12 tools: mkimage: s... |
559 |
if ((unsigned)sbuf.st_size < tparams->header_size) { |
5b1d71372 Initial revision |
560 561 562 |
fprintf (stderr, "%s: Bad size: \"%s\" is too small for XIP ", |
89a4d6b12 tools: mkimage: s... |
563 |
params.cmdname, datafile); |
5b1d71372 Initial revision |
564 565 |
exit (EXIT_FAILURE); } |
89a4d6b12 tools: mkimage: s... |
566 |
for (p = ptr; p < ptr + tparams->header_size; p++) { |
5b1d71372 Initial revision |
567 568 569 570 |
if ( *p != 0xff ) { fprintf (stderr, "%s: Bad file: \"%s\" has invalid buffer for XIP ", |
89a4d6b12 tools: mkimage: s... |
571 |
params.cmdname, datafile); |
5b1d71372 Initial revision |
572 573 574 |
exit (EXIT_FAILURE); } } |
89a4d6b12 tools: mkimage: s... |
575 |
offset = tparams->header_size; |
5b1d71372 Initial revision |
576 577 578 579 580 581 |
} size = sbuf.st_size - offset; if (write(ifd, ptr + offset, size) != size) { fprintf (stderr, "%s: Write error on %s: %s ", |
89a4d6b12 tools: mkimage: s... |
582 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
583 584 585 586 587 588 589 590 |
exit (EXIT_FAILURE); } if (pad && ((tail = size % 4) != 0)) { if (write(ifd, (char *)&zero, 4-tail) != 4-tail) { fprintf (stderr, "%s: Write error on %s: %s ", |
89a4d6b12 tools: mkimage: s... |
591 592 |
params.cmdname, params.imagefile, strerror(errno)); |
5b1d71372 Initial revision |
593 594 595 596 597 598 599 600 601 602 603 604 605 |
exit (EXIT_FAILURE); } } (void) munmap((void *)ptr, sbuf.st_size); (void) close (dfd); } void usage () { fprintf (stderr, "Usage: %s -l image " |
9d25438fe [new uImage] Add ... |
606 607 |
" -l ==> list image header information ", |
89a4d6b12 tools: mkimage: s... |
608 |
params.cmdname); |
9d25438fe [new uImage] Add ... |
609 610 611 612 613 |
fprintf (stderr, " %s [-x] -A arch -O os -T type -C comp " "-a addr -e ep -n name -d data_file[:data_file...] image " " -A ==> set architecture to 'arch' " |
5b1d71372 Initial revision |
614 615 616 617 618 619 620 621 622 623 624 625 626 627 |
" -O ==> set operating system to 'os' " " -T ==> set image type to 'type' " " -C ==> set compression type 'comp' " " -a ==> set load address to 'addr' (hex) " " -e ==> set entry point to 'ep' (hex) " " -n ==> set image name to 'name' " " -d ==> use image data from 'datafile' " |
9d25438fe [new uImage] Add ... |
628 629 |
" -x ==> set XIP (execute in place) ", |
89a4d6b12 tools: mkimage: s... |
630 |
params.cmdname); |
9d25438fe [new uImage] Add ... |
631 632 |
fprintf (stderr, " %s [-D dtc_options] -f fit-image.its fit-image ", |
89a4d6b12 tools: mkimage: s... |
633 |
params.cmdname); |
976b38c07 mkimage: add "-V"... |
634 635 636 |
fprintf (stderr, " %s -V ==> print version information and exit ", params.cmdname); |
9d25438fe [new uImage] Add ... |
637 |
|
5b1d71372 Initial revision |
638 639 |
exit (EXIT_FAILURE); } |