小智 5
这是一项艰巨但可行的任务。
这取决于您正在编译的 ARM 系列。在许多系统上,您会发现 Cortex-A(armv7-a 或更高版本)或 ARM11 (armv6) 处理器运行“迷你 Linux 发行版”,许多 POS(销售点)设备就是这种情况。在这种情况下,您的目标可以是以下之一:
其中hf代表hard-float,意思是CPU有一个FPU(浮点单元),所有Cortex-A都支持这一点,但也取决于底层OS。了解嵌入式 Linux 上 glibc 的版本也非常重要,因为如果编译器和操作系统之间的版本不同,可能会出现意外的行为。
如果您针对没有 MMU(内存管理单元)的 ARM 处理器(例如 Cortex-R 或 Cortex-M 系列)进行编译,并且因此不支持 Linux(仅像 FreeRTOS 这样的微内核),那么您的目标将是(也称为裸机)金属):
ARM 现在分发 GCC 的二进制文件:
以前是利纳罗。然而,如果您需要的话,他们会为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。