Hallo Community!
Möchte mich gerne in die AArch64 Architektur einlernen. Als
Entwicklungsplattform möchte ich gerne das PINE64 ROCK64 (Cortex-A53)
Board verwenden.
Mein derzeitiges Zwischenziel ist einfach nur ein simples "Hello World"
Programm. Also einen String auf der seriellen Schnittstelle ausgeben.
Als Loader für die (Bare-Metal) Anwendung verwende ich U-Boot. Habe
schon erfolgreich für die ARMv7 Architektur (genauer Cortex-A9)
Anwendungen geschrieben. Aber auch nur derzeit simple Testprogramme.
Als Startupcode für den Cortex-A9 habe ich folgendes verwendet:
1 | #include <asm.h>
|
2 |
|
3 | IMPORT_C(kern_main)
|
4 |
|
5 | .text
|
6 |
|
7 | ENTRY(_start)
|
8 | /* Make sure CPU0 executes main only; wait forever for other CPU's */
|
9 | mrc p15, 0, r0, c0, c0, 5
|
10 | and r0, r0, #0xF
|
11 | cmp r0, #0
|
12 | beq L1
|
13 | L0:
|
14 | wfe
|
15 | b L0
|
16 | L1:
|
17 | ldr r0, =_kern_stack_s
|
18 | mov sp, r0
|
19 | b kern_main
|
20 | L2:
|
21 | /* Schould never be reached; wait forever */
|
22 | wfe
|
23 | b L2
|
24 |
|
25 | .end
|
Dieser Code ist recht simpel. Er macht eigentlich nur, dass er beim
Coprozessor die Prozessor ID ausliest und verhindert das andere Kerne
außer CPU0 kern_main ausführt. Danach wird lediglich nur ein Stack im
aktuellen Modus gesetzt und später auf kern_main gesprungen.
Die Frage was ich jetzt habe, wie ist dieser (simple) Code anzupassen,
dass er auch auf einen Cortex-A53 läuft? Hat dazu wer ein Beispiel? Kann
auch gerne ausführlicher sein.