web-dev-qa-db-ja.com

Raspberry Pi 2で実行するRustコードをコンパイルするにはどうすればよいですか?

最近RaspberryPi 2を入手しましたが、その上でRustプログラムを実行したいと思います。

Raspberry Pi2でRustプログラムをクロスコンパイルする方法のガイド/手順はありますか?RPiまたはArduinoでRustを実行することについて聞いたことがありますが、最近ではありません。

が欲しい Hello World同等のRust Raspberry Pi2で実行されるプログラム。文字通りのHelloWorldプログラムである必要はなく、同様に複雑さが低いものである必要があります。

27
Daniel Fath

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
24
kazhik

RustコンパイラはRaspberryPiのクロスコンパイラとして配布されていないため、rpi開発ツールを使用してクロスコンパイラとしてコンパイルする必要があります。

  1. Rpi開発ツールを入手する-git clone https://github.com/raspberrypi/tools.git ~/pi-tools

  2. Rustコンパイラをmozillagit repoから取得し、rpiツールをパスに追加しますexport PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH

  3. あなたの家で錆びた円周率のdirを探してください./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/rusty-pi && make && make install

  4. Helloworld.rsを検討する-> % ~/pi-Rust/bin/rustc --target=arm-unknown-linux-gnueabihf -C linker=arm-linux-gnueabihf-g++ helloworld.rs

実行可能ファイルを生成します。

9
droaak

@ 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!
6
Chris Pick