用于freescale iMX6q ARM处理器的gcc选项

nas*_*ass 9 gcc arm toolchain

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

现在我知道iMX6基本上是一个cortex-a9处理器,它有协处理器vfpv3和霓虹灯,还有矢量图形,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.
Run Code Online (Sandbox Code Playgroud)

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

-march= armv7-a -mfpu= vfpv3 -mfloat-abi=softfp
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助

Mar*_*han 6

使用-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而不是硬?另外-O3,对于linux内核来说太过于极具侵略性的优化.没有?我的意思是我冒噩梦尝试编译u-boot,内核和软件包.没有?谢谢你的其他选择 (2认同)
  • softfp和hard之间的区别在于浮点参数的传递方式,它取决于您使用的Linux发行版.由于编译器中的默认值是softfp,因此Linux发行版可能会在整数寄存器中传递浮点参数(但是,它仍然可以使用硬件FPU进行FP操作).如果您只想编译Linux内核或U-boot,请不要更改编译器默认值; 上面的选项用于编译用户空间程序. (2认同)