【发布时间】:2011-06-05 10:45:09
【问题描述】:
我有一个 x86、linux 机器。在阅读有关 ARM 的各种信息时,我很好奇,现在我正在考虑花一些时间学习这种架构。到目前为止,我的目标是能够为 ARM 编写简单的汇编程序,使用一些汇编程序为 ARM 生成目标代码,并能够在模拟的 ARM 机器上运行该程序。首先,我下载了 ARM 架构参考手册。根据here 的信息,Linux 不支持 Keil,因此 请帮助我使用我需要的工具(汇编器、仿真器)。
【问题讨论】:
我有一个 x86、linux 机器。在阅读有关 ARM 的各种信息时,我很好奇,现在我正在考虑花一些时间学习这种架构。到目前为止,我的目标是能够为 ARM 编写简单的汇编程序,使用一些汇编程序为 ARM 生成目标代码,并能够在模拟的 ARM 机器上运行该程序。首先,我下载了 ARM 架构参考手册。根据here 的信息,Linux 不支持 Keil,因此 请帮助我使用我需要的工具(汇编器、仿真器)。
【问题讨论】:
基本上,您需要两件事 - 工具链和模拟器。
工具链包含为 ARM 架构构建应用程序并在目标(在您的情况下为模拟器)上运行它所需的一切。一个好的起点是buildroot 或ELDK。这些将为您提供完整的跨 Linux 解决方案。如果您只想编译而不使用 Linux 安装(以及随附的 rootfs),则只能使用交叉编译器。一个免费的是CodeSourcery,但也有一些其他的(大多数基于 GCC)。
模拟器是您运行代码的地方,其行为类似于 ARM CPU。一个好的起点是QEMU。
跨项目的学习曲线相当陡峭,并且需要大量在线搜索才能完成任务。整个过程很少有详细的分步指南,但工作的各个部分都有很多指南。
【讨论】:
有可用于 ARM 目标的 GCC 交叉编译器;如果您想要一个预构建的,Code Sourcery 是一种相当常见的。
在仿真环境方面,qemu 在仿真 ARM 方面做得很好。 Google 的 Android 模拟器基于 eqmu(他们的“NDK”是预建 ARM 交叉编译器的另一个来源)。
【讨论】:
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
【讨论】: