Files
Shane Smiskol 161d0d4c50 set_adb: enable ADB when userdata is not mounted
When userdata is corrupt or unmounted, ADB should still be available
for debugging. Without this, there's no way to access the device
during the recovery/reset flow.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-04 03:02:04 -08:00

73 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
setup() {
# Check if /config is already mounted
if ! mountpoint -q /config; then
sudo mount -t configfs none /config
else
echo "/config is already mounted."
fi
# Create USB gadget directory structure
sudo mkdir -p /config/usb_gadget/g1
cd /config/usb_gadget/g1
sudo mkdir -p strings/0x409
sudo mkdir -p configs/c.1/strings/0x409
sudo mkdir -p functions/ncm.0
# Set Vendor and Product ID
echo 0x04D8 | sudo tee idVendor
echo 0x1234 | sudo tee idProduct
# Set strings
echo "$(cat /proc/cmdline | sed -e 's/^.*androidboot.serialno=//' -e 's/ .*$//')" | sudo tee strings/0x409/serialnumber
echo "comma.ai" | sudo tee strings/0x409/manufacturer
echo "Linux USB Gadget" | sudo tee strings/0x409/product
echo 250 | sudo tee configs/c.1/MaxPower
# Create ADB function
sudo mkdir -p functions/ffs.adb
sudo mkdir -p /dev/usb-ffs/adb
if ! mountpoint -q /dev/usb-ffs/adb; then
sudo mount -t functionfs adb /dev/usb-ffs/adb
else
echo "/dev/usb-ffs/adb is already mounted"
fi
# Link both functions to configuration
echo "NCM+ADB" | sudo tee configs/c.1/strings/0x409/configuration
sudo rm -f configs/c.1/ncm.0
sudo rm -f configs/c.1/ffs.adb
sudo ln -s functions/ncm.0 configs/c.1/
sudo ln -s functions/ffs.adb configs/c.1/
}
start() {
setprop service.adb.tcp.port -1
cd /config/usb_gadget/g1
echo "a600000.dwc3" | sudo tee UDC
}
stop() {
if [ -d "/config/usb_gadget/g1" ]; then
cd /config/usb_gadget/g1
echo "" | sudo tee UDC
fi
}
ADB_PARAM="/data/params/d/AdbEnabled"
if ! mountpoint -q /data || ([ -f "$ADB_PARAM" ] && [ "$(< $ADB_PARAM)" == "1" ]); then
echo "Enabling ADB"
setup
systemctl start adbd
sleep 1 # adbd does some setup before we can enable the gadget
start
else
echo "Disabling ADB"
systemctl stop adbd
stop
fi