]>
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
26 def probeBinderDriver(args
):
31 for node
in BINDER_DRIVERS
:
32 if os
.path
.exists("/dev/" + node
):
35 binder_dev_nodes
.append(BINDER_DRIVERS
[0])
36 for node
in VNDBINDER_DRIVERS
:
37 if os
.path
.exists("/dev/" + node
):
40 binder_dev_nodes
.append(VNDBINDER_DRIVERS
[0])
41 for node
in HWBINDER_DRIVERS
:
42 if os
.path
.exists("/dev/" + node
):
45 binder_dev_nodes
.append(HWBINDER_DRIVERS
[0])
47 if len(binder_dev_nodes
) > 0:
48 devices
= ','.join(binder_dev_nodes
)
49 command
= ["modprobe", "binder_linux", "devices=\"{}\"".format(devices
)]
50 output
= tools
.helpers
.run
.root(args
, command
, check
=False, output_return
=True)
52 logging
.error("Failed to load binder driver for devices: {}".format(devices
))
53 logging
.error(output
.strip())
55 command
= ["mkdir", "-p", "/dev/binderfs"]
56 tools
.helpers
.run
.root(args
, command
, check
=False)
57 command
= ["mount", "-t", "binder", "binder", "/dev/binderfs"]
58 tools
.helpers
.run
.root(args
, command
, check
=False)
59 command
= ["ln", "-s"]
60 command
.extend(glob
.glob("/dev/binderfs/*"))
61 command
.append("/dev/")
62 tools
.helpers
.run
.root(args
, command
, check
=False)
64 for node
in binder_dev_nodes
:
65 if not os
.path
.exists("/dev/" + node
):
70 def probeAshmemDriver(args
):
71 if not os
.path
.exists("/dev/ashmem"):
72 command
= ["modprobe", "ashmem_linux"]
73 output
= tools
.helpers
.run
.root(args
, command
, check
=False, output_return
=True)
75 logging
.error("Failed to load ashmem driver")
76 logging
.error(output
.strip())
78 if not os
.path
.exists("/dev/ashmem"):
83 def setupBinderNodes(args
):
87 if args
.vendor_type
== "MAINLINE":
88 probeBinderDriver(args
)
89 for node
in BINDER_DRIVERS
:
90 if os
.path
.exists("/dev/" + node
):
92 args
.BINDER_DRIVER
= node
94 raise OSError('Binder node "binder" for waydroid not found')
96 for node
in VNDBINDER_DRIVERS
:
97 if os
.path
.exists("/dev/" + node
):
99 args
.VNDBINDER_DRIVER
= node
100 if not has_vndbinder
:
101 raise OSError('Binder node "vndbinder" for waydroid not found')
103 for node
in HWBINDER_DRIVERS
:
104 if os
.path
.exists("/dev/" + node
):
106 args
.HWBINDER_DRIVER
= node
108 raise OSError('Binder node "hwbinder" for waydroid not found')
110 for node
in BINDER_DRIVERS
[:-1]:
111 if os
.path
.exists("/dev/" + node
):
113 args
.BINDER_DRIVER
= node
115 raise OSError('Binder node "binder" for waydroid not found')
117 for node
in VNDBINDER_DRIVERS
[:-1]:
118 if os
.path
.exists("/dev/" + node
):
120 args
.VNDBINDER_DRIVER
= node
121 if not has_vndbinder
:
122 raise OSError('Binder node "vndbinder" for waydroid not found')
124 for node
in HWBINDER_DRIVERS
[:-1]:
125 if os
.path
.exists("/dev/" + node
):
127 args
.HWBINDER_DRIVER
= node
129 raise OSError('Binder node "hwbinder" for waydroid not found')
131 def loadBinderNodes(args
):
132 cfg
= tools
.config
.load(args
)
133 args
.BINDER_DRIVER
= cfg
["waydroid"]["binder"]
134 args
.VNDBINDER_DRIVER
= cfg
["waydroid"]["vndbinder"]
135 args
.HWBINDER_DRIVER
= cfg
["waydroid"]["hwbinder"]