如何在X86 PC上为arm编译gcc编译器

Ekk*_*kko 5 c c++ gcc arm

我正在使用 zedboard,我知道如果我想为 ARM 设备编译程序,我需要一个在 x86 下运行并为 ARM 编译(交叉编译)的特殊版本的 gcc,我想知道是否可以从x86 上的源代码(将在 ARM 上使用),以及如何配置它,我不知道如何配置它。

小智 5

这是一项艰巨但可行的任务。

这取决于您正在编译的 ARM 系列。在许多系统上,您会发现 Cortex-A(armv7-a 或更高版本)或 ARM11 (armv6) 处理器运行“迷你 Linux 发行版”,许多 POS(销售点)设备就是这种情况。在这种情况下,您的目标可以是以下之一:

  • ARM-Linux-gnueabi
  • ARM-Linux-gnueabihf

其中hf代表hard-float,意思是CPU有一个FPU(浮点单元),所有Cortex-A都支持这一点,但也取决于底层OS。了解嵌入式 Linux 上 glibc 的版本也非常重要,因为如果编译器和操作系统之间的版本不同,可能会出现意外的行为。

如果您针对没有 MMU(内存管理单元)的 ARM 处理器(例如 Cortex-R 或 Cortex-M 系列)进行编译,并且因此不支持 Linux(仅像 FreeRTOS 这样的微内核),那么您的目标将是(也称为裸机)金属):

  • 无臂 eabi

ARM 现在分发 GCC 的二进制文件:

https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads

以前是利纳罗。然而,如果您需要的话,他们会为arm-linu-gnueabi(软浮动)保留GCC 7.x。

https://releases.linaro.org/components/toolchain/binaries/latest-7/

Linaro 还使用了一个称为 ABE 的构建系统,我没有找到太多关于它的文档,但他们用它来配置和构建他们分发的工具链。

如果上述方法都不适合您,您仍然可以构建自己的工具链,对于该任务,我建议使用 crosstool-ng: https://crosstool-ng.github.io/

在 Ubuntu 等 Linux 操作系统下效果最好(您仍然可以尝试使用 Cygwin 在 Windows 上构建它,但可能需要更多时间)。请注意,您不需要在要运行它的机器上编译它,这意味着您可以在 Ubuntu 上编译将在 Windows 上运行的 GCC,这将生成在 ARM 处理器上运行的程序,这称为 Canadian Cross。


Bas*_*tch 2

我建议获取交叉编译器二进制文件。在 Linux 发行版上,它通常已经被打包。

但是,如果您坚持从源代码构建 GCC(但要注意依赖性),请阅读安装 GCC配置 GCC您应该在源代码树之外构建它,并且您想要传递一些特定的--target=选项。我还推荐类似的东西--program-suffix=_my

(我不知道什么--target与您的特定配置和主板相关;您需要找出答案)

请注意,目标不仅是 CPU,还包括操作系统......