快轉到主要內容

Termux透過pkVM加速QEMU虛擬機執行

· 民國114年乙巳年
·
切換繁體/簡體 ·
分類 智慧型手機 Termux教學
標籤 Termux QEMU-KVM
目錄

我在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。

pkg install qemu-system-aarch64-headless qemu-utils qemu-common ovmf sudo

圖形界面沒有Virt Manager,Libvirt服務應該跑不起來,於是我們只好用AVNC存取虛擬機畫面。

2. Termux 建立Linux虛擬機
#

  1. 下載Ubuntu ARM的ISO,放到Termux的家目錄

  2. 確認KVM存在

sudo ls /dev/kvm
  1. 建立虛擬磁碟
qemu-img create -f qcow2 ubuntu.qcow2 32G
  1. 建立保存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
  1. 新增開機指令稿
touch startubuntu.sh

chmod +x  startubuntu.sh

vim startubuntu.sh
  1. 內容如下
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
  1. 執行的時候要加上sudo。
sudo ./startubuntu.sh

順利的話可以用AVNC開啟localhost:59000看到虛擬機畫面。

詭異的是不啟用KVM可以開機,但啟用的話就會遇到qemu-system-aarch64: Failed to put registers after init: Invalid argument錯誤。

如果改用chroot,再於裡面跑KVM,也許成功率會上升?

參考資料
#

相關文章


感謝您的閱讀。我寫作是為了誠實表達想法,而不是追逐社群互動與流量。我很樂意傾聽你在仔細閱讀我文章之後的心得。若有內容勘誤 or 技術問題 or 回饋想法,歡迎透過本站「關於」頁面的Email與我聯絡。