Saltar al contenido

¿Cómo instalar el compilador cruzado Raspberry Pi en mi máquina host Linux?

Ya no tienes que buscar más en otros sitios ya que has llegado al sitio necesario, poseemos la solución que deseas sin complicaciones.

Solución:

Intentaré escribir esto como un tutorial para que sea fácil de seguir.

NOTA: Este tutorial solo funciona para imágenes raspbian más antiguas. Para el Raspbian más nuevo basado en Debian Buster, consulte el siguiente procedimiento en este hilo: https://stackoverflow.com/a/58559140/869402

Pre requisitos

Antes de comenzar, debe asegurarse de que esté instalado lo siguiente:

apt-get install git rsync cmake libc6-i386 lib32z1 lib32stdc++6

¡Hagamos una compilación cruzada de un Pie!

Comience creando una carpeta en su directorio personal llamada raspberrypi.

Vaya a esta carpeta y baje la carpeta de herramientas COMPLETA que mencionó anteriormente:

git clone git://github.com/raspberrypi/tools.git

Querías usar el siguiente de los 3, gcc-linaro-arm-linux-gnueabihf-raspbian, si no leí mal.

Vaya a su directorio de inicio y agregue:

export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin

al final del archivo llamado ~/.bashrc

Ahora puede cerrar la sesión y volver a iniciarla (es decir, reiniciar su sesión de terminal), o ejecutar . ~/.bashrc en su terminal para recoger el PATH además en su sesión de terminal actual.

Ahora, verifique que puede acceder al compilador arm-linux-gnueabihf-gcc -v. Debería obtener algo como esto:

Using built-in specs.
COLLECT_GCC=arm-linux-gnueabihf-gcc
COLLECT_LTO_WRAPPER=/home/tudhalyas/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/../libexec/gcc/arm-linux-gnueabihf/4.7.2/lto-wrapper
Target: arm-linux-gnueabihf
Configured with: /cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.b
 uild/src/gcc-linaro-4.7-2012.08/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-
 linux-gnu --target=arm-linux-gnueabihf --prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-l
 inux-gnueabihf-raspbian-linux/install --with-sysroot=/cbuild/slaves/oort61/crosstool-ng/builds/
 arm-linux-gnueabihf-raspbian-linux/install/arm-linux-gnueabihf/libc --enable-languages=c,c++,fo
 rtran --disable-multilib --with-arch=armv6 --with-tune=arm1176jz-s --with-fpu=vfp --with-float=
 hard --with-pkgversion='crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08' --with-bugurl=
 https://bugs.launchpad.net/gcc-linaro --enable-__cxa_atexit --enable-libmudflap --enable-libgom
 p --enable-libssp --with-gmp=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-rasp
 bian-linux/.build/arm-linux-gnueabihf/build/static --with-mpfr=/cbuild/slaves/oort61/crosstool-
 ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-mpc
 =/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-
 gnueabihf/build/static --with-ppl=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf
 -raspbian-linux/.build/arm-linux-gnueabihf/build/static --with-cloog=/cbuild/slaves/oort61/cros
 stool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static --wi
 th-libelf=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-linux/.build/a
 rm-linux-gnueabihf/build/static --with-host-libstdcxx='-L/cbuild/slaves/oort61/crosstool-ng/bui
 lds/arm-linux-gnueabihf-raspbian-linux/.build/arm-linux-gnueabihf/build/static/lib -lpwl' --ena
 ble-threads=posix --disable-libstdcxx-pch --enable-linker-build-id --enable-plugin --enable-gol
 d --with-local-prefix=/cbuild/slaves/oort61/crosstool-ng/builds/arm-linux-gnueabihf-raspbian-li
 nux/install/arm-linux-gnueabihf/libc --enable-c99 --enable-long-long
Thread model: posix
gcc version 4.7.2 20120731 (prerelease) (crosstool-NG linaro-1.13.1+bzr2458 - Linaro GCC 2012.08
 )

¡Pero hey! ¡Hice eso y las bibliotecas todavía no funcionan!

¡Aún no hemos terminado! Hasta ahora, solo hemos hecho lo básico.

En tus raspberrypi carpeta, crea una carpeta llamada rootfs.

Ahora necesitas copiar todo /liby /usr directorio a esta carpeta recién creada. Por lo general, abro la imagen rpi y la copio a través de rsync:

rsync -rl --delete-after --safe-links [email protected]:/lib,usr $HOME/raspberrypi/rootfs

dónde 192.168.1.PI se reemplaza por la IP de su Raspberry Pi.

