[U-Boot] [PATCH 3/3] MIPS: bootm.c: add support for 'prep' and 'go' subcommands

Gabor Juhos juhosg at openwrt.org
Mon Jan 7 21:31:32 CET 2013


2013.01.07. 20:44 keltezéssel, Gabor Juhos írta:
> 2013.01.07. 18:15 keltezéssel, Daniel Schwierzeck írta:
>> 2013/1/7 Gabor Juhos <juhosg at openwrt.org>:
>>> The bootm command supports subcommands since long time
>>> however those subcommands are not yet usable on MIPS.
>>>
>>> The patch is based on the ARM implementation, and it adds
>>> support for the 'prep' and 'go' subcommands only.
>>>
>>> Signed-off-by: Gabor Juhos <juhosg at openwrt.org>
>>> Cc: Daniel Schwierzeck <daniel.schwierzeck at googlemail.com>
>>> ---
>>>  arch/mips/lib/bootm.c |   15 +++++++++++++--
>>>  1 file changed, 13 insertions(+), 2 deletions(-)
>>>
>>
>> thanks but how did you test it?
> 
> I have tested it with the following commands:
> 
> U-Boot> setenv serverip 192.168.1.254; setenv ipaddr 192.168.1.1
> U-Boot> tftp 0xa0800000 openwrt-ath79-uImage-initramfs-lzma.bin
> dup 1 speed 100
> Using eth0 device
> TFTP from server 192.168.1.254; our IP address is 192.168.1.1
> Filename 'openwrt-ath79-uImage-initramfs-lzma.bin'.
> Load address: 0xa0800000
> Loading: #################################################################
>          #################################################################
>          #################################################################
>          #################################################################
>          #################################################################
>          #################################################################
>          #################################################################
>          ###########################################################
> done
> Bytes transferred = 2627082 (28160a hex)
> U-Boot> bootm loados
> Trying to execute a command out of order
> bootm - boot application image from memory
> 
> U-Boot> bootm start 0xa0800000
> ## Booting kernel from Legacy Image at a0800000 ...
>    Image Name:   MIPS OpenWrt Linux-3.8-rc2
>    Created:      2013-01-07  19:19:26 UTC
>    Image Type:   MIPS Linux Kernel Image (lzma compressed)
>    Data Size:    2627018 Bytes = 2.5 MiB
>    Load Address: 80100000
>    Entry Point:  80100000
>    Verifying Checksum ... OK
> U-Boot> bootm loados
>    Uncompressing Kernel Image ... OK
> U-Boot> bootm prep
> U-Boot> bootm go
> 
> Starting kernel ...
> 
> Linux version 3.8.0-rc2 (juhosg at mag2) (gcc version 4.6.4 20121106 (prerelease)
> (Linaro GCC 4.6-2012.11) ) #24 Mon Jan 7 20:19:20 CET 2013
> bootconsole [early0] enabled
> CPU revision is: 00019374 (MIPS 24Kc)
> ...
> 
>> I needed to fix a relocation problem in cmd_bootm.c [1] to make it
>> properly working.
> 
> Hm, I think that I know why I did not notice that. I have tested it on a board
> which uses an old U-Boot version as the primary bootloader. Because lots of
> features are disabled in that I have compiled a more usable version and I'm
> using that as a 2nd stage loader.  It is loaded to address 0x80060000 by the
> original bootloader. The Linux kernel uncompressed to 0x80100000 so it did not
> clobber the strings.

I have changed the load address of the kernel and it indeed fails:

U-Boot> setenv serverip 192.168.1.254; setenv ipaddr 192.168.1.1
U-Boot> tftp 0xa0800000 openwrt-ath79-uImage-initramfs-lzma.bin
dup 1 speed 100
Using eth0 device
TFTP from server 192.168.1.254; our IP address is 192.168.1.1
Filename 'openwrt-ath79-uImage-initramfs-lzma.bin'.
Load address: 0xa0800000
Loading: #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         #################################################################
         ###########################################################
done
Bytes transferred = 2627551 (2817df hex)
U-Boot> bootm start 0xa0800000
## Booting kernel from Legacy Image at a0800000 ...
   Image Name:   MIPS OpenWrt Linux-3.8-rc2
   Created:      2013-01-07  19:54:05 UTC
   Image Type:   MIPS Linux Kernel Image (lzma compressed)
   Data Size:    2627487 Bytes = 2.5 MiB
   Load Address: 80060000
   Entry Point:  80060000
   Verifying Checksum ... OK
U-Boot> bootm loados
   Uncompressing Kernel Image ... OK
U-Boot> bootm prep
bootm - boot application image from memory

Usage:
bootm [addr [arg ...]]
    - boot application image stored in memory
        passing arguments 'arg ...'; when booting a Linux kernel,
        'arg' can be the address of an initrd image
        When booting a Linux kernel which requires a flat device-tree
        a third argument is required which is the address of the
        device-tree blob. To boot that kernel without an initrd image,
        use a '-' for the second argument. If you do not pass a third
        a bd_info struct will be passed instead

Sub-commands to do part of the bootm sequence.  The sub-commands must be
issued in the order below (it's ok to not issue all sub-commands):
        start [addr [arg ...]]
        loados  - load OS image
        fdt     - relocate flat device tree
        cmdline - OS specific command line processing/setup
        bdt     - OS specific bd_t processing
        prep    - OS specific prep before relocation or go
        go      - start OS
U-Boot>

With your relocation patch the problem is gone.

-Gabor


More information about the U-Boot mailing list