2013-02-19 11 views
9

Sto cercando di capire le opzioni gcc per una toolchain che sto configurando, per la scheda di sviluppo: Sabre-lite che si basa sul processore quad iMX6q di Freescale.Opzioni gcc per un processore ARM iMX6q freescale

Ora so che iMX6 è fondamentalmente un processore cortex-a9 che ha co-processori vfpv3 e neon, e anche grafica vettoriale, motori 2D e persino 3D.

Tuttavia, le note di rilascio e i documenti guida di utilizzo non sono stati troppo chiari su come abilitare le opzioni che possono essere abilitate in gcc.

In effetti le opzioni con cui posso "giocare" sono le seguenti.

-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. 

Ci sono altre opzioni che dovrei abilitare? Perché la toolchain hanno come opzioni predefinite per costruire il kernel linux/uboot/pacchetti seguenti:

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

Grazie per il vostro aiuto

+4

tuo -mfloat-abi dovrebbe corrispondere a seconda di quale ABI è utilizzata nel sistema. softfp utilizza anche hardware in virgola mobile, ma la convenzione di chiamata differisce. È possibile verificare con "readelf -A/bin/ls" (ad esempio). "Tag_ABI_VFP_args: registri VFP" significa difficile. – unixsmurf

+0

estremamente utile, grazie mille! – nass

+0

(Ovviamente, se si sta compilando nativamente sul sistema di destinazione utilizzando il gcc nativo del sistema, qualunque sia l'ABI corretto sarà quello predefinito nel compilatore e può essere omesso.) – unixsmurf

risposta

6

Usa -mthumb -O3 -march=armv7-a -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=neon -mvectorize-with-neon-quad -mfloat-abi=softfp. Si noti che, per impostazione predefinita, il compilatore non vettorizza il funzionamento in virgola mobile utilizzando NEON perché NEON non supporta i numeri denormali. Se stai bene con una perdita di precisione, puoi fare in modo che gcc usi NEON per virgola mobile aggiungendo lo switch -ffast-math.

+2

hey, per favore, elabora un po 'di più. Perché dovrei usare softfp e non è difficile? Anche -O3, è l'ottimizzazione troppo aggressiva per il gusto del kernel di Linux. no? Voglio dire, rischio di avere incubi che cercano di compilare u-boot, kernel e pacchetti. no? grazie per il resto delle opzioni – nass

+2

La differenza tra softfp e hard è il modo in cui vengono passati i parametri in virgola mobile e dipende dalla distribuzione Linux che si utilizza. Poiché il valore predefinito nel compilatore è softfp, è probabile che la distribuzione Linux passi i parametri in virgola mobile nei registri interi (tuttavia, può ancora utilizzare FPU hardware per le operazioni FP). Se vuoi compilare solo il kernel di Linux o U-boot, non modificare i valori predefiniti del compilatore; le opzioni di cui sopra sono per la compilazione di programmi userspace. –

Problemi correlati