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 |
// 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 |
ldr x5, =_start |
||
mov sp, |
mov sp, x5 |
||
// clear bss |
// clear bss |
||
ldr |
ldr x5, =__bss_start |
||
ldr |
ldr w6, =__bss_size |
||
3: cbz |
3: cbz w6, 4f |
||
str xzr, [ |
str xzr, [x5], #8 |
||
sub |
sub w6, w6, #1 |
||
cbnz |
cbnz w6, 3b |
||
// jump to C code, should not return |
// jump to C code, should not return |