Tôi sẽ cố gắng viết bài này như một hướng dẫn cho bạn để bạn có thể dễ dàng làm theo.
LƯU Ý: Hướng dẫn này chỉ hoạt động cho các hình ảnh raspbian cũ hơn. Đối với Raspbian mới hơn dựa trên Debian Buster, hãy xem hướng dẫn sau trong chủ đề này: https://stackoverflow.com/a/58559140/869402
Yêu cầu trước
Trước khi bắt đầu, bạn cần đảm bảo rằng các phần sau đã được cài đặt:
apt-get install git rsync cmake ia32-libs
Hãy biên dịch chéo một chiếc bánh!
Bắt đầu với việc tạo một thư mục trong thư mục chính của bạn được gọi là raspberrypi
.
Vào thư mục này và kéo xuống TOÀN BỘ thư mục công cụ mà bạn đã đề cập ở trên:
git clone git://github.com/raspberrypi/tools.git
Bạn muốn sử dụng cái sau trong số 3 cái gcc-linaro-arm-linux-gnueabihf-raspbian
, nếu tôi không đọc nhầm.
Vào thư mục chính của bạn và thêm:
export PATH=$PATH:$HOME/raspberrypi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin
đến cuối tệp có tên ~/.bashrc
Bây giờ bạn có thể đăng xuất và đăng nhập lại (tức là khởi động lại phiên đầu cuối của bạn) hoặc chạy . ~/.bashrc
trong thiết bị đầu cuối của bạn để nhận phần PATH
bổ sung trong phiên đầu cuối hiện tại của bạn.
Bây giờ, hãy xác minh rằng bạn có thể truy cập trình biên dịch arm-linux-gnueabihf-gcc -v
. Bạn sẽ nhận được một cái gì đó như thế này:
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
)
Nhưng này! Tôi đã làm điều đó và các libs vẫn không hoạt động!
Chúng tôi vẫn chưa hoàn thành! Cho đến nay, chúng tôi mới chỉ thực hiện những điều cơ bản.
Trong raspberrypi
thư mục của bạn , hãy tạo một thư mục có tên rootfs
.
Bây giờ bạn cần sao chép toàn bộ /lib
và /usr
thư mục vào thư mục mới tạo này. Tôi thường đưa hình ảnh rpi lên và sao chép nó qua rsync:
rsync -rl --delete-after --safe-links pi@192.168.1.PI:/{lib,usr} $HOME/raspberrypi/rootfs
nơi 192.168.1.PI
được thay thế bằng IP của Raspberry Pi của bạn.
Bây giờ, chúng ta cần viết một cmake
tệp cấu hình. Mở ~/home/raspberrypi/pi.cmake
trong trình chỉnh sửa yêu thích của bạn và chèn những thứ sau:
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)
Bây giờ bạn sẽ có thể biên dịch của bạn cmake
chương trình chỉ đơn giản bằng cách thêm cờ thêm này: -D CMAKE_TOOLCHAIN_FILE=$HOME/raspberrypi/pi.cmake
.
Sử dụng một ví dụ 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 pi@192.168.1.PI:/home/pi/
ssh pi@192.168.1.PI ./CMakeHelloWorld