diff --git a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start b/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start
index 76b5e29624..ecc9a0ff84 100644
--- a/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start
+++ b/meta-oe/recipes-devtools/android-tools/android-tools-conf-configfs/android-gadget-start
@@ -2,8 +2,37 @@
 
 set -e
 
-sleep 10
+n=0
+while true; do
+    # Pick first available UDC as default. Set UDC_NAME in env to override.
+    udcname="${UDC_NAME:-$(ls -1 /sys/class/udc 2>/dev/null | head -n 1)}"
 
-ls /sys/class/udc/ | head -n 1 | xargs echo -n > /sys/kernel/config/usb_gadget/adb/UDC
+    if [ $n -eq 30 ]; then
+        echo "Timeout waiting for UDC configuration"
+        exit 1
+    fi
+
+    if [ ! -e /sys/kernel/config/usb_gadget/adb/UDC ]; then
+        echo "Waiting for configfs usb_gadget to be initialized... ($n/30)"
+        sleep 1
+        n=$((n + 1))
+        continue
+    fi
+    configfs_udc="$(cat /sys/kernel/config/usb_gadget/adb/UDC 2>/dev/null || true)"
+
+    if [ -n "$udcname" ] && [ "$configfs_udc" = "$udcname" ]; then
+        echo "UDC $udcname successfully configured for USB ADB Gadget"
+        break
+    fi
+
+    if [ -z "$udcname" ]; then
+        echo "Waiting for UDC to appear... ($n/30)"
+    else
+        echo "Setting UDC $udcname for USB ADB Gadget usage"
+        printf '%s' "$udcname" > /sys/kernel/config/usb_gadget/adb/UDC
+    fi
+
+    sleep 1
+    n=$((n + 1))
+done
 
-echo "Setting UDC $(ls /sys/class/udc/ | head -n 1) for USB ADB Gadget usage"
