2015-04-28 16 views
25

Gần đây tôi đã mua được Raspberry PI 2 và tôi muốn chạy chương trình Rust trên đó.Làm cách nào để biên dịch mã Rust chạy trên Raspberry Pi 2?

Có hướng dẫn/hướng dẫn về cách lập chương trình biên dịch Rust trên Raspberry PI 2 không? Tôi đã nghe nói về việc chạy Rust trên RPi hoặc Arduino, mặc dù không phải gần đây.

Tôi muốn chương trình Rust tương đương Hello World chạy trên Raspberry Pi 2. Nó không phải là chương trình Hello World theo nghĩa đen, chỉ là một cái gì đó có độ phức tạp thấp tương tự.

+4

Một số liên kết hữu ích: http://metaverse.fr/blog/compiling-rust-for-the-raspberry-pi/ và https://github.com/npryce/rusty- pi/blob/master/doc/biên dịch-the-compiler.asciidoc –

+0

Bạn có muốn * chạy * 'rustc' trên RPi, hoặc để bạn chỉ đơn giản muốn qua biên dịch một chương trình sẽ thực hiện trên RPi? – Shepmaster

+0

@Shepmaster Tôi muốn chương trình biên dịch chéo để thực thi trên RPi2. Tôi muốn chạy một cái gì đó đơn giản trên đó. –

Trả lời

19

Hiện tại chúng tôi có 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 
+0

Điều này hoạt động hoàn toàn tốt đẹp. Tôi chỉ cần thêm dấu trích dẫn mất tích ('" linker = \ "arm-linux-gnueabihf-gcc \" "'). Bạn có nhớ cập nhật câu trả lời của mình không? –

+0

Câu trả lời này hoạt động tốt trên Raspberry Pi 2s và 3s, nhưng không hoạt động trên 1s hoặc Zeros. Xem [câu trả lời của tôi] (https://stackoverflow.com/a/48087233/291228) để thiết lập xây dựng các tệp nhị phân hoạt động trên tất cả các phiên bản Pi. –

8

Trình biên dịch Rust không được phân phối như một trình biên dịch chéo cho Raspberry Pi, vì vậy nó cần phải được biên dịch như một trình biên dịch chéo với các công cụ dev rpi.

  1. Nhận các công cụ dev RPI - git clone https://github.com/raspberrypi/tools.git ~/pi-tools

  2. get biên dịch rỉ từ mozilla git repo và thêm công cụ RPI đến con đường export PATH=~/pi-tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin:$PATH

  3. Hãy tìm gỉ-pi dir vào nhà của bạn ./configure --target=arm-unknown-linux-gnueabihf --prefix=$HOME/rusty-pi && make && make install

  4. Xem xét helloworld.rs ->% ~/pi-rust/bin/rustc --target=arm-unknown-linux-gnueabihf -C linker=arm-linux-gnueabihf-g++ helloworld.rs

Nó sẽ tạo ra tệp thực thi.

2

@kazhik's answer sẽ làm việc cho 2s Raspberry Pi và 3s (mà là ARMv7/8 based), nhưng không phải cho Raspberry Pi 1s hoặc Zero (mà là ARMv6 based).

Vấn đề là cổng armhf của Debian/Ubuntu (và do đó mục tiêu gói/biên dịch/công cụ) của Debian/Ubuntu)> = ARMv7.

May mắn thay, mục tiêu gcc-arm-linux-gnueabihf của rustup> = ARMv6 (với điểm nổi phần cứng, tất cả hỗ trợ Raspberry Pis), vì vậy tất cả những gì cần là liên kết chính xác. Nền tảng Raspberry Pi cung cấp một trong số đó trong số tools repository của chúng.

Đưa nó lại với nhau, các bước sau đây có thể được sử dụng để vượt biên soạn một nhị phân Rust hoạt động trên tất cả các Raspberry Pi:

$ 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 

Để kiểm tra chéo biên dịch (giả sử một Pi đang chạy và có thể truy cập với mặc định raspberrypi hostname):

[email protected]: $ cargo new --bin rpi-test 
[email protected]: $ cd rpi-test 
[email protected]: $ cargo build --target=arm-unknown-linux-gnueabihf 
[email protected]: $ scp target/arm-unknown-linux-gnueabihf/debug/rpi-test [email protected]: 
[email protected]: $ ssh [email protected] 
[email protected]: $ ./rpi-test 
Hello, world! 
Các vấn đề liên quan