私はTermuxでQEMUを動かしてLinux仮想マシンをインストールするで、Androidスマホ上でTermuxを使って仮想マシンを動かす問題について書きました。結論は、とにかく遅いです。
KVMがない場合は、すべてソフトウェアエミュレーションに頼ることになります。その結果、20年前のWindows XPシステムくらいしか動かせず、現代的なOSは到底まともに動きません。
Google Tensorプロセッサを搭載したスマホでは、Android 15以降にpKVMが導入されました。これはAVFフレームワークの下層でサポートされている技術です。
現時点では、Android 16の実験的なDebian Linux Terminalを除き、一般のAPPはpKVMへアクセスできません。pKVMを有効化するにはRoot権限が必要です。
1. パッケージをインストールする#
KVMアクセラレーションがあるなら、同じアーキテクチャの仮想マシンを実行するべきです。Termux開発者によると、このqemu-system-aarch64-headlessパッケージを使うことで、pKVMで高速化された仮想マシンを利用できます。
以下のパッケージをインストールします。ARMアーキテクチャのマシンでは、UEFIを有効にするのがよいです。
pkg install qemu-system-aarch64-headless qemu-utils qemu-common ovmf sudoグラフィカル環境にはVirt Managerがなく、Libvirtサービスもおそらく動かないので、AVNCを使って仮想マシンの画面へアクセスするしかありません。
2. TermuxでLinux仮想マシンを作成する#
Ubuntu ARMのISOをダウンロードし、Termuxのホームディレクトリに置きます
KVMが存在することを確認します
sudo ls /dev/kvm- 仮想ディスクを作成します
qemu-img create -f qcow2 ubuntu.qcow2 32G- UEFIを保存するファイルを作成します
truncate -s 64m varstore.img
truncate -s 64m efi.img
dd if=$PREFIX/share/qemu/edk2-aarch64-code.fd of=efi.img conv=notrunc- 起動スクリプトを追加します
touch startubuntu.sh
chmod +x startubuntu.sh
vim startubuntu.sh- 内容は以下のとおりです
qemu-system-aarch64 -M virt \
-enable-kvm \
-drive if=pflash,format=raw,file="efi.img",readonly \
-drive if=pflash,format=raw,file="varstore.img" \
-smp cpus=2 \
-m 1024 \
-cpu host \
-nographic \
-netdev user,id=n1,hostfwd=tcp::2222-:22 -device virtio-net,netdev=n1 \
-drive file=ubuntu.qcow2 \
-boot d \
-vnc :0 \
-cdrom ubuntu-24.04.3-live-server-arm64.iso- 実行時にはsudoを付けます。
sudo ./startubuntu.shうまくいけば、AVNCでlocalhost:59000を開いて仮想マシンの画面を見られます。
奇妙なことに、KVMを有効にしなければ起動できますが、有効にするとqemu-system-aarch64: Failed to put registers after init: Invalid argumentエラーに遭遇します。
chrootに切り替えて、その中でKVMを動かせば、成功率が上がるかもしれません。


