diff --git a/Scripts/gadget.sh b/Scripts/gadget.sh new file mode 100644 index 0000000..4b2cc36 --- /dev/null +++ b/Scripts/gadget.sh @@ -0,0 +1,48 @@ +# Adapted from +# "Using OTG mode on Raspberry Pi SBCs" +# https://pip-assets.raspberrypi.com/categories/685-app-notes-guides-whitepapers/documents/RP-009276-WP/Using-OTG-mode-on-Raspberry-Pi-SBCs +sudo modprobe libcomposite +cd /sys/kernel/config/usb_gadget +# Create our new gadget +sudo mkdir MyGadget +cd MyGadget +# Add some boilerplate data that the gadget needs +echo 0x1d6b > idVendor # Linux Foundation’s USB VID. Replace with your own VID if required +echo 0x0104 > idProduct # Multifunction Composite Gadget +echo 0x0100 > bcdDevice # v1.0.0 +echo 0x0200 > bcdUSB # USB2 +mkdir strings/0x409 # 0x409 = English +# Insert your own manufacturer and gadget name here +echo "RaspberryPi" > strings/0x409/manufacturer +echo "MyPiGadget" > strings/0x409/product +# Make the serial number the same as the Raspberry Pi serial number; you can use whatever is required here +SERIAL=`cat /proc/cpuinfo | awk '/Serial/ {print $3}' ` +echo $SERIAL > strings/0x409/serialnumber +# Create a configuration area and populate +mkdir configs/c.1 +echo 120 > configs/c.1/MaxPower +mkdir configs/c.1/strings/0x409 +echo "Config 1" > configs/c.1/strings/0x409/configuration + +# Create our specific gadget type +## Mass storage device +### Remember to create the storage block device first +## cd /root +### Example: Make a 256 MB file to act as "USB stick" +## sudo dd if=/dev/zero of=drive.bin bs=1M count=256 +### Create a VFAT file system on the backing store +## sudo mkfs.vfat drive.bin +## +# mkdir functions/mass_storage.usb0 +## Set up our backing store +# echo "/home/pi/drive.bin" > functions/mass_storage.usb0/lun.0/file +## Link our function to our configuration +#ln -s functions/mass_storage.0 configs/c.1/ + +## Serial (CDC ACM) +mkdir functions/acm.usb0 +ln -s functions/acm.usb0 configs/c.1/ + +## Ethernet (RNDIS and ECM) +mkdir functions/ecm.usb0 +ln -s functions/ecm.usb0 configs/c.1/ diff --git a/Scripts/serial-ether-gadget.service b/Scripts/serial-ether-gadget.service new file mode 100644 index 0000000..fedb487 --- /dev/null +++ b/Scripts/serial-ether-gadget.service @@ -0,0 +1,7 @@ +[Unit] +Description=Serial and Ethernet over OTG USB +After=systemd-user-sessions.service +[Service] +ExecStart=/root/rover-pi/Scripts/gadget.sh +[Install] +WantedBy=multi-user.targe \ No newline at end of file