[PATCH 07/14] bootm: handle initrds inline
Jean-Christophe PLAGNIOL-VILLARD
plagnioj at jcrosoft.com
Tue Dec 6 10:08:20 EST 2011
On 09:02 Mon 28 Nov , Sascha Hauer wrote:
> Signed-off-by: Sascha Hauer <s.hauer at pengutronix.de>
> ---
> commands/bootm.c | 78 +++++++++++++++++++----------------------------------
> 1 files changed, 28 insertions(+), 50 deletions(-)
>
> diff --git a/commands/bootm.c b/commands/bootm.c
> index 823d387..17139f7 100644
> --- a/commands/bootm.c
> +++ b/commands/bootm.c
> @@ -141,55 +141,6 @@ static struct image_handle *get_fake_image_handle(struct image_data *data, int n
> return handle;
> }
>
> -static int initrd_handler_parse_options(struct image_data *data, int opt,
> - char *optarg)
> -{
> - uint32_t initrd_start;
> -
> - switch(opt) {
> - case 'L':
> - if (!data->initrd) {
> - eprintf("Warning -L ingnored. Specify the initrd first\n");
> - break;
> - }
> - initrd_start = simple_strtoul(optarg, NULL, 0);
> - printf("initrd_start=0x%x\n", initrd_start);
> - data->initrd->header.ih_load = cpu_to_uimage(initrd_start);
> - break;
> - case 'r':
> - printf("use initrd %s\n", optarg);
> - /* check for multi image @<num> */
> - if (optarg[0] == '@') {
> - int num = simple_strtol(optarg + 1, NULL, 0);
> -
> - data->initrd = get_fake_image_handle(data, num);
> - } else {
> - data->initrd = map_image(optarg, data->verify);
> - }
> - if (!data->initrd)
> - return -1;
> - break;
> - default:
> - return 1;
> - }
> -
> - return 0;
> -}
> -
> -static struct image_handler initrd_handler = {
> - .cmdline_options = "r:L:",
> - .cmdline_parse = initrd_handler_parse_options,
> - .help_string = " -r <initrd> specify an initrd image\n"
> - " -L <load addr> specify initrd load address",
> -};
> -
> -static int initrd_register_image_handler(void)
> -{
> - return register_image_handler(&initrd_handler);
> -}
> -
> -late_initcall(initrd_register_image_handler);
> -
> static int handler_parse_options(struct image_data *data, int opt, char *optarg)
> {
> struct image_handler *handler;
> @@ -216,13 +167,14 @@ static int do_bootm(struct command *cmdtp, int argc, char *argv[])
> struct image_handle *os_handle, *initrd_handle = NULL;
> struct image_handler *handler;
> struct image_data data;
> + u32 initrd_start;
> char options[53]; /* worst case: whole alphabet with colons */
>
> memset(&data, 0, sizeof(struct image_data));
> data.verify = 1;
>
> /* Collect options from registered handlers */
> - strcpy(options, "nh");
> + strcpy(options, "nhr:L:");
> list_for_each_entry(handler, &handler_list, list) {
> if (handler->cmdline_options)
> strcat(options, handler->cmdline_options);
> @@ -242,6 +194,28 @@ static int do_bootm(struct command *cmdtp, int argc, char *argv[])
> }
>
> return 0;
> + case 'L':
> + if (!data.initrd) {
> + eprintf("Warning -L ingnored. Specify the initrd first\n");
> + break;
> + }
> + initrd_start = simple_strtoul(optarg, NULL, 0);
> + printf("initrd_start=0x%x\n", initrd_start);
> + data.initrd->header.ih_load = cpu_to_uimage(initrd_start);
> + break;
> + case 'r':
> + printf("use initrd %s\n", optarg);
> + /* check for multi image @<num> */
> + if (optarg[0] == '@') {
> + int num = simple_strtol(optarg + 1, NULL, 0);
> +
> + data.initrd = get_fake_image_handle(&data, num);
this can not work
get_fake_image_handle expect the uImage is mapped
attached patch fix it
Best Regards,
J.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-bootm-fix-initrd-multi-image-support.patch
Type: text/x-diff
Size: 1865 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/barebox/attachments/20111206/b2b9d818/attachment.bin>
More information about the barebox
mailing list