[U-Boot-Users] Multi-file problem

Rick Bronson rick at efn.org
Thu Oct 23 05:47:10 CEST 2003


Hi Detlev,

  I actually thought about the fix you recommended but I noticed the
hdr struct was being written to before calling the print_image_hdr()
routine so I was a little hesitant.  But I tried it, and it seems to
work okay.  Did you want a diff file or shouldn't I bother for one
line:

	print_image_hdr ((image_header_t *) addr);  /* don't pass hdr, we look past it */

  Thanks for your help.

 Rick

> 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