| #!/bin/bash |
| set -x |
| |
| configdir=/sys/kernel/config/usb_gadget |
| dev=fido2 |
| report_desc=`pwd`/fido |
| |
| if [ `whoami` != "root" ]; then |
| echo "Must be root to run this script" |
| exit 1; |
| fi |
| |
| if [ ! -f $report_desc ]; then |
| echo "ERROR: $report_desc must exist" |
| exit 1; |
| fi |
| |
| modprobe libcomposite |
| # expect systemd to have mounted configfs |
| if [ ! -d $configdir ]; then |
| echo "systemd failed to mount $configdir" |
| exit 1; |
| fi |
| |
| cd $configdir |
| mkdir $dev |
| cd $dev |
| ## |
| # create bogus vendor and product |
| ## |
| echo 0xabcd > idVendor |
| echo 0xabcd > idProduct |
| ## |
| # Add identity strings |
| ## |
| mkdir strings/0x409 |
| echo jejb > strings/0x409/manufacturer |
| echo "fido2 ctap" > strings/0x409/product |
| echo 12345678 > strings/0x409/serialnumber |
| |
| ## |
| # Now make the Config |
| ## |
| mkdir configs/c.1 |
| # conventional power number |
| echo 120 > configs/c.1/MaxPower |
| mkdir configs/c.1/strings/0x409 |
| # should set configuration but HID would override |
| |
| ## |
| # now set up the function |
| ## |
| mkdir functions/hid.usb0 |
| # we're a non boot hid |
| echo 0 > functions/hid.usb0/protocol |
| echo 0 > functions/hid.usb0/subclass |
| ## |
| # All CTAP protocols require 64 byte reports |
| ## |
| echo 64 > functions/hid.usb0/report_length |
| ## |
| # Set the compiled report descriptor |
| ## |
| $report_desc functions/hid.usb0/report_desc || exit 1 |
| |
| ## |
| # now link the config to the interface |
| ## |
| ln -s functions/hid.usb0 configs/c.1/ |
| modprobe dummy_hcd |
| echo "dummy_udc.0" > UDC |
| |
| |