raspberry cross creator compile c++ gcc arm cross-compiling raspberry-pi

c++ - qt creator cross compile raspberry pi



Compilación cruzada para Raspberry Pi en GCC. ¿Donde empezar? (7)

TL / DR : ¿Dónde puedo encontrar más información sobre la construcción de una cadena de herramientas de compilación cruzada GCC 4.7.0 para la plataforma ARM (gnueabi) (destinada a ejecutarse en un dispositivo Raspberry Pi)?

Acabo de comprar una nueva Raspberry Pi y estoy ansioso por comenzar a programarla. Logré instalar la herramienta GCC (estoy usando la imagen del sistema Arch Linux) y compilé algunos programas básicos, todo funciona bien.

También traté de compilar las bibliotecas de Boost porque a menudo las uso en mis proyectos y todo parecía funcionar bien al seguir las instrucciones ( ./bootstrap.sh + ./b2 ), excepto por el hecho de que la compilación fue muy lenta. Lo dejé encendido por algunas horas pero apenas pasó los primeros pocos archivos fuente. Después de dejarlo funcionando durante la noche, descubrí que el proceso de compilación se había cancelado debido a la escasez de RAM.

Entonces, mi suposición es que Rasp Pi simplemente no tiene suficiente poder para compilar algo de tamaño como Boost. Entonces, la compilación cruzada viene a mi mente. Sin embargo, a pesar de que hay mucha información sobre la compilación cruzada de ARM disponible en línea, la encuentro confusa. ¿Dónde incluso uno comienza?

Tengo una versión reciente de GCC (4.7.0) disponible en mi Raspberry Pi, así que idealmente me gustaría hacer una compilación cruzada con la misma versión. ¿Dónde puedo obtener la cadena de herramientas GCC 4.7.0 para ARM? (Estaré compilando en x86 CentOS 6.2)

Editar:

Desasigné la memoria de GPU innecesaria y configuré una partición de intercambio de 4 GB en una unidad USB, mientras que los archivos de compilación están en un recurso compartido de NFS. Boost ahora se está compilando mucho más rápido, por lo que es manejable. Sin embargo, me gustaría saber cómo puedo configurar un GCC 4.7 toolchain para compilación cruzada en mi PC x86, ya que tengo la intención de hacer mucha compilación y me gustaría que sea lo más rápido posible.

Editar 2:

Como GCC 4.7.0 es relativamente nuevo, no parece haber un compilador cruzado preconstruido (i386-> ARM). Probablemente tendré que construir uno yo mismo, lo que parece una tarea no trivial (lo he intentado y fallé). ¿Alguien sabe de un tutorial a seguir para construir un compilador cruzado de GCC, con suerte para una de las versiones recientes?

He intentado con este excelente script de shell (que funcionó muy bien para compilar un compilador del mismo arco) y he creado binutils y los requisitos previos de GCC, pero luego la compilación de GCC siguió fallando con muchos errores crípticos. Estoy realmente perdido aquí, por lo que agradecería mucho su ayuda.

GCC en Raspberry Pi se configuró con

--prefix=/usr --libdir=/usr/lib --libexecdir=/usr/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=https://bugs.archlinux.org/ --enable-languages=c,c++,fortran,lto,objc,obj-c++ --enable-shared --enable-threads=posix --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-clocale=gnu --disable-libstdcxx-pch --enable-libstdcxx-time --enable-gnu-unique-object --enable-linker-build-id --with-ppl --enable-cloog-backend=isl --enable-lto --enable-gold --enable-ld=default --enable-plugin --with-plugin-ld=ld.gold --with-linker-hash-style=gnu --disable-multilib --disable-libssp --disable-build-with-cxx --disable-build-poststage1-with-cxx --enable-checking=release --host=arm-unknown-linux-gnueabi --build=arm-unknown-linux-gnueabi

Editar 3:

