我正在尝试在 Debian 笔记本电脑 (Storytel) 上运行 Android 应用程序。
我从他们的存储库安装了 Waydroid,但它无法初始化:
root@x1v5:/etc/apt# waydroid init
[23:15:43] ERROR: Binder node "vndbinder" for waydroid not found
[23:15:43] See also: <https://github.com/waydroid>
Run 'waydroid log' for details.
Waydroid 日志如下所示:
root@x1v5:/etc/apt# waydroid log
(021820) [23:09:48] % modprobe binder_linux devices="anbox-vndbinder,anbox-hwbinder"
(021820) [23:09:48] ERROR: Binder node "vndbinder" for waydroid not found
(021820) [23:09:48] See also: <https://github.com/waydroid>
(021820) [23:09:48] Traceback (most recent call last):
File "/usr/lib/waydroid/tools/__init__.py", line 64, in main
actions.init(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 110, in init
setup_config(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 97, in setup_config
helpers.drivers.setupBinderNodes(args)
File "/usr/lib/waydroid/tools/helpers/drivers.py", line 141, in setupBinderNodes
raise OSError('Binder node "vndbinder" for waydroid not found')
OSError: Binder node "vndbinder" for waydroid not found
(021826) [23:10:28] % modprobe binder_linux devices="anbox-vndbinder,anbox-hwbinder"
(021826) [23:10:28] ERROR: Binder node "vndbinder" for waydroid not found
(021826) [23:10:28] See also: <https://github.com/waydroid>
(021826) [23:10:28] Traceback (most recent call last):
File "/usr/lib/waydroid/tools/__init__.py", line 64, in main
actions.init(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 110, in init
setup_config(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 97, in setup_config
helpers.drivers.setupBinderNodes(args)
File "/usr/lib/waydroid/tools/helpers/drivers.py", line 141, in setupBinderNodes
raise OSError('Binder node "vndbinder" for waydroid not found')
OSError: Binder node "vndbinder" for waydroid not found
(021831) [23:10:48] % modprobe binder_linux devices="anbox-vndbinder,anbox-hwbinder"
(021831) [23:10:48] ERROR: Binder node "vndbinder" for waydroid not found
(021831) [23:10:48] See also: <https://github.com/waydroid>
(021831) [23:10:48] Traceback (most recent call last):
File "/usr/lib/waydroid/tools/__init__.py", line 64, in main
actions.init(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 110, in init
setup_config(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 97, in setup_config
helpers.drivers.setupBinderNodes(args)
File "/usr/lib/waydroid/tools/helpers/drivers.py", line 141, in setupBinderNodes
raise OSError('Binder node "vndbinder" for waydroid not found')
OSError: Binder node "vndbinder" for waydroid not found
(021932) [23:14:28] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(021932) [23:14:28] *** output passed to waydroid stdout, not to this log ***
(021968) [23:15:43] % modprobe binder_linux devices="anbox-vndbinder,anbox-hwbinder"
(021968) [23:15:43] ERROR: Binder node "vndbinder" for waydroid not found
(021968) [23:15:43] See also: <https://github.com/waydroid>
(021968) [23:15:43] Traceback (most recent call last):
File "/usr/lib/waydroid/tools/__init__.py", line 64, in main
actions.init(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 110, in init
setup_config(args)
File "/usr/lib/waydroid/tools/actions/initializer.py", line 97, in setup_config
helpers.drivers.setupBinderNodes(args)
File "/usr/lib/waydroid/tools/helpers/drivers.py", line 141, in setupBinderNodes
raise OSError('Binder node "vndbinder" for waydroid not found')
OSError: Binder node "vndbinder" for waydroid not found
(022124) [23:20:40] % tail -n 60 -F /var/lib/waydroid/waydroid.log
(022124) [23:20:40] *** output passed to waydroid stdout, not to this log ***
我怎样才能让它工作?
答案1
按安排安装这些软件包以启用binder驱动程序:
libglibutil、libgbinder、python3-gbinder、Waydroid
这些包位于:https://repo.waydro.id/erfan/bookworm/
要进行检查,请使用以下命令:
须藤modprobe活页夹_linux
如果出现致命错误,则失败,但如果再次出现提示,则没有问题。
警告:
Debian 12 Bookworm 上的 Waydroid 不仅需要活页夹驱动程序,还需要 memfd 驱动程序(ashmem 驱动程序的替代品)。
在安装的最终版本12.0(不是实验版)中,打开启动文件夹中的“config-6.1.0-9-amd64”并搜索memfd。结果:
CONFIG_MEMFD_CREATE=y(y表示是)
要使用 Waydroid 17.1,因为它没有专有的 libhoudini.so(与带有 libhoudini 的 Waydroid 18.1 相反),请下载两个映像:
“system.img”和“vendor.img”。
这些图像位于:
https://sourceforge.net/projects/blissos-dev/files/waydroid/lineage/
在 Waydroid 17.1 的“system.img”根目录中,打开“init.rc”并搜索 memfd。结果:
sys.memfd_use 默认设置为 false,使其保持禁用状态
直到确认应用程序和供应商流程不会
ashmem fd 上的 IOCTL 不再存在。
setprop sys.use_memfd false
您必须将“假”更改为“真”。
答案2
BE 在答案的评论中:“如何查看 Lineagea 的版本?”
要了解沿袭版本,请使用任何存档程序打开 system.img,无需解压或安装它。图像位于“var/lib/images”或“usr/share/waydroid-extra”中。无论如何,当前的Waydroid基于两个版本:Lineage 17.1(基于Android 10)和Lineage 18.1(基于Intel专有的Android 11)。
当然,没有基于 Lineage 19.1 的 Waydroid(基于 Android 12,它对使用内存有限制以节省电池寿命)。 Android 12 仅适用于手机和小型平板电脑。
关于“CONFIG_MEMFD_CREATE=y”,它包含在 Debian Bookworm 和一些内核为 5.18+ 的 Linux 发行版中。它显示了 Waydroid 的 system.img(Android 10 或 11)与新 Linux 版本之间的冲突。
Waydroid 的图像被压缩和保护(即使在 root 下也无法修改)
https://sourceforge.net/projects/waydroid/files/images/
您可以在这里下载不同的图像进行修改:
https://sourceforge.net/projects/blissos-dev/files/waydroid/lineage/lineage-17.1
按照以下步骤以root身份修改它:
解压得到“system.img”和“vendor.img”。
在 Virtualbox 上安装任何操作系统“OS”作为隔离环境,然后安装etcher(https://github.com/balena-io/etcher)在来宾操作系统中。
通过虚拟 USB 控制器将此客户机与 2 GB 动态虚拟磁盘(vdi、vhd、vmdk)连接(如果是静态的,则无法修改“init.rc”)。在 Virtualbox 6.x 中,使用 USB 1.1(它并不慢,因为它不是真实的)。否则,请使用 Virtualbox 7.x,搭配 USB 2 或 3,因为虚拟 USB 的专利已过期或取消,无需 Virtualbox 扩展而保留其他功能。使用etcher将“system.img”写入动态虚拟磁盘。写入后,使用 nemo(能够通过右键单击以 root 身份打开文件夹的文件管理器)选择“init.rc”,然后右键单击使用任何文本编辑器打开它以搜索以下行:“setprop sys.use_memfd false”,其中“false”必须修改为“true”。如果您忘记了root权限,文件将不会被保存或被伪造保存(变成空)。
在主机操作系统中,使用任意方法将动态虚拟磁盘转换为原始映像(如果新扩展名是原始映像,请将其重命名为 img)。
现在,您已经修补了“system.img”(无需重新编译),它支持 Debian Bookworm 中的 memfd 驱动程序,而不是 ashmem 驱动程序。