LoginSignup
2
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2018-11-29

背景

  • 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 命令のエミュレーションに対応していなかった記憶がある)
2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2