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).
- Unduh rantai alat:
wget https://github.com/Pro/raspi-toolchain/releases/latest/download/raspi-toolchain.tar.gz
- 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
-
Kamu selesai! Toolchain sekarang ada di
/opt/cross-pi-gcc
-
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