⚙️

Rustで記述したコードをJetson Nano用にクロスコンパイルする方法

2023/06/27に公開

はじめに

Rustのクロスコンパイルについて備忘録

開発環境

開発側

※下記すべてWindows11でWSLを使って構築しています。

  • Ubuntu 20.4(amd環境)
  • Docker 20.10.19
  • cargo 1.70.0

実機

  • Jetson Nano B01(ARM環境)
  • 実行することだけを想定しているのでRustはインストールしていない

手順

Hello worldをクロスコンパイルしてJetson上で実行するところまでを対象とする。

  1. Cargoを使ってcrossクレートを導入する
cargo install cross

※cross:コンテナを使っていい感じにクロスコンパイルしてくれるツール

https://github.com/cross-rs/cross

  1. Rustでプロジェクトを作成する
cargo new <project_name>

作成した段階で実行するとHello, World!を出力されるはず。

cd <project_name>
cargo run
  1. クロスコンパイルする
    jetson nanoはアーキテクチャとしてARMを利用しているため、WindowsPC(amd)でそのままビルドしてしまうと実行ファイルを使いまわせない。
    そこでアーキテクチャ間のクロスコンパイルを行う。
cross build --target aarch64-unknown-linux-gnu

上記コマンドだけで勝手にARM用の実行ファイルを作ってくれる。
実行ファイル↓
./target/aarch64-unknown-linux-gnu/debug/<project_name>

  1. 実行ファイルをscpコマンドでjetsonへコピーする
    以下のコマンドでsshを使って実行ファイルをJetson側へコピーする
scp <local_path_to_executable> <remote_user>@<jetson_ip>:<remote_path>
  • <local_path_to_executable> : 実行ファイルのpath
  • <remote_user> : jetsonのログインuser
  • <jetson_ip> : jetsonのIPアドレス
  • <remote_path> : jetson内のどこに格納するか指定するためのpath
  1. jetson上で実行する
    格納したファイル内で実行ファイルを動かす

Discussion