Ayuda compilación cruzada linux

Hola,

estoy recompilando el kernel de la raspberry para tener uno con RT.
Me he descargado las fuentes de raspbian, les he aplicado el parche de xenomai, todo OK, siguiendo más o menos la siguiente página (porque hay cosas mal explicadas)
http://powet.eu/2012/07/25/raspberry-pi-xenomai/


Ahora me llega el momento de compilar todo en mi PC (ubuntu).
He descargado las utilidades que nombra OK

Llega el momento de compilar. He puesto un .config en la carpeta linux-rpi-3.2.21
hago un export para indicar donde tengo el compilador
export CCPREFIX=/home/jorcoval/tools-master/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/arm-linux-gnueabihf/bin/

hago
make ARCH=arm CROSS_COMPILE=${CCPREFIX}


y ya me muestra
  CHK     include/linux/version.h
  CHK     include/generated/utsrelease.h
make[1]: «include/generated/mach-types.h» está actualizado.
  CC      kernel/bounds.s
cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mapcs"
cc1: error: unrecognized command line option "-mno-sched-prolog"
cc1: error: unrecognized command line option "-mno-thumb-interwork"
kernel/bounds.c:1:0: error: unknown ABI (aapcs-linux) for -mabi= switch
kernel/bounds.c:1:0: error: bad value (armv5t) for -march= switch
kernel/bounds.c:1:0: error: bad value (strongarm) for -mtune= switch
make[1]: *** [kernel/bounds.s] Error 1

y ya no sé donde están esas líneas ni cómo se modifican
Básicamente yo diría que lo que te pasa es que te lo está intentando compilar con gcc normal y corriente y no con el de arm, en principio lo que tienes puesto en esos comandos parece correcto, así que o el make tiene algo raro y no coge el CROSS_COMPILE cosa que veo rara ya que supongo que es algo que es normal compilarlo desde otros equipos o bien no te está cogiendo bien el export, prueba ponerlo en el .bashrc

Un saludo.
Yo creo que si que puede ser que esté utilizando el cross-compilador, pero en alguna parte del Makefile debe haber alguna forma de decirle que NO utilice ciertas opciones del compilador que pueden no estar presentes en la versión de gcc que tu quiere usar.

cc1: error: unrecognized command line option "-mlittle-endian"
cc1: error: unrecognized command line option "-mapcs"
cc1: error: unrecognized command line option "-mno-sched-prolog"
cc1: error: unrecognized command line option "-mno-thumb-interwork"


Esto de arriba parece indicar que el compilador utilizado no reconoce ciertos -m... y los -m son opciones para la máquina para la que se compila (en el man de gcc verás algunos ejemplos).

Yo tengo alguna experiencia cross-compilando, aunque nunca el kernel (aún no necesité hacerlo) y no sé de qué manera se le debe indicar al sistema de compilación que está cross-compilando para que adapte todas las opciones (y quite ciertas cosas que el compilador no soporte).
Pues si también puede ser, lo raro es que no reconozca ni la arquitectura, supongo que no te has saltado este paso, no jorcoval?
./configure –host=arm-bcm2708-linux-gnueabi


Un saludo.
Lo hice, así que no sé dónde me la puede estar liando.

Mañana por la tarde que tengo libre lo volveré a intentar a ver.

Gracias a todos

EDITO:
Finalmente esta tarde he tenido algo de rato después del trabajo. En lugar de hacer la compilación cruzada la he hecho sobre la misma raspberry y ya lo tengo todo preparado.

Si alguien quiere, tengo una imagen de raspbian (con su entorno gráfico opcional, etc), con las librerías de xenomai compiladas, el kernel de tiempo real y resultado del test de esta tarde: una latencia peor de 18us
No está mal...
4 respuestas