-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Zhenlin Wang edited this page Sep 15, 2025
·
2 revisions
#!/usr/bin/env bash
set -e
export TERM="xterm-256color"
cd /root
USB_ATTRIBUTE=0x409
USB_GROUP=sdbd
USB_SKELETON=b.1
CONFIGFS_DIR=/sys/kernel/config
USB_CONFIGFS_DIR=${CONFIGFS_DIR}/usb_gadget/${USB_GROUP}
USB_STRINGS_DIR=${USB_CONFIGFS_DIR}/strings/${USB_ATTRIBUTE}
USB_FUNCTIONS_DIR=${USB_CONFIGFS_DIR}/functions
USB_CONFIGS_DIR=${USB_CONFIGFS_DIR}/configs/${USB_SKELETON}
USB_FUNCTIONS_CNT=1
configfs_init() {
mkdir -p /dev/usb-ffs
mount -t configfs none ${CONFIGFS_DIR}
mkdir -p ${USB_CONFIGFS_DIR}
echo 0x27d9 > ${USB_CONFIGFS_DIR}/idVendor
echo 0x16c0 > ${USB_CONFIGFS_DIR}/idProduct
echo 0x0310 > ${USB_CONFIGFS_DIR}/bcdDevice
echo 0x0200 > ${USB_CONFIGFS_DIR}/bcdUSB
mkdir -p ${USB_STRINGS_DIR}
echo "Openbfdev" > ${USB_STRINGS_DIR}/manufacturer
echo "SDBD" > ${USB_STRINGS_DIR}/product
echo "0123456789ABCDEF" >${USB_STRINGS_DIR}/serialnumber
mkdir -p ${USB_CONFIGS_DIR}
mkdir -p ${USB_CONFIGS_DIR}/strings/${USB_ATTRIBUTE}
echo 0x1 > ${USB_CONFIGFS_DIR}/os_desc/b_vendor_code
echo "MSFT100" > ${USB_CONFIGFS_DIR}/os_desc/qw_sign
echo 500 > ${USB_CONFIGS_DIR}/MaxPower
ln -s ${USB_CONFIGS_DIR} ${USB_CONFIGFS_DIR}/os_desc/b.1
}
syslink_function() {
ln -s ${USB_FUNCTIONS_DIR}/$1 ${USB_CONFIGS_DIR}/f${USB_FUNCTIONS_CNT}
let USB_FUNCTIONS_CNT=USB_FUNCTIONS_CNT+1
}
# initialize usb configfs
test -d ${USB_CONFIGFS_DIR} || configfs_init
mkdir -p ${USB_FUNCTIONS_DIR}/ffs.adb
syslink_function ffs.adb
mkdir /dev/usb-ffs/adb
mount -t functionfs adb /dev/usb-ffs/adb
sdbd -dsp /run/sdbd.pid
# start usb gadget
UDC=$(ls /sys/class/udc/ | awk '{print $1}')
cat << EOF > /run/usbd.sh
#!/usr/bin/env sh
while true; do
if [ "#\$(cat ${USB_CONFIGFS_DIR}/UDC)" == "#$UDC" ]; then
sleep 1
continue
fi
echo $UDC > ${USB_CONFIGFS_DIR}/UDC
sleep 0.2
done
EOF
chmod +x /run/usbd.sh
nohup /run/usbd.sh >/dev/null 2>&1 &