ARM平台有通用工具链/编译器吗?

ARM平台有通用工具链/编译器吗?

最近我尝试为arm平台制作自己的交叉编译工具链。我注意到使用 GCC 的 autoconf 脚本,我必须传递如下变量:

--with-cpu=cortex-m4 \
--with-fpu=fpv4-sp-d16 \
--with-float=hard \
--with-mode=thumb \

所以看来不同的 ARM 平台应该有不同的工具链/编译器,因为我必须配置 cpu、fpu 等。但后来我发现这些工具链有某种预制的二进制文件。

https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads

我尝试了这个工具链并编译了一个 hello world 程序并在我的目标 ARM 板上尝试了它,然后它显示“分段错误”。好吧,至少不是“无法执行二进制文件:Exec 格式错误”

但我还是想知道,它怎么不起作用?或者它实际上应该起作用吗?

答案1

在构建工具链本身时,您必须配置要支持的功能。您可以构建一个“精简”编译器,仅支持您想要的目标所需的功能。

但您也可以支持 ARM 平台提供的所有功能并获得一个笨拙的编译器。

对于功能本身,不同类型之间应该有所不同:

  • 像这样的优化标志-mcpu不是必需的,它们只是为了优化特定 ARM 处理器的代码
  • fpu另一方面,ARM 内核的功能必须可用于使用 FPU 。
  • float=hard取决于操作系统,而不是处理器:它允许将浮点传递给浮点寄存器中的函数,这可以大大加快速度,因为 ARM 寄存器和浮点寄存器之间的传输速度很慢。但对于链接,系统需要对此达成一致。
  • 对拇指的支持在某种程度上也是可选的。如果核心支持的话,你可以使用其中任何一个,但现在不让编译器选择拇指模式是愚蠢的。

相关内容