// armv7 mode // To keep this in the first portion of the binary. .section ".boot" //.org 0x8000 // Make _start global. .globl _start // 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 _start: // Shut off extra cores mrc p15, 0, r5, c0, c0, 5 and r5, r5, #3 cmp r5, #0 bne halt // 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 // halt halt: wfe b halt