Raspberry Pi Bare Bones: Difference between revisions

Jump to navigation Jump to search
[unchecked revision][unchecked revision]
Content deleted Content added
mNo edit summary
Line 172: Line 172:


.org 0x80000
.org 0x80000
// Entry point for the kernel. Registers are not defined as in AArch32.
// Entry point for the kernel. Registers:
// x0 -> 32 bit pointer to DTB in memory (primary core only) / 0 (secondary cores)
// x1 -> 0
// x2 -> 0
// x3 -> 0
// x4 -> 32 bit kernel entry point, _start location
_start:
_start:
// read cpu id, stop slave cores
mrs x1, mpidr_el1
and x1, x1, #3
cbz x1, 2f
// cpu id > 0, stop
1: wfe
b 1b
2: // cpu id == 0

// set stack before our code
// set stack before our code
ldr x1, =_start
ldr x5, =_start
mov sp, x1
mov sp, x5


// clear bss
// clear bss
ldr x1, =__bss_start
ldr x5, =__bss_start
ldr w2, =__bss_size
ldr w6, =__bss_size
3: cbz w2, 4f
3: cbz w6, 4f
str xzr, [x1], #8
str xzr, [x5], #8
sub w2, w2, #1
sub w6, w6, #1
cbnz w2, 3b
cbnz w6, 3b


// jump to C code, should not return
// jump to C code, should not return