>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
C

ArmやRISC-Vプロセッサで重いx86ゲームやソフトウェアを実行する方法

新しいArmシングルボードコンピュータまたは高性能なRISC-Vサーバーを購入し、Linuxをインストールして...壁にぶつかった経験はないでしょうか。お気に入りのSteamゲーム、業務用ソフトウェア、Wineなどが全く動作しない。它们はx86_64用にコンパイルされていますが、アーキテクチャが全く異なります。こんな場合、通常はQEMUを提案されますが、ゲーム用途ではかなり厳しい体験になります。遅延が酷すぎて、むしろ切った方がましになるでしょう。

box64プロジェクトはこの問題をエレガントに解決します。単なるエミュレータではなく、エミュレートされたアプリケーションにシステムのネイティブライブラリを「供給」できるレイヤーです。

Official logo

このエミュレータの特別な点

ほとんどのエミュレータは、すべてのCPU命令を忠実に変換しようとします。これは信頼性はありますが、とても低速です。box64の開発者(ptitSebとして知られています)は別のアプローチを取りました。

x86_64プログラムがシステム関数を呼び出す時—例えばOpenGLでグラフィックを描画したい場合や、libcでメモリを確保したい場合—box64はこの呼び出しを仮想環境内でエミュレートしません。その代わり、呼び出しをデバイスのネイティブライブラリ(Arm64またはRISC-V)に直接リダイレクトします。

結果として、重い計算処理は「ネイティブ」ハードウェアの負担となり、アプリケーションのロジックだけがエミュレートされます。これにより 엄청난速度向上が得られます。開発者のベンチマークによると、動的再コンパイラ(DynaRec)と組み合わせることで、通常のインタープリターより5~10倍高速に動作します。

実行可能なもの

プロジェクトの互換性リストは非常に大きいです。何より、ゲームユーザーや specialized ソフトウェアを使用している人を対象としています。

  1. Steamゲーム。Raspberry Pi 4や5で、Armにポートされたことのないゲームを動作させることができます。
  2. WineとProton。これによりWindowsアプリケーションを実行する道が開けます。box64と「弟分」のbox86(32ビットプログラム用)の両方を持っていれば、ほぼあらゆるソフトウェアを動作させることができます。
  3. Unityゲーム。这里にはニュアンスがあります:多くの場合、最近のOpenGLが必要です。一部のボードでは、環境変数を使ってドライバーを「だまして」ゲームを動作させる必要があります。

興味深いことに、このプロジェクトはLoongArchのような特定のアーキテクチャもサポートしています。コミュニティがハードウェア開発を積極的に支援していることが明らかです:謝辞リストにはAdlink、Pine64、さらにはDeepin開発チームも含まれています。

実際の動作

このツールの使用法は驚くほどシンプルです。すでにプロジェクトをコンパイルしている場合(リポジトリの説明は詳細ですが、多数の依存関係をインストールする必要があります)、起動は次のようになります:

box64 ./my_x86_64_program

アーキテクチャをunameで確認するインストールスクリプト(例えばGOGからのもの)を実行する必要がある場合、次のように行えます:

box64 script.sh

内部ではbox64がシステム応答を偽装し、スクリプトは通常のx86プロセッサで実行されていると認識します。

毎回コマンドを入力したくない人のために、box64というオプションがあります—すべての実行可能ファイルが自動的にエミュレータに拾われる,熟悉のシェルです。

ニュアンスと落とし穴

すべてのものが「箱から出したまま」完璧なフレームレートで動作するとは思わないでください。

まず、キャッシュについて。最初の実行時に、box64は最適化されたコードを生成してbox64キャッシュに保存します。これにより以降の実行が高速化されますが、最大2GBのディスク容量を「消費」する可能性があります。容量が限られている場合は、設定を通じてこの動作を制限する必要があります。

次に、グラフィックについて。Raspberry Piでは、次のような回避策を設定することがよくあります:

MESA_GL_VERSION_OVERRIDE=3.2 BOX64_DYNAREC_STRONGMEM=1 box64 ./game

これは、x86とArmのメモリ処理の違いによるフリーズを避けるために必要です。

3番目に、32ビットアプリケーションについて。Box64は64ビットバイナリのみで動作します。古いゲームを動作させる必要がある場合は、box86をインストールする必要があります。box32の開発は現在進行中ですが、開発者は正直にまだ実験的であると述べています。

試す価値はあるか

Arm Linuxラップトップに移行したい開発者、またはRISC-Vボードを持っている愛好家—Definitely yes。このニッチで最もアクティブでパフォーマンスの高いプロジェクトです。

Box64は完全な仮想化を置換しようとはしていません単に、本来存在しない場所で Familiar なソフトウェアを使用する能力を提供するだけです。プロジェクトはCで書かれており、非常にコンパクトで設定も柔軟です。

もちろん、ドキュメントは様々なファイルに散らばっていて、Wineを設定するためにマニュアルを掘り下げる必要がありますが、結果はそれに値します。パワフルなデスクトップ向けのソフトウェアが数十ドルの小さなボードで動作するのを見ると、小さな魔法のような気分になります。

ソースコードとビルド手順は、公式リポジトリptitSeb/box64で確認できます。ほぼ毎日更新されているゲームの互換性リストへのリンクもあります。

関連プロジェクト