ラズパイのCPUはarm
ラズベリーパイに搭載されている、CPUはArm製のものでAArch64というアーキテクチャがつかわれております。そのためx64といったアーキテクチャの異なるバイナリを直接実行することはできません。つまり、使いたいソフトがあってもArm用にビルドしたものでなければ使えないわけです。ですがこの記事では、そういったx64向けにしかビルドされていないソフトでもラズパイで実行できしまう便利なソフトウェアを紹介します。
環境
ラズベリーパイ4の8GBモデルを使って試しました。

Box64
概要
box64は、ユーザー空間で動作するx86_64エミュレータです。OpenGLやSDL、LIBCなどを含めた様々なライブラリをネイティブで使うため、他のエミュレータと比べてパフォーマンスが良いといった特徴があります。
ちなみに、これをAndroidに移植したBox64Droidというプロジェクトもあります。
インストール方法
自分でビルドするか、リポジトリを追加することでインストールできます。
apt
sudo wget https://ryanfortner.github.io/box64-debs/box64.list -O /etc/apt/sources.list.d/box64.list
wget -qO- https://ryanfortner.github.io/box64-debs/KEY.gpg | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/box64-debs-archive-keyring.gpg
sudo apt update && sudo apt install box64-arm64 -y
ビルド
デバイスによってビルドオプションが異なるため、ドキュメントを見てビルドすることをお勧めします。
ラズパイ4の例
git clone https://github.com/ptitSeb/box64
cd box64
mkdir build; cd build; cmake .. -D RPI4ARM64=1 -D CMAKE_BUILD_TYPE=RelWithDebInfo
make -j4
sudo make install
初回インストール時にsystemd-binfmtをリスタートする必要があります。
sudo systemctl restart systemd-binfmt
使い方
インストールが完了すれば、x64バイナリが実行された際に自動的にbox64を介してプログラムが実行されるようになります。
./your-x64-program
先頭にbox64を付けて実行することも可能です
box64 ./your-x64-program
パフォーマンスについて
C++でベンチ用のコードを書いて、それぞれネイティブ(AArch64)とBox64で動かしてみました。
# x64
real 0m15.828s
user 0m15.667s
sys 0m0.169s
# AArch64
real 0m14.946s
user 0m14.944s
sys 0m0.000s
上がx64で、下がAArch64のバイナリを動かした実行結果です。
差は1秒以内で、かなりパフォーマンスが良いといえます。
その他
32ビットバイナリの実行について
box64では対応していませんが、box86という別のプロジェクトで対応しています。
Steamについて
box64またはbox86を使用してSteamを起動することもできます。またSteamのメモリ消費は多いらしく、4GB Ramでは起動すらしなかったりするそうです、またSteamをSmallモードで実行することが推奨されています。
詳細については、Readmeをご覧ください。
Wine等のWindows互換レイヤのサポート
Box64ではWine64やProtonもサポートしています。ただ、Wine64のコンポーネントには32ビットのプログラムも含まれており、それを実行するためにBox86が必要です。なので、Wineを完璧に動作させるにはBox64とBox86をインストールするとよいでしょう。
コメント