]>
glassweightruler.freedombox.rocks Git - waydroid.git/blob - tools/helpers/drivers.py
1 # Copyright 2021 Erfan Abdi
2 # SPDX-License-Identifier: GPL-3.0-or-later
7 import tools
.helpers
.run
27 def isBinderfsLoaded(args
):
28 with open("/proc/filesystems", "r") as handle
:
31 if len(words
) >= 2 and words
[1] == "binder":
36 def probeBinderDriver(args
):
41 for node
in BINDER_DRIVERS
:
42 if os
.path
.exists("/dev/" + node
):
45 binder_dev_nodes
.append(BINDER_DRIVERS
[0])
46 for node
in VNDBINDER_DRIVERS
:
47 if os
.path
.exists("/dev/" + node
):
50 binder_dev_nodes
.append(VNDBINDER_DRIVERS
[0])
51 for node
in HWBINDER_DRIVERS
:
52 if os
.path
.exists("/dev/" + node
):
55 binder_dev_nodes
.append(HWBINDER_DRIVERS
[0])
57 if len(binder_dev_nodes
) > 0:
58 if not isBinderfsLoaded(args
):
59 devices
= ','.join(binder_dev_nodes
)
60 command
= ["modprobe", "binder_linux", "devices=\"{}\"".format(devices
)]
61 output
= tools
.helpers
.run
.user(args
, command
, check
=False, output_return
=True)
63 logging
.error("Failed to load binder driver for devices: {}".format(devices
))
64 logging
.error(output
.strip())
66 if isBinderfsLoaded(args
):
67 command
= ["mkdir", "-p", "/dev/binderfs"]
68 tools
.helpers
.run
.user(args
, command
, check
=False)
69 command
= ["mount", "-t", "binder", "binder", "/dev/binderfs"]
70 tools
.helpers
.run
.user(args
, command
, check
=False)
71 command
= ["ln", "-s"]
72 command
.extend(glob
.glob("/dev/binderfs/*"))
73 command
.append("/dev/")
74 tools
.helpers
.run
.user(args
, command
, check
=False)
80 def probeAshmemDriver(args
):
81 if not os
.path
.exists("/dev/ashmem"):
82 command
= ["modprobe", "ashmem_linux"]
83 output
= tools
.helpers
.run
.user(args
, command
, check
=False, output_return
=True)
85 logging
.error("Failed to load ashmem driver")
86 logging
.error(output
.strip())
88 if not os
.path
.exists("/dev/ashmem"):
93 def setupBinderNodes(args
):
97 if args
.vendor_type
== "MAINLINE":
98 probeBinderDriver(args
)
99 for node
in BINDER_DRIVERS
:
100 if os
.path
.exists("/dev/" + node
):
102 args
.BINDER_DRIVER
= node
104 raise OSError('Binder node "binder" for waydroid not found')
106 for node
in VNDBINDER_DRIVERS
:
107 if os
.path
.exists("/dev/" + node
):
109 args
.VNDBINDER_DRIVER
= node
110 if not has_vndbinder
:
111 raise OSError('Binder node "vndbinder" for waydroid not found')
113 for node
in HWBINDER_DRIVERS
:
114 if os
.path
.exists("/dev/" + node
):
116 args
.HWBINDER_DRIVER
= node
118 raise OSError('Binder node "hwbinder" for waydroid not found')
120 for node
in BINDER_DRIVERS
[:-1]:
121 if os
.path
.exists("/dev/" + node
):
123 args
.BINDER_DRIVER
= node
125 raise OSError('Binder node "binder" for waydroid not found')
127 for node
in VNDBINDER_DRIVERS
[:-1]:
128 if os
.path
.exists("/dev/" + node
):
130 args
.VNDBINDER_DRIVER
= node
131 if not has_vndbinder
:
132 raise OSError('Binder node "vndbinder" for waydroid not found')
134 for node
in HWBINDER_DRIVERS
[:-1]:
135 if os
.path
.exists("/dev/" + node
):
137 args
.HWBINDER_DRIVER
= node
139 raise OSError('Binder node "hwbinder" for waydroid not found')
141 def loadBinderNodes(args
):
142 cfg
= tools
.config
.load(args
)
143 args
.BINDER_DRIVER
= cfg
["waydroid"]["binder"]
144 args
.VNDBINDER_DRIVER
= cfg
["waydroid"]["vndbinder"]
145 args
.HWBINDER_DRIVER
= cfg
["waydroid"]["hwbinder"]