kernel course no. 1

2 messages, 2 authors, 2001-08-30 · open the first message on its own page

kernel course no. 1

From: Jure Menart <hidden>
Date: 2001-08-30 15:09:37

Hello,
I am checking kernel source from penguinppc.org (development tree), and try to
boot it... but, when I checked code in head_4xx.h I saw that code from
'_start' doesn't jump to 'start_here' because of 'strange coding' (sorry, but
it really seems strange to me ;-):

	li	r4,MSR_KERNEL
	lis	r3,start_kernel@h
	ori	r3,r3,start_kernel@l
	mtspr	SRR0,r3
	mtspr	SRR1,r4
	rfi /* enable MMU and jump to start_kernel */

In this part it stops... why don't we just use 'bl start_here'? I tried and it
works, but seems strange why would it be so complicated without a reason. Is
there a reason? :-)

Next thing I would like to know is in 'start_here' at the end... it jumps to
function (?) named '2f'. I can't find what is this '2f' (with other words - I
can't figure out, where code continues)?

OK, just one more thing... is there any 'roadmap' or some other kind of
documentation that would describe this early stage of kernel booting? (like at
first it is '_start', which do this and this and then jumps to 'start_here'
which does initizalization of... etc etc).

That would be it, thanks for answeres in advance...
Jure


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/

Re: kernel course no. 1

From: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Date: 2001-08-30 15:29:04

Hello,
I am checking kernel source from penguinppc.org (development tree), and
try to
boot it... but, when I checked code in head_4xx.h I saw that code from
'_start' doesn't jump to 'start_here' because of 'strange coding' (sorry, but
it really seems strange to me ;-):

li	r4,MSR_KERNEL
lis	r3,start_kernel@h
ori	r3,r3,start_kernel@l
mtspr	SRR0,r3
mtspr	SRR1,r4
rfi /* enable MMU and jump to start_kernel */

In this part it stops... why don't we just use 'bl start_here'? I tried
and it
works, but seems strange why would it be so complicated without a reason. Is
there a reason? :-)
Yes, and a big one ! Normally, at that point, you are running with MMU off,
you need to re-enable it before entering the kernel, that's what the "rfi"
does for you when the proper value is set into SRR1.
Next thing I would like to know is in 'start_here' at the end... it jumps to
function (?) named '2f'. I can't find what is this '2f' (with other words - I
can't figure out, where code continues)?
At this point, it disables the MMU. That is it uses the same trick as
above to get the address of the label "2". The writing xb and xf when "x"
is a number means respectively "previous label number x" and "next label
number x". In your case, it loads SRR0 with the address of the label "2:"
just below, SRR1 with an MSR value in which the MMU translations are off,
and then do the rfi.
OK, just one more thing... is there any 'roadmap' or some other kind of
documentation that would describe this early stage of kernel booting?
(like at
first it is '_start', which do this and this and then jumps to 'start_here'
which does initizalization of... etc etc).

That would be it, thanks for answeres in advance...
Jure


** Sent via the linuxppc-dev mail list. See http://lists.linuxppc.org/
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help