[U-Boot-Users] Multi-file problem

Detlev Zundel dzu at denx.de
Wed Oct 22 16:33:53 CEST 2003


Hi Rick,

>   I found a problem with Mutli-file use of mkimage (using "-T multi")
> and fixed in my old u-boot-0.4.0 but my fix seemed to filter through
> too many files when I tried to do it (more correctly) on the cvs tree.
>
>   Here's the problem (using 21-Oct-03 cvs files):
>
>   When this address in cmd_bootm.c:1122 inside print_image_hdr() (is
> caculated:
>
> 		ulong *len_ptr = (ulong *)((ulong)hdr + sizeof(image_header_t));
>
>   it points to memory that wasn't copied back on cmd_bootm.c:174:
>
> 	memmove (&header, (char *)addr, sizeof(image_header_t));
>
>   because len_ptr points to the address header[1] and the memmove only
> moved header[0].  So I changed line 140 to:
>
> image_header_t header[2];  /* enough room for multi-image's size bytes too */
>
>   and all occurances of memmove (&header... from:
>
> 	memmove (&header, (char *)addr, sizeof(image_header_t));
>   to:
> 	memmove (&header, (char *)addr, sizeof(header));
>
>   But cmd_autoscript.c,common_util.c, armlinux.c uses &header and I'm
> not sure if this is the right fix.  Maybe someone who knows this
> stuff can give me some direction.

In a standard setup, the copying into ram is only done so we can
recalculate the header checksum and compare it to the original value.
If you simply want to print the header information (as iminfo does -
cf. image_info()) a pointer to the flash location will do just as
well.  I have to admit that I do not fully understand the
HAVE_DATAFLASH code so I cannot comment on this situation but apart
from that you could try replacing the

	/* for multi-file images we need the data part, too */
	print_image_hdr (hdr);

with

	/* for multi-file images we need the data part, too */
	print_image_hdr (addr);

If this works, then it surely is less intrusive than your patch.

Cheers
  Detlev

-- 
I haven't lost my mind, I know exactly where I left it.




More information about the U-Boot mailing list