我在Termux跑QEMU安裝Linux虛擬機討論過用Termux在Android手機跑虛擬機的問題,結論是慢的要命。
沒有KVM,全靠軟體模擬,下場就是只能跑20年前的Windows XP系統,現代作業系統根本帶不動。
搭載Google Tensor處理器的手機,在Android 15之後引入了pKVM,也就是AVF框架底層支援的技術
目前除了Android 16實驗性的Debian Linux Terminal以外,一般APP不能存取pKVM。需要取得Root權限才可以啟用pKVM。
1. 安裝套件#
有KVM加速,應該執行同架構的虛擬機。根據Termux開發者說法,使用這個qemu-system-aarch64-headless套件,可以取得pKVM加速的虛擬機。
安裝以下套件。ARM架構的機器,最好啟用UEFI。
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,也許成功率會上升?