]>
git.ipfire.org Git - people/ms/u-boot.git/blob - tools/fit_common.c
3 * DENX Software Engineering
4 * Heiko Schocher <hs@denx.de>
6 * (C) Copyright 2008 Semihalf
8 * (C) Copyright 2000-2004
9 * DENX Software Engineering
10 * Wolfgang Denk, wd@denx.de
12 * Updated-by: Prafulla Wadaskar <prafulla@marvell.com>
13 * FIT image specific code abstracted from mkimage.c
14 * some functions added to address abstraction
16 * All rights reserved.
18 * SPDX-License-Identifier: GPL-2.0+
21 #include "imagetool.h"
23 #include "fit_common.h"
25 #include <u-boot/crc.h>
27 int fit_verify_header(unsigned char *ptr
, int image_size
,
28 struct image_tool_params
*params
)
30 return fdt_check_header(ptr
);
33 int fit_check_image_types(uint8_t type
)
35 if (type
== IH_TYPE_FLATDT
)
41 int mmap_fdt(const char *cmdname
, const char *fname
, size_t size_inc
,
42 void **blobp
, struct stat
*sbuf
, bool delete_on_error
)
47 /* Load FIT blob into memory (we need to write hashes/signatures) */
48 fd
= open(fname
, O_RDWR
| O_BINARY
);
51 fprintf(stderr
, "%s: Can't open %s: %s\n",
52 cmdname
, fname
, strerror(errno
));
56 if (fstat(fd
, sbuf
) < 0) {
57 fprintf(stderr
, "%s: Can't stat %s: %s\n",
58 cmdname
, fname
, strerror(errno
));
63 sbuf
->st_size
+= size_inc
;
64 if (ftruncate(fd
, sbuf
->st_size
)) {
65 fprintf(stderr
, "%s: Can't expand %s: %s\n",
66 cmdname
, fname
, strerror(errno
));
72 ptr
= mmap(0, sbuf
->st_size
, PROT_READ
|PROT_WRITE
, MAP_SHARED
, fd
, 0);
73 if ((ptr
== MAP_FAILED
) || (errno
!= 0)) {
74 fprintf(stderr
, "%s: Can't read %s: %s\n",
75 cmdname
, fname
, strerror(errno
));
79 /* check if ptr has a valid blob */
80 if (fdt_check_header(ptr
)) {
81 fprintf(stderr
, "%s: Invalid FIT blob\n", cmdname
);
85 /* expand if needed */
89 ret
= fdt_open_into(ptr
, ptr
, sbuf
->st_size
);
91 fprintf(stderr
, "%s: Cannot expand FDT: %s\n",
92 cmdname
, fdt_strerror(ret
));