在Linux x86平台上学习ARM所需工具

11

我有一台x86的Linux电脑。在阅读有关ARM的各种信息时,我感到好奇,现在我考虑花一些时间学习这种架构。 我目前的目标是能够编写ARM的简单汇编程序,使用一些汇编器生成ARM目标代码,并能在模拟的ARM机器上运行该程序。 为了开始学习,我已经下载了ARM体系结构参考手册。根据这里的信息,Keil不支持Linux,因此请帮我推荐一些必要的工具(汇编器、模拟器)。

3个回答

11

基本上,你需要两个东西 - 工具链和模拟器。

工具链包含了你需要构建 ARM 架构应用程序并在目标设备(在你的情况下是模拟器)上运行所需的所有内容。一个好的起点可能是 buildrootELDK。它们将为你提供一个完整的跨 Linux 解决方案。如果你只想编译,而不是使用 Linux 安装(及其相应的 rootfs),你可以只使用交叉编译器。其中一个免费的是CodeSourcery,但还有其他一些(大多数基于 GCC)。

模拟器是你将运行代码的地方,它会像 ARM CPU 一样运行。一个很好的起点是QEMU

跨项目具有相当陡峭的学习曲线,并需要在线搜索很多信息才能完成任务。很少有针对整个过程的详细的逐步指南,但有许多针对各个工作部分的指南。


谢谢Eli,我已经下载了Buildroot,并按照README部分提到的基本步骤进行了操作。在成功完成make后,我的目标机器(arm)的工具链位于~/buildroot-<version>/output/host/usr/bin下。现在,正如你所提到的,我将尝试在QEMU模拟处理器上运行简单的ARM机器代码。再次感谢您的帮助,请告诉我是否有遗漏的地方。 - Amit

1
在Ubuntu x86_64上使用ARM64编写一个简单的“Hello world”程序:

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

0

有适用于 ARM 目标的 GCC 交叉编译器可用;如果您想要一个预先构建的,则 Code Sourcery 是相当常见的一个。

至于模拟环境,qemu 在模拟 ARM 方面做得很好。Google 的 Android 模拟器基于 qeum(他们的“NDK”是预构建 ARM 交叉编译器的另一个来源)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接