milkv-jupiter-buildroot-ext/board/spacemit/k1/target_overlay/etc/init.d/S50adb-setup
2024-06-19 15:18:09 +08:00

97 lines
2.9 KiB
Bash
Executable file

#!/bin/sh
VENDOR_ID="0x361c"
PRODUC_ID="0x0008"
SERNUM_STR="20211102"
MANUAF_STR="Spacemit"
PRODUC_STR="K1 ADB"
DEFAULT_UDC="c0900100.udc"
[ -e /sys/class/net/eth0 ] && ADB_MAC_SN=$(sed 's/://g' /sys/class/net/eth0/address)
[ "$ADB_MAC_SN" ] && SERNUM_STR=$ADB_MAC_SN
[ "$ADB_BOARD_SN" ] || ADB_BOARD_SN=$(cat /proc/device-tree/serial-number)
[ "$ADB_BOARD_SN" ] && SERNUM_STR=$ADB_BOARD_SN
config_gadget()
{
echo "$0: config $VENDOR_ID/$PRODUC_ID/$SERNUM_STR/$MANUAF_STR/$PRODUC_STR."
# mount /dev/mmcblk0 /mnt/SDCARD
mount -t configfs none /sys/kernel/config
mkdir /sys/kernel/config/usb_gadget/g1
echo $VENDOR_ID > /sys/kernel/config/usb_gadget/g1/idVendor
echo $PRODUC_ID > /sys/kernel/config/usb_gadget/g1/idProduct
mkdir /sys/kernel/config/usb_gadget/g1/strings/0x409
echo $SERNUM_STR > /sys/kernel/config/usb_gadget/g1/strings/0x409/serialnumber
echo $MANUAF_STR > /sys/kernel/config/usb_gadget/g1/strings/0x409/manufacturer
echo $PRODUC_STR > /sys/kernel/config/usb_gadget/g1/strings/0x409/product
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1
echo 0xc0 > /sys/kernel/config/usb_gadget/g1/configs/c.1/bmAttributes
echo 500 > /sys/kernel/config/usb_gadget/g1/configs/c.1/MaxPower
mkdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
}
clean_gadget()
{
# Remove strings:
echo "gadget-setup: remove strings of c.1."
rmdir /sys/kernel/config/usb_gadget/g1/configs/c.1/strings/0x409
# Remove config:
echo "gadget-setup: remove configs c.1."
rmdir /sys/kernel/config/usb_gadget/g1/configs/c.1
# Remove string in gadget
echo "gadget-setup: remove strings of g1."
rmdir /sys/kernel/config/usb_gadget/g1/strings/0x409
# Remove gadget
echo "gadget-setup: remove g1."
rmdir /sys/kernel/config/usb_gadget/g1
}
setup()
{
mkdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb
ln -s /sys/kernel/config/usb_gadget/g1/functions/ffs.adb/ /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb
mkdir /dev/usb-ffs
mkdir /dev/usb-ffs/adb
mount -o uid=2000,gid=2000 -t functionfs adb /dev/usb-ffs/adb/
adbd &
}
udc()
{
echo `ls /sys/class/udc | grep ${DEFAULT_UDC}` > /sys/kernel/config/usb_gadget/g1/UDC
}
noudc()
{
echo > /sys/kernel/config/usb_gadget/g1/UDC
}
clean()
{
kill `pidof adbd`
rm -f /sys/kernel/config/usb_gadget/g1/configs/c.1/ffs.adb
rmdir /sys/kernel/config/usb_gadget/g1/functions/ffs.adb
umount /dev/usb-ffs/adb/
rmdir /dev/usb-ffs/adb
rmdir /dev/usb-ffs
}
OPT=$1
case "$1" in
start)
config_gadget
setup
sleep 1
udc
;;
stop)
noudc
clean
clean_gadget
;;
restart|reload)
noudc
clean
clean_gadget
config_gadget
setup
udc
;;
*)
echo "Usage: $0 {start|stop|reload}"
exit 1
esac
exit $?