Ubuntu 20.04でAndroid-x86を動かす!KVM仮想環境からGRUB直接ブートまで徹底検証

1.概要

Ubuntu 20.04環境をベースに、PC上でAndroid OSを動作させるプロジェクト「Android-x86(バージョン 8.1-r6)」の動作試験を行いました。今回は、検証用として以下の3つのアプローチで導入を試みています。

方法①: KVMによる仮想マシン上での実行(Legacy BIOS)
方法②: 物理PCのGRUBから直接カーネルをブート(Legacy BIOS)
方法③: 物理PCのGRUBから直接カーネルをブート(UEFI環境 / 英語配列ノートPC)

結論から言うと「GRUBによる直接ブート」が圧倒的に快適に動作します。それぞれの構築手順と、実際に触って見えてきた注意点や課題をまとめました。
今回実施した3つの検証環境における特徴、メリット・デメリットの比較は以下の通りです。
検証環境① KVM(仮想環境)② BIOS PC(物理)③ UEFI PC(物理)
主な特徴動作は遅い [1]実機で快適 [1]実機で高速 [1]
キーボード日本語対応 [1]日本語対応 [1]英語配列 [1]
終了方法正常に終了可能 [1]リセットが必要 [1]リセットが必要 [1]
メリット安全、手軽 [1]高性能 [1]高性能 [1]
デメリット低速 [1]終了不可 [1]終了不可 [1]

2.詳細

(1)  KVMによる仮想マシン上での実行(Legacy BIOS)

(a) KVM環境構築

ubuntu-20.04の標準を導入しました。

(b) KVM設定

参考資料を参照して、KVM上にandroid-x86を導入して動作します。
Memory=2GB, CPU=2, Disk=20GBに設定し、NICのデバイスのモデルをハイパーバイザーのデフォルト設定にしました。android-x86はNIC接続に対応していないようで、Wifi接続だけ対応しています。KVM環境には既定値でwifiのエミュレート機能があるようです。

(c) android-x86(i686版)の導入

参考資料の2つの導入方式の中で、最初に記述があるauto_installationが楽です。もう一つの手順でも導入をしましたが、ある程度のスキルが必要です。

(d) loginと試験

androidを導入後、googleアカウントでログインして試験できます。

(2) 物理PCのGRUBから直接カーネルをブート(Legacy BIOS)

RegacyBIOS上のubuntuのgrubを利用してandroid-x86を動作試験しました

android-x86をubuntu-20.04上のkvm環境で動作させましたが、android-x86はlinuxであり、grubで起動できると思いました。参考資料を参照して、androidのrpmファイルから構築をして動作確認を行いました。利用したPCはuefi非対応のBIOS搭載PCです。android-x86-8.1-r6.i686.rpmをdownloadして、ubuntu上に展開して、grubでandroidのkernelを直接起動しました。

実行速度は向上します。しかし、日本語キーボードの設定は同じです。仮想マシンと異なり、終了方法を見つけられませんでした。手段なく、PC側でリセットによる終了を選択しました。uefi非対応のBIOS搭載PCでは、android-x86-8.1-r6.x86_64.rpmは動作しません。uefi対応PCで試験を実施予定です。

(a) rpmの展開
ubuntu-20.04に/androidのディレクトリを作成して、そこにrpm内容をすべて展開します。また、dataディレクトリも/androidに作成しました。下記3つのディレクトリが作成されました。参考資料を参照願います。

/android/android-8.1-r6
/android/usr
/android/data

(b) grub設定
参考資料とは異なり、直接grubのエントリーを/etc/grub.d/40_customに作成しました。

menuentry "Android 8.1 r6" {
    linux /android/android-8.1-r6/kernel root=/android/android-8.1-r6/data
    initrd /android/android-8.1-r6/initrd.img
    }

上記エントリーを作成後、sudo update-grubを実行して適用します。

(c) loginと試験
androidを導入後、googleアカウントでログインして試験できます。

(3)  物理PCのGRUBから直接カーネルをブート(UEFI環境 / 英語配列ノートPC)

uefiBIOS上のubuntuのgrubを利用してandroid-x86の動作試験をしました

android-x86をubuntu-20.04上で動作試験をしました。Jumper NotePCを利用。uefi対応で互換モードをサポートしない英語キーボードのPCです。android-x86-8.1-r6.x86_64.rpmをdownloadして、ubuntu上に展開して、grubでandroidのkernelを直接起動しました。これらの設定は前回の本ブログandroid-x86 on ubuntu-20.04 biosPC(続編)と同じです。

このPCはNotePCで配列が英語キーボードなので日本語キーボード問題は発生しません。また、仮想マシンと異なり、終了方法を見つけられない点も同じでした。PC側でリセットによる終了を選択しました。

当初、android-x86を利用してLINEを利用できないかと考えましたが、SIMがないので新規登録もできず、android-x86はメールアドレスによる認証もLINEで利用できません。android上のアプリをPCでも利用したい場合を見つけるのが難しいと感じました。

導入手順はueif非対応のBIOS搭載PCと全く同じです。

(a) rpmの展開
(b) grub設定
(c) loginと試験

androidのrpmファイルから構築を経験して、ubuntu-20.04をインストールした領域に導入する必要はないように感じています。partitionを初期化して、androidのrpmを展開後、grubのブート設定をできると良いので、android-x86を簡単にマルチブートで利用できそうです。androidがupdateされた場合は、再導入での対応になりそうです。

3.所見

Gurbでandroidが起動できることからLinuxそのものと言えます。androidをPCで操作する必要がある場合は、役に立つ情報になります。

参考

[本ブログ内参照]
ubuntuとQEMU/KVMでMacOSを動かしました
x86_64のLinuxMint/Ubuntu環境でARM64(KVM/QEMU)の仮想マシンを高速に動作させる方法
ubuntuでlxd/lxcの動作確認をしました
[外部サイト参照]
Windows PCにAndroid-x86をインストールして再利用する
Android-x86
Windows PC で Ubuntu と Android-x86 をマルチブートする
タブレットPC(T90Chi)でLinuxMintとAndroid-x86をデュアルブートにしてみる

コメント