minos/arch/arm/boot.S
auser 8c44d12357 minos M1: minimal multi-arch kernel (x86 + RISC-V + ARM/Zynq)
Boots under QEMU on all three ISAs from one clang build:
- shared C core (kmain, console) calls a small per-arch contract (arch.h)
- per-arch asm entry + trap/vector table + UART driver
- parallel Makefile (make -j), 'make run-<arch>', 'make sizes'
M1 = boot, UART up, trap vector installed, banner from kmain().
2026-09-25 00:41:24 +03:00

29 lines
641 B
ArmAsm

@ boot.S (ARM, Cortex-A9 / ARMv7-A) — minimal entry for the Zynq PS.
@ QEMU 'xilinx-zynq-a9' enters at the image load address. We set a stack,
@ clear .bss, and call kmain(). Irreducible asm part for ARM.
.section .text.boot
.global _start
_start:
@ Park secondary CPUs: only CPU0 continues.
mrc p15, 0, r1, c0, c0, 5 @ read MPIDR
and r1, r1, #3 @ CPU id (affinity level 0)
cmp r1, #0
bne park
ldr sp, =_stack_top @ set up the stack
@ Zero .bss: [__bss_start, __bss_end)
ldr r0, =__bss_start
ldr r1, =__bss_end
mov r2, #0
1: cmp r0, r1
bge 2f
str r2, [r0], #4
b 1b
2:
bl kmain
park:
wfi
b park