2013-02-19 51 views
9

我正在嘗試找出我正在爲開發板設置的工具鏈的gcc選項: Saber-lite基於飛思卡爾的iMX6q四核處理器。freescale iMX6q ARM處理器的gcc選項

現在我知道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. 

是否有其他的選擇,我應該使? 爲什麼工具鏈具有作爲默認選項構建Linux內核/ UBOOT /包以下:

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

謝謝您的幫助

+4

你-mfloat,ABI應符合ABI爲準您的系統上使用。 softfp也使用浮點硬件,但調用約定不同。你可以檢查「readelf -A/bin/ls」(例如)。 「Tag_ABI_VFP_args:VFP寄存器」意味着很難。 – unixsmurf 2013-02-19 22:43:39

+0

非常有用,非常感謝! – nass 2013-02-21 08:50:51

+0

(當然,如果你本身在目標系統上使用系統自帶的GCC,無論是正確的ABI將在編譯器的默認值,可以省略。編譯) – unixsmurf 2013-02-21 11:03:57

回答

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來實現浮點運算。

+2

嘿,請詳細說明一下。爲什麼我應該使用softfp而不是很難?另外-O3,爲了linux內核而過於優化。沒有?我的意思是我冒險做惡夢試圖編譯u-boot,內核和包。沒有?感謝您的其他選項 – nass 2013-02-19 18:29:44

+2

softfp和hard之間的區別在於如何傳遞浮點參數,它取決於您使用的Linux發行版。由於編譯器中的默認值爲softfp,因此您的Linux發行版可能會在整數寄存器中傳遞浮點參數(但是,FP操作仍然可以使用硬件FPU)。如果您只想編譯Linux內核或U-boot,請不要更改編譯器默認值;上述選項用於編譯用戶空間程序。 – 2013-02-19 22:25:11