Thread (1 message) 1 message, 1 author, 2009-07-27

Re: image/wrapper script questions

From: Grant Likely <hidden>
Date: 2009-07-27 21:53:01
Also in: linuxppc-dev

(Adding cc:devicetree-discuss)

On Mon, Jul 27, 2009 at 2:15 PM, Eddie Dawydiuk [off-list ref] wrote:
Thanks for the link. Although, I'm not looking for info on optimizing
boot time. Rather I'm looking for information on what the path of least
resistance is to boot a kernel with an initrd being loaded from it's
own partition. To clarify currently I am using a simpleImage.initrd which
is a single image with the flattened device tree, kernel, and initial
ramdisk in a single file. One can simply load this image in RAM(assuming
1 to 1 MMU mapping) and jump into it. Now what I would like to do is to
load a kernel, device tree, and initial ramdisk into RAM at different
locations.
Quick word of warning, if you do split the kernel and .dtb images (which
is a good thing to do for several reasons, and I strongly recommend it),
make sure you do *not* hard code the .dtb image into firmware.  If the
end user isn't able to update the .dtb image as easily as updating the
kernel image, then you are asking for a world of hurt for yourself and
your users.
I'm in the process of coming back up to speed on the low-level boot
details of the powerpc kernel/architecture. It looks like one can
accomplish this by loading R3 with the phys address of the device
tree block, R4 with the phys address of the kernel, and R5 with Null.
It also looks like the kernel, already has several routines which know
about these details(prom_init() and __start()) and I was hoping I could
reuse this code to accomplish this rather than rewriting the bootrom to
handle this. That is I was hoping there is a boot wrapper image that
would allow me to accomplish my goal of creating a single image
containing a kernel and device tree block, and an interface to specify
where the bootrom loads the initial ramdisk in RAM. I'll continue
reading through the docs and code, but if anyone could provide any
pointers on how to do this I would really appreciate it.
It really sounds like you're asking for a new board-specific dtbImage
(which is what dtbImages are designed for).  simpleImage is really just
a dtbImage with the assumption that firmware provides no boot information.

*HOWEVER* dtbImages were really designed for older firmware that cannot
handle the kernel and .dtb images separately.  If you've got control of
the firmware then I strongly recommend *not* relying on the dtbImage
approach of binding the device tree into the kernel image.  You ignore
a lot of the advantages of the device tree model if you do.  In particular
you take on maintenance of a new dtbImage variant in the kernel tree and
loose the ability to build and boot a more or less 'standard' 440 kernel
image.

Honestly, I think you'd be better off adapting your firmware to parse and
boot either a raw vmlinux elf image or a u-boot uImage wrapped image and
pass in the .dtb and initrd pointers.  I predict it will result in far
less confusion for your users (they don't need to know about a particular
'dtbImage.<board>', less maintenance pain for you, and less cursing from
the rest of the powerpc community about an oddball firmware that behaves
differently from everything else (from a boot perspective).

In other words, don't try to adapt the kernel boot to your firmware;
adapt the firmware to an established boot mechanism.

g.

--
Grant Likely, B.Sc., P.Eng.
Secret Lab Technologies Ltd.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help