blob: dffdb88cd680969fab14d42f7ebf6b669dc4a61c [file] [log] [blame] [view] [edit]
# ARC adbd
## ConfigFS / FunctionFS proxy for Developer Mode
This sets up the ADB gadget to allow Chromebooks that have the necessary
hardware / kernel support to be able to use ADB over USB. This avoids exposing
ConfigFS into the container.
See
https://android.googlesource.com/platform/system/core/+/HEAD/adb/daemon/usb.cpp
for more information.
## ADB over USB with DbC
xHCI (host mode) Debug capabilities can be used for adb functionalities without
switching to xDCI (device mode). This mode requires a USB 3.x A-to-C or C-to-C
cable to connect the host system to the debug target (ChromeOS device).
Alternatively, a USB 3.x A-to-A debug cable can be used.
To enable DbC, the kernel is built with CONFIG_USB_XHCI_DBGCAP config and the
DbC Vendor ID is updated to Google Vendor ID (0x18d1). For more details, refer
Documentation/ABI/testing/sysfs-bus-pci-drivers-xhci_hcd.
When DbC is configured, the /dev/ttyDBC0 serial device is created on the debug
target (Chromebook). In order to avoid exposing /dev to adbd, we create /dev/dbc
folder using tmpfiles and create an alias to ttyDBC0 node inside /dev/dbc using
udev rules.
The Dbc daemon file watches the dbc device node and sets up the ARCVM ADB bridge
for DbC when the serial device shows up. A Udev thread is also setup to monitor
usb hotplug events and handle the USB role changes required for host to host
mode setup.
## Configuration
This service expects a file in `/etc/arc/adbd.json` to configure the service.
The file should be a JSON with the following format:
```json
{
# Required, the USB product identifier for the SoC.
"usbProductId": "0x520B",
# Optional, a list of kernel modules that need to be loaded prior to starting
# to setup the USB gadget.
"kernelModules": [
# Each one of these objects will become an invocation to modprobe(8).
{
# Required, the name of the kernel module.
"name": "g_ffs",
# Optional, the list of additional parameters to modprobe(8). These can be
# used to further configure the module.
"parameters": [
"functions=adb"
]
}
],
# Required, ADB over USB using DbC support enable
"adbOverDbcSupport": true,
# Required with DbC support enabled, PCI Bus Device ID for DbC
"pciBusDeviceId": "0000:00:0d.0"
}
```