GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara menginstal kompiler lintas Raspberry Pi di mesin host Linux saya?

Membuat gambar Raspbian Debian Buster dan ARMv6 yang lebih baru

Jawaban oleh @Stenyg hanya berfungsi untuk gambar Raspbian yang lebih lama. Raspbian yang baru dirilis berdasarkan Debian Buster memerlukan rantai alat yang diperbarui:

Di Debian Buster, kompiler gcc dan glibc telah diperbarui ke versi 8.3. Toolchain di git://github.com/raspberrypi/tools.git masih berdasarkan versi gcc 6 yang lebih lama. Artinya menggunakan git://github.com/raspberrypi/tools.git akan menyebabkan banyak kesalahan kompilasi.

Tutorial ini didasarkan pada jawaban @Stenyg. Selain banyak solusi lain di internet, tutorial ini juga mendukung Rasperry Pi lama (A, B, B+, Zero ) berdasarkan CPU ARMv6. Lihat juga:GCC 8 Cross Compiler menghasilkan ARMv7 yang dapat dieksekusi, bukan ARMv6

Siapkan rantai alat

Tidak ada repositori git resmi yang berisi rantai alat yang diperbarui (Lihat https://github.com/raspberrypi/tools/issues/102).

Saya membuat repositori github baru yang mencakup pembuatan dan rantai alat yang telah dikompilasi untuk ARMv6 berdasarkan GCC8 dan yang lebih baru:

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

Seperti disebutkan dalam readme proyek, ini adalah langkah-langkah untuk mendapatkan toolchain. Anda juga dapat membuatnya sendiri (lihat README untuk detail lebih lanjut).

  1. Unduh rantai alat:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
  1. Ekstrak. Catatan:Toolchain harus dalam /opt/cross-pi-gcc karena tidak tergantung lokasi.
sudo tar xfz raspi-toolchain.tar.gz --strip-components=1 -C /opt
  1. Kamu selesai! Toolchain sekarang ada di /opt/cross-pi-gcc

  2. Opsional, tambahkan toolchain ke jalur Anda, dengan menambahkan:

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

ke akhir file bernama ~/.bashrc

Sekarang Anda dapat keluar dan masuk kembali (yaitu memulai kembali sesi terminal Anda), atau menjalankan . ~/.bashrc di terminal Anda untuk mengambil PATH tambahan dalam sesi terminal Anda saat ini.

Dapatkan perpustakaan dari Raspberry PI

Untuk mengkompilasi silang Raspberry Pi Anda sendiri, yang mungkin memiliki beberapa pustaka khusus yang terpasang, Anda perlu memasukkan pustaka ini ke host Anda.

Buat folder $HOME/raspberrypi .Dalam raspberrypi Anda folder, buat folder bernama rootfs .

Sekarang Anda perlu menyalin seluruh /lib dan /usr direktori ke folder yang baru dibuat ini. Saya biasanya menampilkan gambar rpi dan menyalinnya melalui rsync:

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

di mana 192.168.1.PI diganti dengan IP Raspberry Pi Anda.

Gunakan CMake untuk mengompilasi proyek Anda

Untuk memberi tahu CMake agar menggunakan rantai alat Anda sendiri, Anda harus memiliki file rantai alat yang menginisialisasi setelan kompiler.

Dapatkan file toolchain ini dari sini:https://github.com/Pro/raspi-toolchain/blob/master/Toolchain-rpi.cmake

Sekarang Anda seharusnya dapat mengkompilasi cmake Anda program hanya dengan menambahkan flag tambahan ini:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake dan menyetel variabel lingkungan yang benar:

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 ..

Contoh halo dunia ditampilkan di sini:https://github.com/Pro/raspi-toolchain/blob/master/build_hello_world.sh


Saya akan mencoba menulis ini sebagai tutorial untuk Anda agar mudah diikuti.

CATATAN:Tutorial ini hanya berfungsi untuk gambar raspbian lama. Untuk Raspbian yang lebih baru berdasarkan Debian Buster, lihat cara berikut di utas ini:https://stackoverflow.com/a/58559140/869402

Persyaratan sebelumnya

Sebelum memulai, Anda perlu memastikan bahwa yang berikut ini telah terinstal:

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

Mari mengompilasi silang Pie!

Mulailah dengan membuat folder di direktori home Anda bernama raspberrypi .

Masuk ke folder ini dan tarik SELURUH folder alat yang Anda sebutkan di atas:

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

Anda ingin menggunakan 3 yang berikut ini, gcc-linaro-arm-linux-gnueabihf-raspbian , kalo gak salah baca.

Masuk ke direktori home Anda dan tambahkan:

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

ke akhir file bernama ~/.bashrc

Sekarang Anda dapat keluar dan masuk kembali (yaitu memulai kembali sesi terminal Anda), atau menjalankan . ~/.bashrc di terminal Anda untuk mengambil PATH tambahan dalam sesi terminal Anda saat ini.

Sekarang, pastikan Anda dapat mengakses kompiler arm-linux-gnueabihf-gcc -v . Anda harus mendapatkan sesuatu seperti ini:

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
 )

Tapi, hei! Saya melakukan itu dan lib masih tidak berfungsi!

Kami belum selesai! Sejauh ini, kami hanya melakukan dasar-dasarnya.

Di raspberrypi Anda folder, buat folder bernama rootfs .

Sekarang Anda perlu menyalin seluruh /lib dan /usr direktori ke folder yang baru dibuat ini. Saya biasanya menampilkan gambar rpi dan menyalinnya melalui rsync:

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

di mana 192.168.1.PI diganti dengan IP Raspberry Pi Anda.

Sekarang, kita perlu menulis cmake file konfigurasi. Buka ~/home/raspberrypi/pi.cmake di editor favorit Anda dan masukkan berikut ini:

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)

Sekarang Anda seharusnya dapat mengkompilasi cmake Anda program hanya dengan menambahkan flag tambahan ini:-D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake .

Menggunakan contoh 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. Cara menginstal GCC kompiler C di Ubuntu 20.04 LTS Focal Fossa Linux

  2. Cara Menginstal dan Menggunakan Perintah Ping di Linux

  3. Cara Menginstal Git di Rocky Linux 8

  1. Cara menginstal driver NVIDIA di RHEL 8 Workstation

  2. Cara menginstal GCC kompiler C di Ubuntu 22.04 LTS Jammy Jellyfish Linux

  3. Bagaimana menemukan jalur instal git di Mac atau Linux?

  1. Cara Instal Windows 10 Di Virtualbox Di Linux

  2. Cara Memasang Ikan, Shell Interaktif Ramah, Di Linux

  3. Apa itu Git dan bagaimana cara menginstal Git di Linux