У меня есть x86, linux box. читая некоторую разнообразную информацию о ARM, мне стало любопытно, и теперь я подумываю потратить некоторое время на изучение этой архитектуры. Моя цель на данный момент состоит в том, чтобы иметь возможность писать тривиальные программы сборки для ARM, использовать некоторый ассемблер для генерации целевого кода для ARM и иметь возможность запускать эту программу на эмулируемой машине ARM. Для начала я загрузил справочное руководство по архитектуре ARM. Согласно информации здесь, Keil не поддерживается в Linux, следовательно пожалуйста, помогите мне с инструментами (ассемблером, эмулятором), которые мне понадобятся.
Инструменты, необходимые для изучения ARM на платформе linux x86
Ответ 1
В принципе, вам нужны две вещи - инструментальная цепочка и эмулятор.
Инструментальная цепочка состоит из всего, что вам нужно для создания приложений для архитектуры ARM и запускать ее на целевой (в вашем случае, эмуляторе). Хорошим местом для начала было бы buildroot или ELDK. Они предоставят вам полное решение для кросс-Linux. Если вы хотите только компилировать, не работая с установкой Linux (и сопутствующими rootfs), вы можете использовать только кросс-компилятор. Один бесплатный CodeSourcery, но есть и другие (большинство из них основано на GCC).
Эмулятор - это место, где вы будете запускать код, который будет вести себя как центральный процессор ARM. Хорошее место для начала - QEMU.
Кросс-проекты имеют довольно крутую кривую обучения и требуют многого поиска в Интернете, чтобы все было сделано. Редко есть подробные пошаговые руководства для всего процесса, но есть много руководств для различных частей работы.
Ответ 2
Cossourcery - это в основном набор инструментов для GCC. Конечно, вы можете создать свой собственный gcc или другие (devkitarm, yagarto, emdebian и т.д.), но CodeSource является передовым и просто работает. llvm также является хорошим компилятором, нет необходимости в кросс-компиляции, он поддерживает несколько целей с одной установкой. Для обоих я использую binutils (часть кода источников, я создаю один для использования с llvm). становится все труднее получить сборку с newlib, если я правильно помню, эти инструкции работают http://www.cowlark.com/2009-07-04-building-gcc/. Newlib очень легко портировать на любую цель.
Для создания Linux на основе рук и запуска, который определенно идет с QEMU. В GDB встроен эмулятор (эмулятор ARM). Все зависит от того, что вы после.
Ответ 3
Существуют кросс-компиляторы GCC для целей ARM; Код Sourcery является довольно распространенным, если вы хотите, чтобы он был предварительно подготовлен.
Что касается среды эмуляции, qemu хорошо справляется с эмуляцией ARM. Эмулятор Google Android основан на eqmu (и их "NDK" - еще один источник встроенного кросс-компилятора ARM).
Ответ 4
Простой "Hello world" в ARM64 на Ubuntu x86_64
sudo apt install gcc-aarch64-linux-gnu
#!/usr/bin/env bash
F='test'
cat <<EOT > $F.s
.text
.globl main
main:
mov x8, #64
mov x0, #1
adr x1, msg
mov x2, 13
svc #0
ret
msg:
.ascii "hello world\n"
EOT
aarch64-linux-gnu-gcc -static -c $F.s
aarch64-linux-gnu-gcc -static -o $F $F.o
./$F
Выход:
hello world