Ahora, necesitamos escribir un cmake archivo de configuración. Abierto ~/home/raspberrypi/pi.cmake en su editor favorito e inserte lo siguiente:

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENVHOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENVHOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENVHOME/raspberrypi/rootfs)
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

Ahora debería poder compilar su cmake programas simplemente agregando esta bandera adicional: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake.

Usando un ejemplo de cmake hello world:

git clone https://github.com/jameskbride/cmake-hello-world.git 
cd cmake-hello-world
mkdir build
cd build
cmake -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake ../
make
scp CMakeHelloWorld [email protected]:/home/pi/
ssh [email protected] ./CMakeHelloWorld

Construyendo para imágenes más nuevas de Raspbian Debian Buster y ARMv6

La respuesta de @Stenyg solo funciona para imágenes de Raspbian más antiguas. El recientemente lanzado Raspbian basado en Debian Buster requiere una cadena de herramientas actualizada:

En Debian Buster, el compilador gcc y glibc se actualizaron a la versión 8.3. La cadena de herramientas en git://github.com/raspberrypi/tools.git todavía se basa en la versión anterior de gcc 6. Esto significa que usar git://github.com/raspberrypi/tools.git dará lugar a muchos errores de compilación.

Este tutorial se basa en la respuesta de @Stenyg. Además de muchas otras soluciones en Internet, este tutorial también es compatible con Rasperry Pi (A, B, B +, Cero) basado en la CPU ARMv6. Ver también: GCC 8 Cross Compiler genera ejecutables ARMv7 en lugar de ARMv6

Configurar la cadena de herramientas

No hay un repositorio oficial de git que contenga una cadena de herramientas actualizada (consulte https://github.com/raspberrypi/tools/issues/102).

Creé un nuevo repositorio de github que incluye la construcción y cadenas de herramientas precompiladas para ARMv6 basadas en GCC8 y versiones posteriores:

https://github.com/Pro/raspi-toolchain

Como se menciona en el archivo Léame del proyecto, estos son los pasos para obtener la cadena de herramientas. También puede crearlo usted mismo (consulte el archivo README para obtener más detalles).

  1. Descarga la cadena de herramientas:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Extraelo. Nota: la cadena de herramientas debe estar en /opt/cross-pi-gcc ya que no es independiente de la ubicación.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. ¡Estás listo! La cadena de herramientas está ahora en /opt/cross-pi-gcc

  2. Opcional, agregue la cadena de herramientas a su ruta, agregando:

export PATH=$PATH:/opt/cross-pi-gcc/bin

al final del archivo llamado ~/.bashrc

Ahora puede cerrar la sesión y volver a iniciarla (es decir, reiniciar su sesión de terminal), o ejecutar . ~/.bashrc en su terminal para recoger el PATH además en su sesión de terminal actual.

Obtenga las bibliotecas de Raspberry PI

Para realizar una compilación cruzada para su propia Raspberry Pi, que puede tener algunas bibliotecas personalizadas instaladas, debe obtener estas bibliotecas en su host.

Crea una carpeta $HOME/raspberrypi. En tus raspberrypi carpeta, crea una carpeta llamada rootfs.

Ahora necesitas copiar todo /liby /usr directorio a esta carpeta recién creada. Por lo general, abro la imagen rpi y la copio a través de rsync:

rsync -vR --progress -rl --delete-after --safe-links [email protected]:/lib,usr,opt/vc/lib $HOME/raspberrypi/rootfs

dónde 192.168.1.PI se reemplaza por la IP de su Raspberry Pi.

Usa CMake para compilar tu proyecto

Para decirle a CMake que tome su propia cadena de herramientas, debe tener un archivo de cadena de herramientas que inicialice la configuración del compilador.

Obtenga este archivo de cadena de herramientas desde aquí: https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Ahora debería poder compilar su cmake programas simplemente agregando esta bandera adicional: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake y establecer las variables de entorno correctas:

export RASPBIAN_ROOTFS=$HOME/raspberry/rootfs
export PATH=/opt/cross-pi-gcc/bin:$PATH
export RASPBERRY_VERSION=1
cmake -DCMAKE_TOOLCHAIN_FILE=$HOME/raspberry/Toolchain-rpi.cmake ..

Aquí se muestra un ejemplo de hola mundo: https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh

No pude obtener el compilador (x64 versión) para utilizar la sysroot hasta que agregué SET(CMAKE_SYSROOT $ENVHOME/raspberrypi/rootfs) para pi.cmake.

Si crees que te ha resultado provechoso nuestro post, sería de mucha ayuda si lo compartieras con el resto desarrolladores de esta forma nos ayudas a dar difusión a esta información.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *