LoginSignup
0
1

Asahi Linux で Waydroid は動かない

Posted at

TL;DR

Waydroid は Asahi Linux では動きません!

少なくとも現状, 良くても… 向こう数年? (Linux on ARM がより普及したり対応が進んだら話は変わるのかな)

Waydroid とは

ggrks.

環境

  • OS: Arch Linux ARM aarch64
  • Host: Apple MacBook Pro (16-inch, M1 Pro, 2021)

ここで waydroidaur を導入しています. 詳しいことは聖書を読みなさい (Waydroid すら Arch 関係は聖書に丸投げしています).

試したこと

binder_linux-dkmsaur を導入してみる

dkms のことよく知らなんですが, exec format error って言われるので恐らく x86_64 のバイナリが降ってきてる気がします. binder_linux-dkms-gitaur でも同様です.

なにもしない!

当然起動しません.

binderfs を有効化した kernel を使う

知らないこと多すぎてしんどかったです (弱者並感).

  1. linux-asahiasahi の PKGBUILD 周りをここから落としてくる
  2. 気合で version を変える
  3. 気合で config を変える
  4. makepkg して update して起動する

色々あったかもしれませんが決定的な出力がコレです.

waydroid log
lxc-start: waydroid: ../src/lxc/conf.c: run_buffer: 322 Script exited with status 126

この後色々試しますが多分これで死んでるので無理です. 諦めは肝心だよ?

version を変える

実質的な linux-asahiasahi の fork なので, これをこのまま makepkg して update すると既存の kernel が置き換えられてしまいます. これはもしも成果物が起動しない kernel だった場合に致命傷になりかねません. ですからまず version から変えることにしたのですね.

で version って何ぞっていうと package name 的に言えば linux-asahi-6.5.asahi15-1 とかの 6.5.asahi15-1 なのですが, kernel 的に言えば 6.5.0-asahi-15-1-edge-ARCH てな具合ですね. ここの -asahi-asahi-binderfs に変更したいです. Arch の何となくの風潮を汲んでの所です.

でやることは… うーんどうだろ. これが正解かは知らないけど, 動きはする.

PKGBUILD
-pkgbase=linux-asahi
+pkgbase=linux-asahi-binderfs

まず pkgbase を変えます. package name 的な文脈です.

PKGBUILD
-_commit_id=asahi-${_rcver}${_rcrel+-rc}${_rcrel}-${_asahirel}
+_commit_id_orig=asahi-${_rcver}${_rcrel+-rc}${_rcrel}-${_asahirel}
+_commit_id=asahi-binderfs-${_rcver}${_rcrel+-rc}${_rcrel}-${_asahirel}
+_srcname_orig=linux-${_commit_id_orig}
 _srcname=linux-${_commit_id}

次に _commit_id 周りを変えます. …思い返すとやんなくても良いかもしれません. もう知ったことではありませんが.

