qemu + binfmt + chroot で AARCH64 環境を構築する.

by syoyo

2014 年から ARM 64bit(AARCH64) な環境が普及されるのが見込まれています.

qemu を利用してお手軽かついち早く Intel x86 環境で AARCH64 環境を作り体験してみましょう.

検証環境 : Ubuntu 12.04.3 LTS(64bit)

qemu と binfmt パッケージをインストールします.


$ sudo apt-get install binfmt-support qemu

https://wiki.debian.org/Arm64Qemu から debian unstable のプレビルト chroot 環境をダウンロードして展開します.


$ sudo mkdir /src/chroots/debian-unstable-arm64
$ sudo tar -zxvf debian-unstable-arm64.tar.gz -C /srv/chroots/

/usr/share/binfmts/qemu-arm64 ファイルを作り以下の記述を行います.


package qemu-user-static
interpreter /usr/bin/qemu-arm64
flags: OC
offset 0
magic \x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\xb7
mask \xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff


$ sudo update-binfmts --import qemu-arm64

として取り込みます.


$ sudo chroot /srv/chroots/debian-unstable-arm64
# uname -m
aarch64

と chroot 環境にログインできて aarch64 と表示されれば成功です.

ホスト環境から直接 AARCH64 バイナリを実行する

ダイナミックリンクバイナリをうまく実行できるようにホスト環境でシンボリックリンクを張っておきます.


$ sudo ln -s /srv/chroots/debian-unstable-arm64/lib/aarch64-linux-gnu /lib/
$ sudo ln -s /src/chroots/debian-unstable-arm64/lib/ld-linux-aarch64.so.1 /lib/

ホスト環境でクロスコンパイラを使ってバイナリを作成, 実行します.


$ cat main.c
#include
int
main(int argc, char** argv)
{
printf("Hello AARCH64!\n");
exit(0);
}

$ aarch64-linux-gnu-gcc main.c
$ ./a.out
Hello AARCH64!

なんとも普通のホスト環境(x86)のバイナリとして ARM64 なバイナリが実行できました. 開発が捗りますね! Happy AARCH64 coding!

TODO

– ユーザの管理はどうするか?
– HOME の共有はどうするか?
– クロスコンパイラ前提なら共有ライブラリ以外の chroot 環境は必要ない?

参考文献

– QEMUのもうひとつの使い方: ユーザーモードエミュレーションとbinfmtとchrootの組み合わせ http://blog.kmckk.com/archives/2342452.html

– Arm64Qemu https://wiki.debian.org/Arm64Qemu

– AARCH64 cross compiler https://launchpad.net/linaro-toolchain-binaries/

Advertisements