如何在 Raspberry Pi 2 上将 Rust 代码编译为 运行?
How can I compile Rust code to run on a Raspberry Pi 2?
我最近获得了一个 Raspberry PI 2,我想在其上 运行 一个 Rust 程序。
有guide/instructions如何在Raspberry PI2上交叉编译Rust程序吗?我听说过 运行在 RPi 或 Arduino 上使用 ning Rust,虽然不是最近。
我想要一个 Hello World
等效的 Rust 程序 运行ning on Raspberry Pi 2. 它不必是一个字面上的 Hello World 程序,只是类似低的东西复杂度。
Rust 编译器未作为 Raspberry Pi 的交叉编译器分发,因此需要使用 rpi 开发工具将其编译为交叉编译器。
获取 rpi 开发工具 - git clone https://github.com/raspberrypi/tools.git ~/pi-tools
从 mozilla git repo 获取 rust 编译器并将 rpi 工具添加到路径 export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
在家里寻找 rusty-pi 目录 ./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/rusty-pi && make && make install
考虑 helloworld.rs -> % ~/pi-rust/bin/rustc --target=arm-unknown-linux-gnueabihf -C linker=arm-linux-gnueabihf-g++ helloworld.rs
它将生成一个可执行文件。
我们现在有 rustup。
$ rustup target add arm-unknown-linux-gnueabihf
$ sudo apt-get install gcc-arm-linux-gnueabihf
$ echo '[target.arm-unknown-linux-gnueabihf]' >> ~/.cargo/config
$ echo 'linker = "arm-linux-gnueabihf-gcc"' >> ~/.cargo/config
$ cd <project dir>
$ cargo build --target=arm-unknown-linux-gnueabihf
will work for Raspberry Pi 2s and 3s (which are ARMv7/8 based), but not for Raspberry Pi 1s or Zeros (which are ARMv6 based).
问题是 Debian/Ubuntu 的 armhf
端口(因此他们的 gcc-arm-linux-gnueabihf
package/compiler/toolchain)目标 >= ARMv7.
幸运的是,rustup 的 gcc-arm-linux-gnueabihf
目标 >= ARMv6 (with hardware floating-point, which all Raspberry Pis support), so all that's needed is the correct linker. The Raspberry Pi foundation provides one of those in their tools repository。
综合起来,可以使用以下步骤交叉编译适用于所有 Raspberry Pi 的 Rust 二进制文件:
$ rustup target add arm-unknown-linux-gnueabihf
$ git clone --depth=1 https://github.com/raspberrypi/tools raspberrypi-tools
$ echo "[target.arm-unknown-linux-gnueabihf]" >> ~/.cargo/config
$ echo "linker = \"$(pwd)/raspberrypi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc\"" >> ~/.cargo/config
测试交叉编译器(假设 Pi 是 运行 并且可以使用默认 raspberrypi
主机名访问):
cpick@devhost: $ cargo new --bin rpi-test
cpick@devhost: $ cd rpi-test
cpick@devhost: $ cargo build --target=arm-unknown-linux-gnueabihf
cpick@devhost: $ scp target/arm-unknown-linux-gnueabihf/debug/rpi-test pi@raspberrypi:
cpick@devhost: $ ssh pi@raspberrypi
pi@raspberrypi: $ ./rpi-test
Hello, world!
我最近获得了一个 Raspberry PI 2,我想在其上 运行 一个 Rust 程序。
有guide/instructions如何在Raspberry PI2上交叉编译Rust程序吗?我听说过 运行在 RPi 或 Arduino 上使用 ning Rust,虽然不是最近。
我想要一个 Hello World
等效的 Rust 程序 运行ning on Raspberry Pi 2. 它不必是一个字面上的 Hello World 程序,只是类似低的东西复杂度。
Rust 编译器未作为 Raspberry Pi 的交叉编译器分发,因此需要使用 rpi 开发工具将其编译为交叉编译器。
获取 rpi 开发工具 -
git clone https://github.com/raspberrypi/tools.git ~/pi-tools
从 mozilla git repo 获取 rust 编译器并将 rpi 工具添加到路径
export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
在家里寻找 rusty-pi 目录
./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/rusty-pi && make && make install
考虑 helloworld.rs ->
% ~/pi-rust/bin/rustc --target=arm-unknown-linux-gnueabihf -C linker=arm-linux-gnueabihf-g++ helloworld.rs
它将生成一个可执行文件。
我们现在有 rustup。
$ rustup target add arm-unknown-linux-gnueabihf
$ sudo apt-get install gcc-arm-linux-gnueabihf
$ echo '[target.arm-unknown-linux-gnueabihf]' >> ~/.cargo/config
$ echo 'linker = "arm-linux-gnueabihf-gcc"' >> ~/.cargo/config
$ cd <project dir>
$ cargo build --target=arm-unknown-linux-gnueabihf
问题是 Debian/Ubuntu 的 armhf
端口(因此他们的 gcc-arm-linux-gnueabihf
package/compiler/toolchain)目标 >= ARMv7.
幸运的是,rustup 的 gcc-arm-linux-gnueabihf
目标 >= ARMv6 (with hardware floating-point, which all Raspberry Pis support), so all that's needed is the correct linker. The Raspberry Pi foundation provides one of those in their tools repository。
综合起来,可以使用以下步骤交叉编译适用于所有 Raspberry Pi 的 Rust 二进制文件:
$ rustup target add arm-unknown-linux-gnueabihf
$ git clone --depth=1 https://github.com/raspberrypi/tools raspberrypi-tools
$ echo "[target.arm-unknown-linux-gnueabihf]" >> ~/.cargo/config
$ echo "linker = \"$(pwd)/raspberrypi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc\"" >> ~/.cargo/config
测试交叉编译器(假设 Pi 是 运行 并且可以使用默认 raspberrypi
主机名访问):
cpick@devhost: $ cargo new --bin rpi-test
cpick@devhost: $ cd rpi-test
cpick@devhost: $ cargo build --target=arm-unknown-linux-gnueabihf
cpick@devhost: $ scp target/arm-unknown-linux-gnueabihf/debug/rpi-test pi@raspberrypi:
cpick@devhost: $ ssh pi@raspberrypi
pi@raspberrypi: $ ./rpi-test
Hello, world!