Quantcast
Channel: mattintosh note
Viewing all articles
Browse latest Browse all 880

Raspberry Pi (ARM) で i386 Linux のバイナリを実行する

$
0
0

Raspberry Piで Nero AAC Codec(neroAacEnc)を使えるようにしてみた。

f:id:mattintosh4:20160911023334p:plain

ただし、激遅である。

QEMUのビルド

Arch Linux ARM で i386バイナリを実行するためにまずは QEMUのビルドから始める。実用性が低いためか、Pacmanにはまだ用意されていない。Raspbian や Ubuntu MATE for Raspberry Piとかでも必要なパッケージをインストールしておけばビルドできる(はず。Ubuntu MATE は確認済み)。Python 2.x 必須。

git clone httpshttp://git.qemu.org/git/qemu.git
mkdir qemu/build
cd qemu/build
../configure --prefix=/opt/local/qemu--target-list=i386-linux-user--python=/usr/bin/python2
make
make install

i386GNU C Library を用意する

i386GNU C Library が必要になるが、ビルドするのが少々面倒。i386Ubuntuなどがあるならそこから引っ張ってくるという手もある。

ld-linux.so.2どっかに無かったかな〜と思って locateしてみたら Chromiumのソースディレクトリに入ってた。格納先のコードを見てみたら、どうやら Chromiumのビルド用にバイナリ一式を引っ張って来るらしい。ということはこれでビルドの手間を省ける。

元々このソースは本家ではなく、Raspberry Piの Arch Linux ARM 用として拾ってきたもの。https://aur.archlinux.org/packages/chromium-dev/に行けば最新版が手に入る。Chromium本家の方(https://chromium.googlesource.com/chromium/src.git/+/master/build/linux/)でもソースは入手できるが、別途、GYP が必要になる。AUR の方はバイナリがそのまま落ちてくるので楽。難点を挙げれば公式も AUR もファイルサイズがでかい。

AUR のソースの場合、install_script.pyを実行すれば chromium/build/linux/debian_wheezy_i386-sysrootが出来るのであとはそれを拝借する。

cd build/linux/sysroot_scripts
python2 install_script.py --arch i386

本家の方は GYP があれば恐らく AUR と同じようにバイナリが落ちてくるんだろうけど、そもそも install-sysroot.pyhttps://chromium.googlesource.com/chromium/src/build/+/master/linux/sysroot_scripts/install-sysroot.py)にバイナリのダウンロードに必要な URL が書かれているのでそれを使った方が手っ取り早いし低コスト。

install-sysroot.py内の subprocess.callに合わせて書くとこんな感じになる。こちらと AUR の方では i386sysrootの間が -_という違いがあるのでパス補完を使わない人は注意した方がいいかもしれない。

curl --fail--retry3-L-O'https://commondatastorage.googleapis.com/chrome-linux-sysroot/toolchain/24f935a3d8cdfcdfbabd23928a42304b1ffc52ba/debian_wheezy_i386_sysroot.tgz'

展開してあとは qemu-i386 -L /path/to/debian_wheezy_i386_syrootとでもしておけばよい。

mkdir-p debian_wheezy_i386_sysroot
tar xf debian_wheezy_i386_sysroot.tgz -C debian_wheezy_i386_sysroot

ツールチェインを切り替えることはあまり無いので自分の場合は aliasでツールチェインを固定している。-Lオプション以外に QEMU_LD_PREFIX環境変数を使う方法もある。

alias qemu-i386="/opt/local/qemu/bin/qemu-i386 -L /opt/local/debian_wheezy_i386_sysroot"

今回、Raspberry Pii386のプログラムを実行したかったのは CD の取り込みから WAV 抽出まで自動化したのに、AACへの変換で困っていたから。Libavcodecなんかのフリーの AACコーデックだと音質があまり良くない(気がする)。本当は qaac で Appleの CoreAudio を使いたかったのだけど、Raspberry Pii386の WINE を実行できる環境を構築するにはまだ時間が足りない。

Raspberry Pi世界累計出荷台数1,000万台突破おめでとう!!


Viewing all articles
Browse latest Browse all 880

Trending Articles