Logré construir una cadena de herramientas 4.7 GCC para ARM (yay!) Usando este script de shell como lo sugiere el usuario Dwelch en los comentarios. También construí newlib y libstdc++ usando este artículo como guía. La herramienta funciona bien, pero cuando ejecuto el ejecutable en mi Raspberry Pi, falla con Illegal instruction . ¿Cuál podría ser la causa de eso?


Aquí hay una guía paso a paso Cómo compilar el compilador cruzado de Raspberry Pi en Windows . La razón por la cual recibe el error de Illegal Instruction es la última. Raspbian está habilitado para hardfp y requiere parches apropiados para que gcc y eglibc admitan hardfp. De lo contrario, el código generado utilizará diferentes ABI, es decir, pasará argumentos de función en diferentes registros, por lo que se bloqueará en el tiempo de ejecución.

También configurar incorrectamente GCC para ARMv7 (Raspebby Pi es ARMv6) puede provocar un error de Illegal Instruction . Asegúrese de especificar la opción --with-arch=armv6 al configurar GCC.

La guía vinculada anteriormente se basa en GCC 4.6.3 embargo. Pero supongo que debería funcionar con GCC 4.7 también.


Como ya habrás notado, usar Raspberry Pi en sí mismo es lento, pero confiable (ya que no se trata de compilación cruzada), siempre que no te quedes sin memoria. Tal vez sea posible ajustar la memoria y cambiar la configuración para hacer posibles versiones más grandes (si no rápidas). Sé en los foros que la gente está hablando de colocar particiones raíz en SD, particiones de usuarios en unidades USB y, por supuesto, probablemente haga una diferencia obtener una tarjeta SD rápida (clase 6 o superior). Es posible, con el tiempo, que el rendimiento de la compilación mejore a medida que el software mejore. O, tal vez Raspberry Pi 2 tendrá un chipset mejorado y más RAM. :-)


El proyecto dockcross es un excelente punto de partida para una cadena de herramientas completamente desodorizada, que podría construir no solo para Pi sino para cualquier otra cosa. Aquí están los comandos:

docker run --rm dockcross/linux-armv7 > ./dockcross-linux-armv7 chmod +x ./dockcross-linux-armv7 ./dockcross-linux-armv7 bash -c ''$CC test/C/hello.c -o hello_arm''

También ha incorporado cmake .


Encontré estas instrucciones sobre cómo crear un compilador cruzado para tu Raspberry Pi . Es un gran paso a través del uso de una herramienta crosstool-ng que simplifica la configuración de un compilador cruzado crosstool-ng MUCHO (tiene una buena interfaz basada en curses) y es compatible con GCC 4.7.

Parece que funciona bien!


No pude encontrar un 4.7 gcc, solo un 4.6. Para obtener información, compilé el kernel de Pi en una máquina Ubuntu bastante antigua (1Ghz, 768MB de RAM) siguiendo las directrices de esta página: compilación Kernel

La compilación tomó aproximadamente 90 minutos, en comparación con las 6 horas que se sugiere que tomaría en el Pi. El kernel funciona bien en el Pi. Tal vez pueda adaptar estas pautas para la compilación cruzada de otros proyectos en su máquina x86 Linux.


Podría probar la cadena de herramientas Raspberry-GCC-4.7.3 .

Es una cadena de herramientas gcc-4.7.3 pre-construida para armv6 con hardfp usando gnueabi. Lo estoy usando para cruzar compilar c ++ 11 para un objetivo raspberrian.

Tenga en cuenta que solo funciona en hosts linux x86_64.


http://github.com/dwelch67/raspberrypi directorio buildgcc existe una secuencia de comandos para 4.7 gcc / gnu y 3.0 clang / llvm. gnu uno derivado del script en el proyecto mpx en opencores, corté gdb y libgcc, glibc, etc. lo bajé a un compilador. si quieres ese otro material, corta y pega el brazo para mips.