見出し画像

Pixel9でChromiumOS を起動するメモ

はじめに

Android 15 QPR2 Beta2になり、Android 仮想化フレームワーク (AVF)を使用したカスタムVMを簡単に利用することが可能となるVmLauncherがStock ROMに含まれたので、これを利用してChromiumOSを起動する方法のメモを残しておきます。


前提条件

カスタムVMを利用するための前提は以下となります。

  • Android 15 QPR2 Beta1がインストールされていること

  • BootLoaderがUnlockされていること

  • root権限が使用できること

  • PixelシリーズでpKVMが有効となっていること
    (fastboot oem pkvmの結果でpKVM is enabledであること)

  • SELinuxが無効になっていること(VmLauncher起動条件)

基本的に対象機器は、Pixel6以降の機種になるかと思います。
(私はPixel 9 Pro Foldで試しています)

実装してみる

基本的には「Custom VM」の内容通り実行すれば動きますが、少しノウハウがあるので細かく記載していきます。

ChromiumOSを準備する

Graphical VMsの「Download ChromiumOS from build server」の項目部分に記載があります。

Googleでテストしている「R128-15926.0.0.」を使う場合は、「https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public/R128-15926.0.0/chromiumos_test_image.tar.xz」をダウンロードしてください。

最新のバージョンをダウンロードする場合は、下記手順になります。

$ URL=https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public 
$ LATEST_VERSION=$(curl -s ${URL}/LATEST-main) 
$ curl -O ${URL}/${LATEST_VERSION}/chromiumos_test_image.tar.xz

Linuxの別環境でDownloadしてadb pushでPixelの/data/local/tmpへ送っても良いですし、Termuxとかをインストールしていれば端末上で直接ダウンロードしてもOKです。

xzを解凍したchromiumos_test_image.binを、端末の/data/local/tmpへ配置してください。

以下は、adb shellで直接ダウンロードする場合の例(Termuxを使用している場合。)

・TermuxのcurlにPathを通す
comet:/data/local/tmp # export PATH=/data/data/com.termux/files/usr/bin:$PATH

・/data/local/tmpにchromiumos_test_image.tar.xzをDownloadする
comet:/data/local/tmp # URL=https://storage.googleapis.com/chromiumos-image-archive/ferrochrome-public
comet:/data/local/tmp # LATEST_VERSION=$(curl -s ${URL}/LATEST-main)
comet:/data/local/tmp # curl -O ${URL}/${LATEST_VERSION}/chromiumos_test_image.tar.xz

・chromiumos_test_image.tar.xzを解凍
comet:/data/local/tmp # tar Jxfv chromiumos_test_image.tar.xz
chromiumos_test_image.bin

vm_config.jsonファイルの作成と配置

Create a guest VM configurationの項目になります。
下記の内容の「vm_config.json」ファイルを作成・配置をします。

{
    "name": "cros",
    "disks": [
        {
            "image": "/data/local/tmp/chromiumos_test_image.bin",
            "partitions": [],
            "writable": true
        }
    ],
    "protected": false,
    "cpu_topology": "match_host",
    "platform_version": "~1.0",
    "memory_mib": 8096,
    "debuggable": true,
    "console_out": true,
    "connect_console": true,
    "console_input_device": "hvc0",
    "network": true,
    "input": {
        "touchscreen": true,
        "keyboard": true,
        "mouse": true,
        "trackpad": true,
        "switches": true
    },
    "audio": {
        "speaker": true,
        "microphone": true
    },
    "gpu": {
        "backend": "virglrenderer",
        "context_types": ["virgl2"]
    },
    "display": {
        "scale": "0.77",
        "refresh_rate": "30"
    }
}

作成したらPixel端末へ送ります。
$ adb push vm_config.json /data/local/tmp

ここまで出来たらあとはVmLauncherを起動するだけです。

VmLauncherの起動

後は起動するだけです。「Running the VM」の項目通り進めます。
・・・が、VmLauncherはデバッグアプリ扱いだからかSELinuxを無効化しないと起動しないです。セキュリティがかなり落ちますのでご注意ください。

(1)adb shell起動
> adb shell
comet:/ $ su

(2)権限付与
comet:/ # pm grant com.google.android.virtualization.vmlauncher android.permission.USE_CUSTOM_VIRTUAL_MACHINE

(3)SELinux 無効化
comet:/ # setenforce 0

(4)VmLauncherの起動
comet:/ # am start-activity -a android.virtualization.VM_LAUNCHER

※起動時は画面ロックを解除しておいてください。

起動画面スクショ

起動直後
Foldのメイン画面表示で表示させたabout ChromiumOS画面
Diagをかけてる画面。CPU負荷テストは完走せず、
Android側のOOMでcrosvmが落とされてしまいました・・・。

あとがき

今回の実装により、Android端末により簡単にVM環境を降り扱えるようになりました。

今回は「ChromiumOS」を取り上げましたが、同じページの説明のあるDebianもデスクトップの設定を行うことでGUI起動することが出来ています。今後様々なOSでの起動のチャレンジや、launcher自体の最適化が進んでいくと思うので期待しています。


いいなと思ったら応援しよう!