飞思卡尔 iMX6q ARM 处理器的 gcc 选项

Posted

技术标签:

【中文标题】飞思卡尔 iMX6q ARM 处理器的 gcc 选项【英文标题】:gcc options for a freescale iMX6q ARM processor 【发布时间】:2013-02-04 10:14:48 【问题描述】:

我正在尝试找出我正在为开发板设置的工具链的 gcc 选项: Sabre-lite 基于飞思卡尔的 iMX6q 四核处理器。

现在我知道 iMX6 基本上是一个 cortex-a9 处理器,它有协处理器 vfpv3 和 neon,还有矢量图、2D 甚至 3D 引擎。

但是,发行说明和使用指南文档对如何启用可以在 gcc 中启用的任何选项并不太清楚。

事实上,我可以“玩”的选项如下。

-march= armv7-a                - ok this one is pretty obvious.
-mfpu= vfpv3/neon              - i can use only the vfpv3 co-processor, or both (respectively, depends on option)
-mfloat-abi=softfp/soft/hard   - I guess I can choose hard here, as there is hardware for fp operations
-mcpu=cortex-a9                - is it option even necessary? it is not clear if it just an alias for -march or something else.

还有其他我应该启用的选项吗? 为什么工具链具有构建 linux 内核/uboot/packages 的默认选项:

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp

感谢您的帮助

【问题讨论】:

您的 -mfloat-abi 应该匹配系统上使用的任何 ABI。 softfp 也使用浮点硬件,但调用约定不同。您可以使用“readelf -A /bin/ls”(例如)进行检查。 “Tag_ABI_VFP_args: VFP registers”的意思是hard。 非常有用,非常感谢! (当然,如果您在目标系统上使用系统的本机 gcc 进行本机编译,那么正确的 ABI 将是编译器中的默认值,可以省略。) 我找到了以下相关条目(使用 readelf)。我相信尖叫“softfp”? Tag_FP_arch: VFPv3Tag_ABI_HardFP_use: SP and DP 没有一个尖叫 softfp,但如果没有 Tag_ABI_VFP_args: 在那里,那么这种缺席本身就是如此。 【参考方案1】:

使用-mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp。请注意,默认情况下,编译器不会使用 NEON 对浮点运算进行矢量化,因为 NEON 不支持非正规数。如果您可以通过添加 -ffast-math 开关让 gcc 使用 NEON 进行浮点运算。

【讨论】:

嘿,请详细说明一下。为什么我应该使用softfp而不是hard?另外-O3,对于linux内核来说过于激进的优化。不?我的意思是我冒着噩梦试图编译 u-boot 、内核和软件包的风险。不?感谢您提供其他选项 softfp 和hard 的区别在于浮点参数的传递方式,这取决于您使用的Linux 发行版。由于您的编译器中的默认值是 softfp,因此您的 Linux 发行版可能会在整数寄存器中传递浮点参数(但是,它仍然可以使用硬件 FPU 进行 FP 操作)。如果您只想编译 Linux 内核或 U-boot,请不要更改编译器默认值;以上选项用于编译用户空间程序。【参考方案2】:

我无法回答所有问题,但“--softfp”表示使用 FPU,但与不使用的代码保持兼容性。

Slightly outdated ARM FP document

【讨论】:

以上是关于飞思卡尔 iMX6q ARM 处理器的 gcc 选项的主要内容,如果未能解决你的问题,请参考以下文章

飞思卡尔的IMX6Q芯片好用吗?有核心板+底板的吗?

i.MX6DL飞思卡尔双核安卓核心板主控

产品研发ARM开发板如何选择?飞思卡尔I.MX6Q开发板

基于周立功平台IOT-A62GC开发板开发环境搭建(基于飞思卡尔imx6UL)

飞思卡尔的主要产品

飞思卡尔嵌入式移植fio,出现错误,各位,怎么解决啊,求指点