GNU/Linux >> Tutoriales Linux >  >> Linux

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

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

La respuesta de @Stenyg solo funciona para imágenes antiguas de Raspbian. El Raspbian lanzado recientemente 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 conducirá 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 versiones anteriores de Rasperry Pi (A, B, B+, Zero ) basado en la CPU ARMv6. Ver también:GCC 8 Cross Compiler genera el ejecutable ARMv7 en lugar de ARMv6

Configurar la cadena de herramientas

No existe 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 más nuevas:

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 LÉAME para obtener más detalles).

  1. Descargue la cadena de herramientas:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Extráigalo. 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 ahora está en /opt/cross-pi-gcc

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

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

hasta el final del archivo llamado ~/.bashrc

Ahora puede cerrar sesión y volver a iniciar sesión (es decir, reiniciar su sesión de terminal) o ejecutar . ~/.bashrc en tu terminal para recoger el PATH adición en su sesión de terminal actual.

Obtenga las bibliotecas de Raspberry PI

Para compilar de forma cruzada para su propia Raspberry Pi, que puede tener algunas bibliotecas personalizadas instaladas, debe obtener estas bibliotecas en su host.

Crear una carpeta $HOME/raspberrypi .En tu raspberrypi carpeta, cree una carpeta llamada rootfs .

Ahora necesitas copiar todo el /lib y /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

donde 192.168.1.PI se reemplaza por la IP de su Raspberry Pi.

Use CMake para compilar su 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 extra:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake y configurando 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


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

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

Requisitos previos

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

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

¡Vamos a compilar un Pie!

Comience creando una carpeta en su directorio de inicio llamada raspberrypi .

Vaya a esta carpeta y despliegue la carpeta de herramientas ENTERA 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 sesión y volver a iniciar sesión (es decir, reiniciar su sesión de terminal) o ejecutar . ~/.bashrc en tu terminal para recoger el PATH adición en su sesión de terminal actual.

Ahora, verifica que puedes 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 oye! ¡Hice eso y las bibliotecas siguen sin funcionar!

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

En tu raspberrypi carpeta, crea una carpeta llamada rootfs .

Ahora necesitas copiar todo el /lib y /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

donde 192.168.1.PI se reemplaza por la IP de su Raspberry Pi.

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

SET(CMAKE_SYSTEM_NAME Linux)
SET(CMAKE_SYSTEM_VERSION 1)
SET(CMAKE_C_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc)
SET(CMAKE_CXX_COMPILER $ENV{HOME}/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++)
SET(CMAKE_FIND_ROOT_PATH $ENV{HOME}/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 extra:-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

Linux
  1. Cómo instalar los controladores NVIDIA en la estación de trabajo RHEL 8

  2. Cómo instalar GCC el compilador C en Ubuntu 20.04 LTS Focal Fossa Linux

  3. Cómo instalar y usar el comando ping en Linux

  4. Cómo instalar Git en Rocky Linux 8

  5. ¿Cómo encontrar la ruta de instalación de git en Mac o Linux?

Linux:¿cómo instalar X11 en el propio sistema Linux Buildroot?

Cómo instalar el cargador IonCube en Ubuntu Linux

Cómo instalar la plataforma de toma de notas colaborativa Etherpad en Linux

Cómo instalar Rust Compiler y Toolchain en Rocky Linux 8

Cómo instalar y usar el compilador GCC en el sistema Linux

Cómo instalar y configurar Git en distribuciones de Linux