QEMU
chroot
aarch64

qemu + debootstrap で aarch64 バイナリを x86 Linux chroot 環境で動かす(2018 年度版)


背景


  • aarch64 でのレンダラなどの C++ + グラフィックスの開発がしたい.

  • Raspberry Pi3 では非力なのでコンパイルとか実行が遅い

  • クラウドサービスで使える arm だと画面出力が面倒であるしネットワーク越しの転送時間もかかってしまう.

  • Android 用開発ボードもよいが環境設定がめんどう.

手元の今使っているそこそこ性能のよい x86 PC 環境で, home など共有して aarch64 開発とアプリ実行/デバッグしたい.


ソリューション

qemu + schroot でいけます.

追記: Anrdoid 端末 + Termux もよさそう https://termux.com/


環境


  • Ubuntu 16.04 LTS

  • 2018 年時点でそこその性能のよい PC(8 コア, メモリ 32 GB とか)


インストール

http://logan.tw/posts/2017/01/21/introduction-to-qemu-debootstrap/

を参考に debootstrap で簡単にインストールできます.

$ sudo qemu-debootstrap --arch=arm64 xenial arm64-ubuntu

ホスト側で以下のようにして設定ファイルを作ります.

$ echo "[arm64-ubuntu]

description=Ubuntu 16.04 Xenial (arm64)
directory=$(pwd)/arm64-ubuntu
root-users=$(whoami)
users=$(whoami)
type=directory" | sudo tee /etc/schroot/chroot.d/arm64-ubuntu


schroot する

schroot をインストールし, schroot で arm64 環境に chroot します.

$ schroot -c arm64-ubuntu

Voila! 今使っているユーザアカウントで arm64 環境に入れました!


apt でパッケージを入れる.

デフォルトでは vim が入っていないので, apt で入れます.

chroot 内で aarch64 なパッケージを apt で入れることができますが, sudo apt-get ... でインストールしようとすると

no tty present ...

などとエラーがでてしまいます. schroot -c arm64-ubuntu -u root で root ユーザで chroot 環境に入って apt-get するしかないようです.


bashrc の記述

uname -m で arm64 だと aarch64 が却ってきますので, これを用いて x86 と arm で異なる処理を記述するとよいでしょう.

arch_name=`uname-m`

if [ $arch_name == "aarch64" ]; then
... # aarch64 specific setting
fi


TODO



  • X11, OpenGL の設定(xauth?)


  • ARM NEON 命令に対応しているか調べる(2, 3 年ほど前では一部 NEON 命令のエミュレーションに対応していなかった記憶がある)