63 lines
1.7 KiB
Bash
63 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
##
|
|
## load libcomposite and configure an ethernet gadget
|
|
## run at boot from systemd, cron, or rc.local
|
|
## must be run as root or with sudo
|
|
##
|
|
|
|
#
|
|
# configuration parameters.
|
|
# sensible defaults but change as desired
|
|
GADGETDIR='mygadget' # full path should not be supplied
|
|
SERIAL=`cat /proc/cpuinfo | grep Serial | cut -d ' ' -f 2` # Pi's serial number
|
|
HOSTPREFIX="02" # hex, two digits only
|
|
DEVICEPREFIX="06" # hex, two digits only
|
|
MANUFACTURER="nobody"
|
|
PRODUCT='nothing'
|
|
INCLUDEUART=0 # set to 1 if a serial gadget is needed for troubleshooting
|
|
#
|
|
|
|
# calculate MAC addresses
|
|
padded='00000000000000'$SERIAL
|
|
for i in -10 -8 -6 -4 -2; do
|
|
basemac=$basemac':'${padded: $i:2}
|
|
done
|
|
hostmac=$HOSTPREFIX$basemac
|
|
devmac=$DEVICEPREFIX$basemac
|
|
|
|
# am I root?
|
|
if [ $# != 0 ]; then
|
|
echo "Must be root" >&2
|
|
exit 1
|
|
fi
|
|
|
|
modprobe libcomposite
|
|
if [ $? -ne 0 ]; then
|
|
echo "unable to load libcomposite, exiting"
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p /sys/kernel/config/usb_gadget/$GADGETDIR
|
|
cd /sys/kernel/config/usb_gadget/$GADGETDIR
|
|
echo 0x1d6b > idVendor
|
|
echo 0x0104 > idProduct
|
|
echo 0x0100 > bcdDevice
|
|
echo 0x0200 > bcdUSB
|
|
mkdir -p strings/0x409
|
|
echo $SERIAL > strings/0x409/serialnumber
|
|
echo $MANUFACTURER > strings/0x409/manufacturer
|
|
echo $PRODUCT > strings/0x409/product
|
|
mkdir -p configs/c.1/strings/0x409
|
|
echo "Config 1: ECM network" > configs/c.1/strings/0x409/configuration
|
|
echo 250 > configs/c.1/MaxPower
|
|
mkdir -p functions/ecm.usb0
|
|
echo $hostmac > functions/ecm.usb0/host_addr
|
|
echo $devmac > functions/ecm.usb0/dev_addr
|
|
ln -s functions/ecm.usb0 configs/c.1/
|
|
if [ $INCLUDEUART -eq 1 ]; then
|
|
mkdir -p functions/acm.usb0
|
|
ln -s functions/acm.usb0 configs/c.1/
|
|
fi
|
|
ls /sys/class/udc > UDC
|