Сборка GNU на голом металле для модели основания ARMv8

ARM выпустила платформу для эмуляции ARMv8 Foundation Model. Я настроил среду в соответствии с руководством на веб-сайте linaro. Он может поддерживать эмуляцию с нуля, потому что я попробовал пример двоичного файла hello.axf с

$ ./Foundation_v8pkg/Foundation_v8 --image ./Foundation_v8pkg/example/hello.axf
terminal_0: Listening for serial connection on port 5000
terminal_1: Listening for serial connection on port 5001
terminal_2: Listening for serial connection on port 5002
terminal_3: Listening for serial connection on port 5003
Simulation is started
Hello, 64-bit world!
$

Обычно он выходит из командной строки. Я хочу написать минимальную программу сборки, которая может работать на голом металле, но я не знаю, как это сделать. Поэтому я разобрал hello.axf, используя набор инструментов linaro armv8, чтобы найти некоторые подсказки:

aarch64-linux-gnu-objdump -S hello.axf

и получить подпрограмму выхода:

1663 00000000800017c8 <_sys_exit>:
1664     800017c8:   d10043ff        sub     sp, sp, #0x10
1665     800017cc:   d28004c1        movz    x1, #0x26
1666     800017d0:   f2a00041        movk    x1, #0x2, lsl #16
1667     800017d4:   f90003e1        str     x1, [sp]
1668     800017d8:   93407c00        sxtw    x0, w0
1669     800017dc:   f90007e0        str     x0, [sp,#8]
1670     800017e0:   910003e1        mov     x1, sp
1671     800017e4:   52800300        movz    w0, #0x18
1672     800017e8:   d45e0000        hlt     #0xf000
1673     800017ec:   14000000        b       800017ec <_sys_exit+0x24>

Я пишу сборочный файл test.s, который включает только выходной фрагмент:

.section .text, "ax"
.global _start
_start:
sub     sp, sp, #0x10                                                                                                  
movz    x1, #0x26
movk    x1, #0x2, lsl #16
str     x1, [sp]
sxtw    x0, w0
str     x0, [sp,#8]
mov     x1, sp
movz    w0, #0x18
hlt     #0xf000
b       .  

И построить это с:

aarch64-linux-gnu-as test.s -o a.out
aarch64-linux-gnu-ld -Ttext=0x80000000 a.out -o test

Запустите это с:

$ ./Foundation_v8pkg/Foundation_v8 --image test
terminal_0: Listening for serial connection on port 5000
terminal_1: Listening for serial connection on port 5001
terminal_2: Listening for serial connection on port 5002
terminal_3: Listening for serial connection on port 5003
Simulation is started

Эмулятор работает, но он не может нормально выйти из командной строки, как пример hello.axf выше. Извините за подробное описание. Мой вопрос заключается в том, как мне написать минимальную программу сборки на "голое железо" на фундаментальной модели ARMv8.

0 ответов

Другие вопросы по тегам