背景
- aarch64 でのレンダラなどの C++ + グラフィックスの開発がしたい.
- Raspberry Pi3 では非力なのでコンパイルとか実行が遅い
- クラウドサービスで使える arm だと画面出力が面倒であるしネットワーク越しの転送時間もかかってしまう.
- Android 用開発ボードもよいが環境設定がめんどう.
手元の今使っているそこそこ性能のよい x86 PC 環境なので, home など共有して aarch64 開発とアプリ実行/デバッグしたい.
ソリューション
qemu + schroot でいけます.
追記: Android 端末 + Termux もよさそう https://termux.com/
環境
- Ubuntu 16.04 LTS
- 2018 年時点でそこその性能のよい PC(8 コア, メモリ 32 GB とか)
インストール
を参考に 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 命令のエミュレーションに対応していなかった記憶がある)