document what it does and tested boards
[linux-usb-otg] / usb-composite-all.sh
1 #!/bin/bash -e
2
3 # this file is from: https://github.com/ckuethe/usbarmory/wiki/USB-Gadgets
4 echo "creating composite mass-storage, serial, ethernet, hid..."
5 modprobe libcomposite
6
7 # assumes a disk image exists here...
8 FILE=`pwd`/usbdisk.img
9 mkdir -p ${FILE/img/d}
10 if [ ! -e $FILE ] ; then
11         dd if=/dev/zero of=$FILE bs=1M count=8
12         mkfs.vfat $FILE
13 fi
14 #mount -o loop,ro,offset=2048 -t vfat $FILE ${FILE/img/d}
15 cd /sys/kernel/config/usb_gadget/
16
17 mkdir -p g1
18 cd g1
19 #echo '' > UDC
20
21 echo 0x1d6b > idVendor # Linux Foundation
22 echo 0x0104 > idProduct # Multifunction Composite Gadget
23 echo 0x0100 > bcdDevice # v1.0.0
24 echo 0x0200 > bcdUSB # USB2
25
26 mkdir -p strings/0x409
27 echo "deadbeef00000001" > strings/0x409/serialnumber
28 echo `uname -r` > strings/0x409/manufacturer 
29 echo `hostname -s` > strings/0x409/product 
30
31 N="usb0"
32 mkdir -p functions/acm.gs0
33 mkdir -p functions/ecm.$N
34 mkdir -p functions/hid.$N
35 mkdir -p functions/mass_storage.$N
36
37 # first byte of address must be even
38 HOST="48:6f:73:74:50:43" # "HostPC"
39 SELF="42:61:64:55:53:42" # "BadUSB"
40 echo $HOST > functions/ecm.$N/host_addr
41 echo $SELF > functions/ecm.$N/dev_addr
42
43 echo 1 > functions/mass_storage.$N/stall
44 echo 0 > functions/mass_storage.$N/lun.0/cdrom
45 echo 0 > functions/mass_storage.$N/lun.0/ro
46 echo 0 > functions/mass_storage.$N/lun.0/nofua
47 echo $FILE > functions/mass_storage.$N/lun.0/file
48
49 echo 1 > functions/hid.usb0/protocol
50 echo 1 > functions/hid.usb0/subclass
51 echo 8 > functions/hid.usb0/report_length
52 echo -ne \\x05\\x01\\x09\\x06\\xa1\\x01\\x05\\x07\\x19\\xe0\\x29\\xe7\\x15\\x00\\x25\\x01\\x75\\x01\\x95\\x08\\x81\\x02\\x95\\x01\\x75\\x08\\x81\\x03\\x95\\x05\\x75\\x01\\x05\\x08\\x19\\x01\\x29\\x05\\x91\\x02\\x95\\x01\\x75\\x03\\x91\\x03\\x95\\x06\\x75\\x08\\x15\\x00\\x25\\x65\\x05\\x07\\x19\\x00\\x29\\x65\\x81\\x00\\xc0 > functions/hid.usb0/report_desc
53
54
55 C=1
56 mkdir -p configs/c.$C/strings/0x409
57 echo "Config $C: ECM network" > configs/c.$C/strings/0x409/configuration 
58 echo 250 > configs/c.$C/MaxPower 
59 ln -s functions/acm.gs0 configs/c.$C/
60 #ln -s functions/ecm.$N configs/c.$C/
61 ln -s functions/mass_storage.$N configs/c.$C/
62 ln -s functions/hid.$N configs/c.$C/
63
64 # this lists available UDC drivers
65 ls /sys/class/udc > UDC
66
67 #ifconfig $N 10.0.0.1 netmask 255.255.255.252 up
68 #route add -net default gw 10.0.0.2
69 echo "done. "
70 #echo "initializing demo menu..."
71 #while 1; do
72 #       /home/pi/hardpass/oled/run.sh
73 #done &
74 echo "starting shutdown 'daemon'"
75 #/home/pi/hardpass/shutdown/shutdown-button.sh &