[ARM] AArch64 Startup Code

OP #6289651
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
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...
OP
So, habe es geschafft.

Falls es jemand interessiert...
Hab mein jetziges Ergebnis in ein ZIP File gepackt.

Macht eigentlich nicht viel.
Gibt nur ein paar Strings auf der UART aus und resettet das System wenn 
eine bestimmter Buchstabe über die Schnittstelle empfangen wird.
Angehängte Dateien:

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.