On Tue, 2009-09-01 at 19:58 +0900, Lee HongWoo wrote: > Hi ~ > > This is a boot flow of linux kernel under the arch/powerpc/kernel and > I'm using pasemi cpu. > > __start (in head_64.S) > ---> __start_initialization_multiplatform (in head_64.S) > ---> __boot_from_prom (in head_64.S) > ---> prom_init ( in prom_init.c) > ---> __start ??? > > And I don't understand where __start is called, because I can find > __start only in head_64.S. > If it calls __start in head_64.S, it's a recursive call. > > Can anybody explain about this precedure ?
It calls __start() with different arguments. They are checked in __start_initialization_multiplatform: 308 /* 309 * Are we booted from a PROM Of-type client-interface ? 310 */ 311 cmpldi cr0,r5,0 312 beq 1f 313 b .__boot_from_prom /* yes -> prom */ The first time through __start we are running under OF. The kernel can detect this based on the arguments it is passed (r5 in particular). prom_init() deals with talking to OF and flattening the OF device tree. We then call back into __start but this time r5 is 0: 2555 __start(hdr, kbase, 0); So the second time through we don't call into prom_init(), instead the kernel continues using the flattened device tree. The startup is structured this way so that the kernel can boot either from OF (in which case we call prom_init()), or directly with a flattened device tree. cheers
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev