最近RaspberryPi 2を入手しましたが、その上でRustプログラムを実行したいと思います。
Raspberry Pi2でRustプログラムをクロスコンパイルする方法のガイド/手順はありますか?RPiまたはArduinoでRustを実行することについて聞いたことがありますが、最近ではありません。
が欲しい Hello World
同等のRust Raspberry Pi2で実行されるプログラム。文字通りのHelloWorldプログラムである必要はなく、同様に複雑さが低いものである必要があります。
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
RustコンパイラはRaspberryPiのクロスコンパイラとして配布されていないため、rpi開発ツールを使用してクロスコンパイラとしてコンパイルする必要があります。
Rpi開発ツールを入手する-git clone https://github.com/raspberrypi/tools.git ~/pi-tools
Rustコンパイラをmozillagit repoから取得し、rpiツールをパスに追加しますexport PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH
あなたの家で錆びた円周率のdirを探してください./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
実行可能ファイルを生成します。
@ kazhikの回答 Raspberry Pi 2sおよび3s( ARMv7/8ベース )では機能しますが、Raspberry Pi 1sまたはZeros( ARMv6)では機能しませんベース )。
問題は、Debian/Ubuntuのarmhf
ポート(したがって、それらのgcc-arm-linux-gnueabihf
package/compiler/toolchain)targets> = ARMv7 。
幸いなことに、rustupのgcc-arm-linux-gnueabihf
ターゲット> = ARMv6 (すべてのRaspberry Piがサポートするハードウェア浮動小数点を使用)。したがって、必要なのは正しいリンカーだけです。 Raspberry Pi Foundationは、 ツールリポジトリ にあるものの1つを提供します。
まとめると、次の手順を使用して、すべてのRaspberryPiで機能する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!