[U-Boot-Users] [new uImage] Code available on new-image branch of u-boot-testing repo

Bartlomiej Sieka tur at semihalf.com
Thu Feb 7 17:15:31 CET 2008


Kumar Gala wrote:
> Here is a rough patch to common/cmd_bootm.c that passed load_end down to
> the do_bootm_* commands.  I haven't updated the lib_*/bootm.c at this
> point.
> 
> I think this is useful to help the bootm commands know exactly what memory
> is used and what is freed.  There are situations that I'd like to get
> working with the new code like being able to boot a kernel at 256M and
> have the ramdisk and device tree exist about this 256M base.
> 
> - k
> 
> diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
> index 2ddb191..b36d09e 100644
> --- a/common/cmd_bootm.c
> +++ b/common/cmd_bootm.c
> @@ -90,7 +90,7 @@ extern int do_reset (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]);
>  typedef void boot_os_fn (cmd_tbl_t *cmdtp, int flag,
>  			int argc, char *argv[],
>  			image_header_t *hdr,	/* of image to boot */
> -			int verify);		/* getenv("verify")[0] != 'n' */
> +			int verify, ulong load_end);	/* getenv("verify")[0] != 'n' */
> 
>  extern boot_os_fn do_bootm_linux;
>  static boot_os_fn do_bootm_netbsd;
> @@ -234,36 +234,36 @@ int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
>  #ifdef CONFIG_SILENT_CONSOLE
>  	    fixup_silent_linux();
>  #endif
> -	    do_bootm_linux (cmdtp, flag, argc, argv, hdr, verify);
> +	    do_bootm_linux (cmdtp, flag, argc, argv, hdr, verify, load_end);
>  	    break;

Hi Kumar,

In our development code for the new format we need even more data to be
passed down to do_bootm_* flavors. We are doing this by passing a
pointer to a structure:

-           do_bootm_linux (cmdtp, flag, argc, argv, hdr, verify);
+           do_bootm_linux (cmdtp, flag, argc, argv, &images, verify);


Where images is of type bootm_headers_t, defined like this:

/*
  * Legacy and FIT format headers used by do_bootm() and do_bootm_<os>()
  * routines.
  */
typedef struct bootm_headers {
        /*
         * Legacy os image header, if it is a multi component image
         * then get_ramdisk() and get_fdt() will attempt to get
         * data from second and third component accordingly.
         */
        image_header_t  *legacy_hdr_os;
        ulong           legacy_hdr_valid;

#if defined(CONFIG_FIT)
        void            *fit_hdr_os;    /* os FIT image header */
        char            *fit_uname_os;  /* os subimage node unit name */

        void            *fit_hdr_rd;    /* init ramdisk FIT img header */
        char            *fit_uname_rd;  /* init ramdisk node unit name */

#if defined(CONFIG_PPC)
        void            *fit_hdr_fdt;   /* FDT blob FIT image header */
        char            *fit_uname_fdt; /* FDT blob node unit name */
#endif
#endif
} bootm_headers_t;


Perhaps it would be a good idea to add your load_end to bootm_headers?
In any case, let's get back to this once the above mentioned code is 
posted to the ML.


Regards,
Bartlomiej




More information about the U-Boot mailing list