Инструменты, необходимые для изучения ARM на платформе linux x86

У меня есть x86, linux box. читая некоторую разнообразную информацию о ARM, мне стало любопытно, и теперь я подумываю потратить некоторое время на изучение этой архитектуры. Моя цель на данный момент состоит в том, чтобы иметь возможность писать тривиальные программы сборки для ARM, использовать некоторый ассемблер для генерации целевого кода для ARM и иметь возможность запускать эту программу на эмулируемой машине ARM. Для начала я загрузил справочное руководство по архитектуре ARM. Согласно информации здесь, Keil не поддерживается в Linux, следовательно пожалуйста, помогите мне с инструментами (ассемблером, эмулятором), которые мне понадобятся.

Ответ 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