ラズパイで動くバイナリプログラムをRustでクロスコンパイルするための基本手順
※ 当ページには【広告/PR】を含む場合があります。
2022/04/14
開発機でラズパイ用バイナリプログラムをRustでビルドする
ARMv6(ラズパイゼロ/1系):
rustup target add arm-unknown-linux-gnueabihf
ARMv7(2/3/4系):
rustup target add armv7-unknown-linux-gnueabihf
ARMv6(ラズパイゼロ/1系):
rustup target add arm-unknown-linux-musleabihf
ARMv7(2/3/4系):
rustup target add armv7-unknown-linux-musleabihf
ツールチェーンを準備する
ラズパイゼロ/1用:
AArch32 target with hard float (arm-linux-gnueabihf)
ラズパイ2/3/4用:
AArch32 target with hard float (arm-none-linux-gnueabihf)
export PATH="$HOME/ツールチェーンを展開したフォルダ/bin:$PATH"
#例としてラズパイゼロ/1の場合:
#export PATH="$HOME/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH"
#例としてラズパイ2/3/4の場合:
#export PATH="$HOME/gcc-arm-9.2-2019.12-x86_64-arm-none-linux-gnueabihf/bin:$PATH"
.bashrc
$ sudo apt install gcc-arm-linux-gnueabihf
$ sudo apt install binutils-arm-linux-gnueabihf
$ brew install arm-linux-gnueabihf-binutils
新規でRustプロジェクトを作成する
my_app
$ cargo new my_app
$ cd my_app && mkdir .cargo
$ touch .cargo/config.toml
.cargo/config.toml
[build]
#ラズパイゼロ/1のgnuリンカ
[target.arm-unknown-linux-gnueabihf]
linker = "arm-linux-gnueabihf-gcc"
#ラズパイ2/3/4のgnuリンカ
[target.armv7-unknown-linux-gnueabihf]
linker = "arm-none-linux-gnueabihf-gcc"
#...以下を追記
[target.armv7-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-ld"
[target.arm-unknown-linux-musleabihf]
linker = "arm-linux-gnueabihf-ld"
プログラムのビルド
my-app
#👇ラズパイゼロ/1でgnuの場合
#TARGET=arm-unknown-linux-gnueabihf
#👇ラズパイゼロ/1でmuslの場合
#TARGET=arm-unknown-linux-musleabihf
#👇ラズパイ2/3/4でgnuターゲット
#TARGET=armv7-unknown-linux-gnueabihf
#👇ラズパイ2/3/4でmuslターゲット
$ TARGET=armv7-unknown-linux-musleabihf
#バイナリをリリースビルド
$ cargo build --target $TARGET --release
target/[ターゲット名]/release/my_app
ラズパイ実機での動作確認
pi
192.168.1.234
12345
$ scp -P 12345 -r ./target/$TARGET/release/my_app pi@192.168.1.234:/home/pi
$ ssh pi@192.168.1.234 -p 12345 './my_app'
Hello, world!
まとめ
参考サイト
記事を書いた人
ナンデモ系エンジニア
電子工作を身近に知っていただけるように、材料調達からDIYのハウツーまで気になったところをできるだけ細かく記事にしてブログ配信してます。
カテゴリー