linux - for - install arm none eabi gdb
CompilaciĆ³n cruzada de Linux a ARM-ELF(ARM926EJ-S/MT7108) (2)
He instalado todos los paquetes de compilación cruzada en mi sistema ubuntu hasta el momento, pero estoy teniendo un problema y necesito ayuda.
Processor : ARM926EJ-S rev 5 (v5l)
BogoMIPS : 184.72
Features : swp half thumb fastmult edsp java
CPU implementer : 0x41
CPU architecture: 5TEJ
CPU variant : 0x0
CPU part : 0x926
CPU revision : 5
Cache type : write-back
Cache clean : cp15 c7 ops
Cache lockdown : format C
Cache format : Harvard
I size : 32768
I assoc : 4
I line length : 32
I sets : 256
D size : 32768
D assoc : 4
D line length : 32
D sets : 256
Hardware : MT7108
Revision : 0000
Serial : 0000000000000000
Esta es la máquina de destino para la que necesito cruzar la compilación. ¿Qué banderas debo usar al compilar?
Usted tiene un ARMv5
sin procesador de coma flotante. Debería haber sido suficiente con -march=armv5
y -mfloat-abi=soft
banderas -mfloat-abi=soft
.
Sin embargo, si esos indicadores no funcionan para usted, sugeriría escribir la aplicación c más pequeña para probar la cadena de herramientas.
/* no includes */
int main(void) {
return 42;
}
y compilarlo con las banderas más completas / estrictas
$arm-linux-gnueabi-gcc -Wall --static -O2 -marm -march=armv5 simple.c -o simple
después de esto, presione simple
para apuntar, ejecútelo y luego emita un echo $?
para verificar si obtendrías 42
. Si funciona, intenta ver si puedes printf
. Si ese también funciona, estás preparado para todo. Si printf
falla, la solución más fácil sería encontrar la cadena de herramientas correcta para su objetivo.
apt-cache search arm | grep ^gcc-
apt-cache search arm | grep ^gcc-
da la siguiente lista,
- gcc-4.7-aarch64-linux-gnu - compilador GNU C
- gcc-4.7-arm-linux-gnueabi - compilador GNU C
- gcc-4.7-arm-linux-gnueabi-base - GCC, la colección de compiladores de GNU (paquete básico)
- gcc-4.7-arm-linux-gnueabihf - compilador GNU C
- gcc-4.7-arm-linux-gnueabihf-base - GCC, la colección de compiladores de GNU (paquete básico)
- gcc-4.7-multilib-arm-linux-gnueabi - compilador GNU C (archivos multilib)
- gcc-4.7-multilib-arm-linux-gnueabihf - compilador GNU C (archivos multilib)
- gcc-aarch64-linux-gnu - El compilador GNU C para la arquitectura arm64
- gcc-arm-linux-gnueabi - El compilador GNU C para arquitectura armel
- gcc-arm-linux-gnueabihf - El compilador GNU C para la arquitectura armhf
Debe instalar gcc-arm-linux-gnueabi, que es un alias para gcc-4.7-arm-linux-gnueabi . gcc-4.7-multilib-arm-linux-gnueabi también es posible, pero más complicado. Utilice las banderas, -march=armv5te -mtune=arm926ej-s -msoft-float -mfloat-abi=soft
. Puede hacer más ajustes especificando la --param NAME=VALUE
en gcc
con los parámetros sintonizados a la temporización del subsistema de memoria de su sistema .
Es posible que no pueda usar estas versiones de gcc
, ya que su Linux puede compilarse con OABI y / o ser bastante antiguo en comparación con aquel para el que se compiló el compilador. En algunos casos, la libc llamará a una API de Linux más nueva, que puede no estar presente. Si el compilador / libc no se configuró para ser compatible con versiones anteriores, es posible que no funcione con su sistema. Puede usar crosstool-ng para crear un compilador personalizado que se adapte a su sistema, pero esto es mucho más complejo.