armv7でX86バイナリを実行する

armv7でX86バイナリを実行する

Raspberry Pi2でSNBC USBプリンタを実行しようとしています。

これを行うには、SNBC USBプリンタのフィルタバイナリを/usr/lib/cups/filterarmv7ダメだろうけど、気になって試してみた、カップが言った/usr/lib/cups/filter/rasterorp3150 failed

私はインターネットで解決策を見つけ、人々はQemuの使用を提案しました。ただし、これはx86プラットフォーム全体のためのものです。 x86バイナリをarmバイナリに簡単に変換する方法はありますか?

しかし、x86バイナリを同等のバイナリhexeditに変換するツールを使用するのは良い考えですか?armv7(opcode変換)

では、誰もがこれを行う方法についてのアイデアを提供できますか?

答え1

あなたは簡単に切り替えることができません。x86ARMのバイナリ。製造元からソースコードやARMバイナリを取得できず、実際にPi2でプリンタを使用したい場合は、Qemuメソッドは正しい方法ですが、非常に遅くなる可能性があります。 Qemuはシステム全体のシミュレーションを実行できますが、単一プロセスシミュレーションにも非常に効率的です。

私はあなたがPi2にどんな種類のDebian派生物を持っていて(これがRaspbianに適用されるのかわかりません)、あなたが持っているバイナリはi386(64ビットであればそれをamd64使う)ものだと仮定します。まず、i386外部スキーマとして追加します。

sudo dpkg --add-architecture i386
sudo apt-get update

ldd次にバイナリを実行し、通常必要なライブラリを追加します。

sudo apt-get install libc6:i386

そして:i386サフィックスが追加された他のすべて。インストールされているパッケージが削除されないことを確認してください。必要なすべてが複数のアーキテクチャをサポートすることを願っています。 (そうでなければ、残りは機能しません。)

これを完了した後にまだインストールしていない場合は、インストールしてqemu-user-static次のようにプログラムを実行できます。binfmt-supportqemu-i386-static

qemu-i386-static /usr/lib/cups/filter/rasterorp3150

実際にbinfmt-support直接実行しなければならないので(指示どおり)トビースペート):

/usr/lib/cups/filter/rasterorp3150

binfmt-supportQemuはこれを透明にするために使用されます。)

使いたくない場合は、別の場所にbinfmt-support移動しrasterorp3150てください。

sudo mv /usr/lib/cups/filter/rasterorp3150 /usr/lib/cups/filter/rasterorp3150.x86

以下を含むスクリプトをインストールします。

#!/bin/sh
exec qemu-i386-static /usr/lib/cups/filter/rasterorp3150.x86 "$@"

のように/usr/lib/cups/filter/rasterorp3150

必要に応じて、これらすべてに対してchrootを設定できます。debootstrapその--foreignオプションを参照してください(chrootは自動的にQemuを有効にできます)。

関連情報