// armv7 mode // Entry point for the kernel. // r15 -> should begin execution at 0x8000. // r0 -> 0x00000000 // r1 -> 0x00000C42 // r2 -> 0x00000100 - start of ATAGS // preserve these registers as argument for kernel_main .globl _boot // make entry point label global _boot: // Shut off extra cores mrc p15, 0, r5, c0, c0, 5 and r5, r5, #3 cmp r5, #0 beq proceed // this is a kind of blef - races can theoretically still occur // when the main core overwrites this part of memory wfe proceed: // go to system mode cps #0b11111 isb // Setup the stack. // It shall be directly below our kernel image ldr r5, =__start mov sp, r5 // Call kernel_main ldr r3, =kernel_main bx r3