我有一台x86的Linux电脑。在阅读有关ARM的各种信息时,我感到好奇,现在我考虑花一些时间学习这种架构。 我目前的目标是能够编写ARM的简单汇编程序,使用一些汇编器生成ARM目标代码,并能在模拟的ARM机器上运行该程序。 为了开始学习,我已经下载了ARM体系结构参考手册。根据这里的信息,Keil不支持Linux,因此请帮我推荐一些必要的工具(汇编器、模拟器)。
基本上,你需要两个东西 - 工具链和模拟器。
工具链包含了你需要构建 ARM 架构应用程序并在目标设备(在你的情况下是模拟器)上运行所需的所有内容。一个好的起点可能是 buildroot 或 ELDK。它们将为你提供一个完整的跨 Linux 解决方案。如果你只想编译,而不是使用 Linux 安装(及其相应的 rootfs),你可以只使用交叉编译器。其中一个免费的是CodeSourcery,但还有其他一些(大多数基于 GCC)。
模拟器是你将运行代码的地方,它会像 ARM CPU 一样运行。一个很好的起点是QEMU。
跨项目具有相当陡峭的学习曲线,并需要在线搜索很多信息才能完成任务。很少有针对整个过程的详细的逐步指南,但有许多针对各个工作部分的指南。
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
有适用于 ARM 目标的 GCC 交叉编译器可用;如果您想要一个预先构建的,则 Code Sourcery 是相当常见的一个。
至于模拟环境,qemu 在模拟 ARM 方面做得很好。Google 的 Android 模拟器基于 qeum(他们的“NDK”是预构建 ARM 交叉编译器的另一个来源)。