[U-Boot] RFC: 'fastboot boot' uses wrong address when calling bootm

Peter.Chubb at data61.csiro.au Peter.Chubb at data61.csiro.au
Wed Sep 7 11:37:48 CEST 2016


Hi Folks,
   If you set CONFIG_FASTBOOT_BUF_ADDR to anything other than the same
   as $loadaddr then the call to do_bootm() in the fastboot code
   will call do_bootm on a memory region that has nothing to do with
   the image downloaded.  Sometimes the result is a hung system, other
   times the system reboots.

   I'm not sure of the correct fix.  The possibilities are:
       1. Get rid of CONFIG_FASTBOOT_BUF_ADDR and use $loadaddr
       instead.  All the defconfigs that enable fastboot currently set
       CONFIG_FASTBOOT_BUF_ADDR to the same value as CONFIG_LOADADDR at
       present.

       2. memcpy from the downloaded image to $loadaddr if possible.  This
       would allow other payloads than ANDROID boot images, with a bit
       more work. (For example, I'd love to be able to boot ELF images
       using fastboot -- which doesn't work at present, because the
       entry point in the elf header isn't used)

       3. The simplest: call do_bootm() with the address where the
       image has just been downloaded.  The attached patch does this.

What do you think?

Peter C

 drivers/usb/gadget/f_fastboot.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Index: u-boot/drivers/usb/gadget/f_fastboot.c
===================================================================
--- u-boot.orig/drivers/usb/gadget/f_fastboot.c	2016-09-06 14:10:55.791917017 +1000
+++ u-boot/drivers/usb/gadget/f_fastboot.c	2016-09-07 19:20:23.087155135 +1000
@@ -553,7 +553,7 @@ static void do_bootm_on_complete(struct
 
 	puts("Booting kernel..\n");
 
-	sprintf(boot_addr_start, "0x%lx", load_addr);
+	sprintf(boot_addr_start, "0x%lx", CONFIG_FASTBOOT_BUF_ADDR);
 	do_bootm(NULL, 0, 2, bootm_args);
 
 	/* This only happens if image is somehow faulty so we start over */


-- 
Dr Peter Chubb         Tel: +61 2 9490 5852      http://ts.data61.csiro.au/
Trustworthy Systems Group                           Data61 (formerly NICTA)


More information about the U-Boot mailing list