PKGBUILD
 source=(
-  https://github.com/AsahiLinux/linux/archive/${_commit_id}.tar.gz
+  https://github.com/AsahiLinux/linux/archive/${_commit_id_orig}.tar.gz

_commit_id_orig に変えます. こうしないときちんと src を落としてくれません (当然です).

PKGBUILD
 prepare() {
+  mv $_srcname_orig $_srcname
   cd $_srcname

コレの所為で makepkg が壊れやすくなりますが知ったことではありません. $_srcname_orig として展開されるのでこれを $_srcname ってことにしときます.

PKGBUILD
   echo "Setting version..."
+  echo "-binderfs" > localversion.06-pkgrel
   echo "-$_asahirel-$pkgrel" > localversion.10-pkgrel

最後に .**-pkgrel を追加することで kernel 的な文脈で version を変えられます. ちなみに localversion.05-asahi には -asahi って書いてあります. つかこれ .06-pkgrel じゃなくて .06-binderfs って書くべきでしたね. 間違えた…

config を変える

有識者向けに言うと .config (XDG_CONFIG_HOME のことではありません) のことです.

で, 私はなんか怖くて面倒だったので config.edge だけ変えることにしました. 分かりやすいし. いつも使ってるし.

config.edge
 CONFIG_DRM_ASAHI=m
 CONFIG_SUSPEND=y
 
+CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=y
+CONFIG_ANDROID_BINDER_DEVICES=""

これでおしまい. 本当なら scripts/config を使うとかいう話もありますが知りません. 変わらん変わらん…

あ, あと, PKGBUILD の checksum を飛ばさないと検証に落ちるので注意.

PKGBUILD
 sha256sums=('633796ecdc1e210565a67b20f8fdaa748204c32275403212a30f735b8de66abd'
             '46917e449d51ce37675442cd280892f6521b719bdb75a05b558d456ad7fc9193'
-            '5cbdda1262f989a5247f4ef70690b569f9be8212bf8f576242bf6ac69036bddf')
+            'SKIP')
 b2sums=('f1e8ca0919f218dce288a9f024fd211239212a17d7c19cf5f43736519fc6e7b7ef90853c3d80485ada2f2b2c0d91954c543f8f52d517317f25deed118cd8a0cd'
         '8b3089d22d0b68e9b0c20a5e8f7ebe2626ef43cdc7053a94590ea3ca25417e76866e220ae98ff184e4912033d877eb89fd3c64bbe476889696220c5dd3b05e97'
-        '01a8b3b7e3c7bd528f6d07d2b581b8a56688305d42fdd0b1555fd26319c4369e2357bcaa8434a1a5e3123aa9fdc6f1a24de4813b819397af89ba8d0c5e896228')
+        'SKIP')

binder (legacy) を有効化した kernel を使う

config.edge
 CONFIG_ANDROID=y
+CONFIG_ANDROID_BINDER_IPC=y
+CONFIG_ANDROID_BINDERFS=n
+CONFIG_ANDROID_BINDER_DEVICES="binder,hwbinder,vndbinder"

これでおしまい. まあ起動はしませんでした.

Waydroid を downgrade してみる

(このへんかな… (うろ覚え))

なんか Waydroid を downgrade すると動くみたいな話を聞いた気がしたので試してみました. 動きませんでした. sudo rm -rf /var/lib/waydroid && sudo waydroid init -f とかしたんだけどね. ままならないね.

ashmem を使うために anbox-modules-dkmsaur を導入してみる

なんか make に失敗する. dkms の install か何かでコケてたので多分救いようは無さそう. ただ, aarch64 はサポートしてる表記でした.

anbox-modules-dkms-gitaur も試しましたが, exec format error が出てたのでこっちもどうしようもなさそうです.

ashmem を有効化した kernel を使う

ashmem は多分今で言う memfd で, linux 5.18 で完全に削除された古の機能です. なので, この削除パッチを復元して動かそうとかいう…

(詳細は issue 参照)

  1. これを落とす
  2. patchutilsx86_64 extrainterdiff を使って削除パッチを追加パッチに変換: interdiff -q remove_ashmem.patch /dev/null > enable_ashmem.patch
  3. 気合でパッチを当てる
  4. makepkg して update して起動する

ちなみに動きませんでした. そして最後まで例のエラーはつきまといましたとさ.

パッチを当てる

よくわかんない.

PKGBUILD
+  echo "Applying patch (enable ashmem)"
+  patch -p1 -i ../../enable-ashmem.patch
+
   echo "Creating build directories..."
   mkdir -p build/base build/edge

あとついでに言うとそもそもこれうまく行ってなさそう (modprobe できないし /dev/ashmem も作られない).

結論

ARM は一応サポート環境ではありますが…

We won't support Asahi Linux until android grows the capability to run with 16K pages (and we manage to upgrade to that version)

Waydroid は Asahi Linux では動きません. 少なくとも私の力では.

おしまい.

0
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1