Blame view
tools/default_image.c
4.4 KB
89a4d6b12 tools: mkimage: s... |
1 2 3 4 5 6 7 8 9 10 11 12 13 |
/* * (C) Copyright 2008 Semihalf * * (C) Copyright 2000-2004 * DENX Software Engineering * Wolfgang Denk, wd@denx.de * * Updated-by: Prafulla Wadaskar <prafulla@marvell.com> * default_image specific code abstracted from mkimage.c * some functions added to address abstraction * * All rights reserved. * |
1a4596601 Add GPL-2.0+ SPDX... |
14 |
* SPDX-License-Identifier: GPL-2.0+ |
89a4d6b12 tools: mkimage: s... |
15 |
*/ |
f86ed6a8d tools: moved code... |
16 |
#include "imagetool.h" |
266217999 tools: do not pri... |
17 |
#include "mkimage.h" |
89a4d6b12 tools: mkimage: s... |
18 19 20 21 |
#include <image.h> #include <u-boot/crc.h> static image_header_t header; |
712fbcf38 checkpatch whites... |
22 |
static int image_check_image_types(uint8_t type) |
89a4d6b12 tools: mkimage: s... |
23 |
{ |
b9b50e89d image: Implement ... |
24 |
if (((type > IH_TYPE_INVALID) && (type < IH_TYPE_FLATDT)) || |
d21bd69b6 tools: mkimage: a... |
25 |
(type == IH_TYPE_KERNEL_NOLOAD) || (type == IH_TYPE_FIRMWARE_IVT)) |
89a4d6b12 tools: mkimage: s... |
26 27 28 29 |
return EXIT_SUCCESS; else return EXIT_FAILURE; } |
f86ed6a8d tools: moved code... |
30 |
static int image_check_params(struct image_tool_params *params) |
89a4d6b12 tools: mkimage: s... |
31 32 33 34 35 |
{ return ((params->dflag && (params->fflag || params->lflag)) || (params->fflag && (params->dflag || params->lflag)) || (params->lflag && (params->dflag || params->fflag))); } |
712fbcf38 checkpatch whites... |
36 |
static int image_verify_header(unsigned char *ptr, int image_size, |
f86ed6a8d tools: moved code... |
37 |
struct image_tool_params *params) |
89a4d6b12 tools: mkimage: s... |
38 39 40 41 42 43 44 45 46 47 48 49 |
{ uint32_t len; const unsigned char *data; uint32_t checksum; image_header_t header; image_header_t *hdr = &header; /* * create copy of header so that we can blank out the * checksum field for checking - this can't be done * on the PROT_READ mapped data. */ |
712fbcf38 checkpatch whites... |
50 |
memcpy(hdr, ptr, sizeof(image_header_t)); |
89a4d6b12 tools: mkimage: s... |
51 52 |
if (be32_to_cpu(hdr->ih_magic) != IH_MAGIC) { |
266217999 tools: do not pri... |
53 54 55 |
debug("%s: Bad Magic Number: \"%s\" is no valid image ", params->cmdname, params->imagefile); |
89a4d6b12 tools: mkimage: s... |
56 57 58 59 60 61 62 63 |
return -FDT_ERR_BADMAGIC; } data = (const unsigned char *)hdr; len = sizeof(image_header_t); checksum = be32_to_cpu(hdr->ih_hcrc); hdr->ih_hcrc = cpu_to_be32(0); /* clear for re-calculation */ |
712fbcf38 checkpatch whites... |
64 |
if (crc32(0, data, len) != checksum) { |
266217999 tools: do not pri... |
65 66 67 |
debug("%s: ERROR: \"%s\" has bad header checksum! ", params->cmdname, params->imagefile); |
89a4d6b12 tools: mkimage: s... |
68 69 70 71 72 73 74 |
return -FDT_ERR_BADSTATE; } data = (const unsigned char *)ptr + sizeof(image_header_t); len = image_size - sizeof(image_header_t) ; checksum = be32_to_cpu(hdr->ih_dcrc); |
712fbcf38 checkpatch whites... |
75 |
if (crc32(0, data, len) != checksum) { |
266217999 tools: do not pri... |
76 77 78 |
debug("%s: ERROR: \"%s\" has corrupted data! ", params->cmdname, params->imagefile); |
89a4d6b12 tools: mkimage: s... |
79 80 81 82 |
return -FDT_ERR_BADSTRUCTURE; } return 0; } |
712fbcf38 checkpatch whites... |
83 |
static void image_set_header(void *ptr, struct stat *sbuf, int ifd, |
f86ed6a8d tools: moved code... |
84 |
struct image_tool_params *params) |
89a4d6b12 tools: mkimage: s... |
85 86 |
{ uint32_t checksum; |
f3f431a71 Reproducible U-Bo... |
87 |
time_t time; |
d21bd69b6 tools: mkimage: a... |
88 |
uint32_t imagesize; |
89a4d6b12 tools: mkimage: s... |
89 90 |
image_header_t * hdr = (image_header_t *)ptr; |
712fbcf38 checkpatch whites... |
91 |
checksum = crc32(0, |
89a4d6b12 tools: mkimage: s... |
92 93 94 |
(const unsigned char *)(ptr + sizeof(image_header_t)), sbuf->st_size - sizeof(image_header_t)); |
5847084f6 Respect SOURCE_DA... |
95 |
time = imagetool_get_source_date(params, sbuf->st_mtime); |
d21bd69b6 tools: mkimage: a... |
96 97 98 99 100 |
if (params->type == IH_TYPE_FIRMWARE_IVT) /* Add size of CSF minus IVT */ imagesize = sbuf->st_size - sizeof(image_header_t) + 0x1FE0; else imagesize = sbuf->st_size - sizeof(image_header_t); |
f3f431a71 Reproducible U-Bo... |
101 |
|
89a4d6b12 tools: mkimage: s... |
102 |
/* Build new header */ |
712fbcf38 checkpatch whites... |
103 |
image_set_magic(hdr, IH_MAGIC); |
f3f431a71 Reproducible U-Bo... |
104 |
image_set_time(hdr, time); |
d21bd69b6 tools: mkimage: a... |
105 |
image_set_size(hdr, imagesize); |
712fbcf38 checkpatch whites... |
106 107 108 109 110 111 112 113 114 115 116 |
image_set_load(hdr, params->addr); image_set_ep(hdr, params->ep); image_set_dcrc(hdr, checksum); image_set_os(hdr, params->os); image_set_arch(hdr, params->arch); image_set_type(hdr, params->type); image_set_comp(hdr, params->comp); image_set_name(hdr, params->imagename); checksum = crc32(0, (const unsigned char *)hdr, |
89a4d6b12 tools: mkimage: s... |
117 |
sizeof(image_header_t)); |
712fbcf38 checkpatch whites... |
118 |
image_set_hcrc(hdr, checksum); |
89a4d6b12 tools: mkimage: s... |
119 |
} |
67f946cd1 dumpimage: replac... |
120 |
static int image_extract_subimage(void *ptr, struct image_tool_params *params) |
a804b5ce2 Add dumpimage, a ... |
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 146 147 |
{ const image_header_t *hdr = (const image_header_t *)ptr; ulong file_data; ulong file_len; if (image_check_type(hdr, IH_TYPE_MULTI)) { ulong idx = params->pflag; ulong count; /* get the number of data files present in the image */ count = image_multi_count(hdr); /* retrieve the "data file" at the idx position */ image_multi_getimg(hdr, idx, &file_data, &file_len); if ((file_len == 0) || (idx >= count)) { fprintf(stderr, "%s: No such data file %ld in \"%s\" ", params->cmdname, idx, params->imagefile); return -1; } } else { file_data = image_get_data(hdr); file_len = image_get_size(hdr); } /* save the "data file" into the file system */ |
67f946cd1 dumpimage: replac... |
148 |
return imagetool_save_subimage(params->outfile, file_data, file_len); |
a804b5ce2 Add dumpimage, a ... |
149 |
} |
89a4d6b12 tools: mkimage: s... |
150 151 152 |
/* * Default image type parameters definition */ |
a93648d19 imagetool: replac... |
153 154 155 156 157 158 159 160 161 |
U_BOOT_IMAGE_TYPE( defimage, "Default Image support", sizeof(image_header_t), (void *)&header, image_check_params, image_verify_header, image_print_contents, image_set_header, |
67f946cd1 dumpimage: replac... |
162 |
image_extract_subimage, |
a93648d19 imagetool: replac... |
163 164 165 166 |
image_check_image_types, NULL, NULL ); |