| This patch makes it possible to set a custom image magic. |
| |
| --- a/tools/mkimage.c |
| +++ b/tools/mkimage.c |
| @@ -26,6 +26,7 @@ static struct image_tool_params params = |
| .arch = IH_ARCH_PPC, |
| .type = IH_TYPE_KERNEL, |
| .comp = IH_COMP_GZIP, |
| + .magic = IH_MAGIC, |
| .dtc = MKIMAGE_DEFAULT_DTC_OPTIONS, |
| .imagename = "", |
| .imagename2 = "", |
| @@ -89,11 +90,12 @@ static void usage(const char *msg) |
| " -q ==> quiet\n", |
| params.cmdname); |
| fprintf(stderr, |
| - " %s [-x] -A arch -O os -T type -C comp -a addr -e ep -n name -d data_file[:data_file...] image\n" |
| + " %s [-x] -A arch -O os -T type -C comp -M magic -a addr -e ep -n name -d data_file[:data_file...] image\n" |
| " -A ==> set architecture to 'arch'\n" |
| " -O ==> set operating system to 'os'\n" |
| " -T ==> set image type to 'type'\n" |
| " -C ==> set compression type 'comp'\n" |
| + " -M ==> set image magic to 'magic'\n" |
| " -a ==> set load address to 'addr' (hex)\n" |
| " -e ==> set entry point to 'ep' (hex)\n" |
| " -n ==> set image name to 'name'\n" |
| @@ -160,7 +162,7 @@ static int add_content(int type, const c |
| } |
| |
| static const char optstring[] = |
| - "a:A:b:B:c:C:d:D:e:Ef:Fg:G:i:k:K:ln:N:o:O:p:qrR:stT:vVx"; |
| + "a:A:b:B:c:C:d:D:e:Ef:Fg:G:i:k:K:lM:n:N:o:O:p:qrR:stT:vVx"; |
| |
| static const struct option longopts[] = { |
| { "load-address", required_argument, NULL, 'a' }, |
| @@ -303,6 +305,14 @@ static void process_args(int argc, char |
| case 'l': |
| params.lflag = 1; |
| break; |
| + case 'M': |
| + params.magic = strtoull(optarg, &ptr, 16); |
| + if (*ptr) { |
| + fprintf(stderr, "%s: invalid magic %s\n", |
| + params.cmdname, optarg); |
| + exit(EXIT_FAILURE); |
| + } |
| + break; |
| case 'n': |
| params.imagename = optarg; |
| break; |
| --- a/tools/default_image.c |
| +++ b/tools/default_image.c |
| @@ -67,7 +67,7 @@ static int image_verify_header(unsigned |
| */ |
| memcpy(hdr, ptr, sizeof(struct legacy_img_hdr)); |
| |
| - if (be32_to_cpu(hdr->ih_magic) != IH_MAGIC) { |
| + if (be32_to_cpu(hdr->ih_magic) != params->magic) { |
| debug("%s: Bad Magic Number: \"%s\" is no valid image\n", |
| params->cmdname, params->imagefile); |
| return -FDT_ERR_BADMAGIC; |
| @@ -146,7 +146,7 @@ static void image_set_header(void *ptr, |
| } |
| |
| /* Build new header */ |
| - image_set_magic(hdr, IH_MAGIC); |
| + image_set_magic(hdr, params->magic); |
| image_set_time(hdr, time); |
| image_set_size(hdr, imagesize); |
| image_set_load(hdr, addr); |
| --- a/tools/imagetool.h |
| +++ b/tools/imagetool.h |
| @@ -67,6 +67,7 @@ struct image_tool_params { |
| int arch; |
| int type; |
| int comp; |
| + unsigned int magic; |
| char *dtc; |
| unsigned int addr; |
| unsigned int ep; |