Re: F19: uImage load addresses with unified kernel

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Brendan,

On Wed, Mar 27, 2013 at 11:34 AM, Brendan Conoboy <blc@xxxxxxxxxx> wrote:
> On 03/26/2013 05:26 PM, Graeme Russ wrote:
>>
>> I just realised I got this a bit wrong - mkimage make a U-Boot image
>> with a header which contains the kernel load address. Not sure what
>> mkimage does to the Linux kernel binary itself
>
>
> The kernel binary is left intact.  Only a 64 byte header is prefixed.
>
>
>>> That would make more sense (This was my understanding as well, actually),
>>> but we're still having an issue: The uImage header, stored in RAM, has a
>>> load address that is wrong for some platforms.  Unless we're going to
>>> change
>>> that with an in-uboot memory editor, bootm will honor the address in that
>>> header and the boot will fail.
>>
>>
>> I think this is worth raising on the U-Boot ML
>
>
> Perhaps so.  Meanwhile, your message did get me thinking.  Here is a
> hypothetical mkimage command line:
>
> mkimage -A arm -O linux -T kernel -C none -a 11223344 -e 55667788  -n
> VERSION -d vmlinuz-3.9.0-0.rc3.git1.4.fc19.armv7hl uKernel
>
> Running hexdump on the kernel shows the uboot header:
>
> hexdump -C < uKernel | head
> 00000000  27 05 19 56 97 0b b9 5e  51 52 3c 77 00 47 e8 f0
> |'..V...^QR<w.G..|
> 00000010  11 22 33 44 55 66 77 88  f2 d9 f3 9c 05 02 02 00
> |."3DUfw.........|
> 00000020  56 45 52 53 49 4f 4e 00  00 00 00 00 00 00 00 00
> |VERSION.........|
> 00000030  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00
> |................|
>
> 17-20: The value from -a
> 21-24: The value from -e (Typically we use the same -a and -e)
> 32-64: The value from -n
>
> We could create a number of uboot headers.  Then after loading the default
> uImage, load a separate uboot header overwriting the first 64 bytes of RAM.

I've had a quick glance at the U-Boot source and I think the newer
'FIT' image may be a better path to follow. In common/image.c you will
find fit_image_get_load() and in common/cmd_bootm.c you will find
bootm_start() and bootm_load_os(). Teasing apart these functions, it
looks like fit_image_get_load() looks for a "load" property
(FIT_LOAD_PROP) in the FDT first, then in the FIT image (if the FDT
returns a NULL load address).

Now you can set properties in the FDT in U-Boot (fdt set <path> <prop> [<val>])

So have a common FIT image with a common FDT and use U-Boot to tweak
the FDT properties such as the kernel load address

Regards,

Graeme
_______________________________________________
arm mailing list
arm@xxxxxxxxxxxxxxxxxxxxxxx
https://admin.fedoraproject.org/mailman/listinfo/arm





[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux ARM (Vger)]     [Linux ARM]     [ARM Kernel]     [Fedora User Discussion]     [Older Fedora Users Discussion]     [Fedora Advisory Board]     [Fedora Security]     [Fedora Maintainers]     [Fedora Devel Java]     [Fedora Legacy]     [Fedora Desktop]     [ATA RAID]     [Fedora Marketing]     [Fedora Mentors]     [Fedora Package Announce]     [Fedora Package Review]     [Fedora Music]     [Fedora Packaging]     [Centos]     [Fedora SELinux]     [Coolkey]     [Yum Users]     [Tux]     [Yosemite News]     [Linux Apps]     [KDE Users]     [Fedora Tools]     [Fedora Art]     [Fedora Docs]     [Asterisk PBX]

Powered by Linux