[ARM] AArch64 Startup Code

OP #6289651
Lesenswert?

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.
Beitrag #6289748 wurde von einem Moderator gelöscht.
Beitrag #6289764 wurde von einem Moderator gelöscht.
OP #6290979
Lesenswert?

Hab den Code für AArch64 umgeschrieben.

Kann bitte mal wer kurz darüber schauen, ob das funktionieren würde?
Der Compiler meckert jedenfalls nicht mehr:

1
#include <asm.h>
2

3
IMPORT_C(kern_main)
4

5
.text
6

7
ENTRY(_start)
8
    mrs x0, MPIDR_EL1
9
    and x0, x0, #0x3
10
    cmp x0, #0
11
    beq L1
12
L0:
13
    wfe
14
    b L0
15
L1:
16
    ldr x0, =_kern_stack_e
17
    mov sp, x0
18
    b kern_main
19
L2:
20
    wfe
21
    b L2
22

23
.end

Kann es leider noch nicht testen...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren