TL;DR
Waydroid は Asahi Linux では動きません!
少なくとも現状, 良くても… 向こう数年? (Linux on ARM がより普及したり対応が進んだら話は変わるのかな)
Waydroid とは
ggrks.
環境
OS: Arch Linux ARM aarch64
Host: Apple MacBook Pro (16-inch, M1 Pro, 2021)
ここで waydroid
aur を導入しています. 詳しいことは聖書を読みなさい (Waydroid すら Arch 関係は聖書に丸投げしています).
試したこと
binder_linux-dkms
aur を導入してみる
dkms のことよく知らなんですが, exec format error って言われるので恐らく x86_64 のバイナリが降ってきてる気がします. binder_linux-dkms-git
aur でも同様です.
なにもしない!
当然起動しません.
binderfs を有効化した kernel を使う
知らないこと多すぎてしんどかったです (弱者並感).
-
linux-asahi
asahi の PKGBUILD 周りをここから落としてくる - 気合で version を変える
- 気合で config を変える
- makepkg して update して起動する
色々あったかもしれませんが決定的な出力がコレです.
lxc-start: waydroid: ../src/lxc/conf.c: run_buffer: 322 Script exited with status 126
この後色々試しますが多分これで死んでるので無理です. 諦めは肝心だよ?
version を変える
実質的な linux-asahi
asahi の 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 の何となくの風潮を汲んでの所です.
でやることは… うーんどうだろ. これが正解かは知らないけど, 動きはする.
-pkgbase=linux-asahi
+pkgbase=linux-asahi-binderfs
まず pkgbase を変えます. package name 的な文脈です.
-_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
周りを変えます. …思い返すとやんなくても良いかもしれません. もう知ったことではありませんが.
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 を落としてくれません (当然です).
prepare() {
+ mv $_srcname_orig $_srcname
cd $_srcname
コレの所為で makepkg が壊れやすくなりますが知ったことではありません. $_srcname_orig
として展開されるのでこれを $_srcname
ってことにしときます.
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_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 を飛ばさないと検証に落ちるので注意.
sha256sums=('633796ecdc1e210565a67b20f8fdaa748204c32275403212a30f735b8de66abd'
'46917e449d51ce37675442cd280892f6521b719bdb75a05b558d456ad7fc9193'
- '5cbdda1262f989a5247f4ef70690b569f9be8212bf8f576242bf6ac69036bddf')
+ 'SKIP')
b2sums=('f1e8ca0919f218dce288a9f024fd211239212a17d7c19cf5f43736519fc6e7b7ef90853c3d80485ada2f2b2c0d91954c543f8f52d517317f25deed118cd8a0cd'
'8b3089d22d0b68e9b0c20a5e8f7ebe2626ef43cdc7053a94590ea3ca25417e76866e220ae98ff184e4912033d877eb89fd3c64bbe476889696220c5dd3b05e97'
- '01a8b3b7e3c7bd528f6d07d2b581b8a56688305d42fdd0b1555fd26319c4369e2357bcaa8434a1a5e3123aa9fdc6f1a24de4813b819397af89ba8d0c5e896228')
+ 'SKIP')
binder (legacy) を有効化した kernel を使う
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-dkms
aur を導入してみる
なんか make に失敗する. dkms の install か何かでコケてたので多分救いようは無さそう. ただ, aarch64 はサポートしてる表記でした.
anbox-modules-dkms-git
aur も試しましたが, exec format error が出てたのでこっちもどうしようもなさそうです.
ashmem を有効化した kernel を使う
ashmem は多分今で言う memfd で, linux 5.18 で完全に削除された古の機能です. なので, この削除パッチを復元して動かそうとかいう…
(詳細は issue 参照)
- これを落とす
-
patchutils
x86_64 extra のinterdiff
を使って削除パッチを追加パッチに変換:interdiff -q remove_ashmem.patch /dev/null > enable_ashmem.patch
- 気合でパッチを当てる
- makepkg して update して起動する
ちなみに動きませんでした. そして最後まで例のエラーはつきまといましたとさ.
パッチを当てる
よくわかんない.
+ 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 では動きません. 少なくとも私の力では.
おしまい.