From 6a288243c1f80a578f14741a69e869784f4d7d20 Mon Sep 17 00:00:00 2001 From: Nicolas Stalder Date: Thu, 7 Mar 2019 01:24:43 +0100 Subject: [PATCH] Add Makefile for installing a HID gadget The Makefile has targets for building, installing and uninstalling a HID gadget which acts as FIDO2 authenticator. Tested on Ubuntu 18.04 but should work on other distros as well. The only assumption being made is that kernel source is available at /usr/src/linux-source-$(KERNEL_VERSION).tar.bz2. A possible improvement would be to have a configure script which finds the correct kernel source archive. --- tools/gadgetfs/Makefile | 65 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 tools/gadgetfs/Makefile diff --git a/tools/gadgetfs/Makefile b/tools/gadgetfs/Makefile new file mode 100644 index 0000000..a9beca3 --- /dev/null +++ b/tools/gadgetfs/Makefile @@ -0,0 +1,65 @@ +TOP := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST)))) +KERNEL_FULL_VERSION := $(shell uname -r) +KERNEL_VERSION := $(shell uname -r | grep -o "^[^-]*") +KERNEL_MAJOR := $(shell uname -r | cut -d. -f1) +KERNEL_MINOR := $(shell uname -r | cut -d. -f2) + +MANUFACTURER = "Solo" +SERIAL = "1234567890" +IDVENDOR = "0x0483" +IDPRODUCT = "0xa2ca" +PRODUCT = "Solo Software Authenticator" +CONFIGFS = /sys/kernel/config +CONFIGFS_FIDO2 = $(CONFIGFS)/usb_gadget/fido2 + +obj-m := dummy_hcd.o +KVERSION := $(shell uname -r) +SHELL := /bin/bash + +all: dummy_hcd.ko + +install: dummy_hcd.ko + modprobe libcomposite + insmod dummy_hcd.ko + mkdir -p $(CONFIGFS_FIDO2) + mkdir -p $(CONFIGFS_FIDO2)/configs/c.1 + mkdir -p $(CONFIGFS_FIDO2)/functions/hid.usb0 + echo 0 > $(CONFIGFS_FIDO2)/functions/hid.usb0/protocol + echo 0 > $(CONFIGFS_FIDO2)/functions/hid.usb0/subclass + echo 64 > $(CONFIGFS_FIDO2)/functions/hid.usb0/report_length + echo -ne "\x06\xd0\xf1\x09\x01\xa1\x01\x09\x20\x15\x00\x26\xff\x00\x75\x08\x95\x40\x81\x02\x09\x21\x15\x00\x26\xff\x00\x75\x08\x95\x40\x91\x02\xc0" > $(CONFIGFS_FIDO2)/functions/hid.usb0/report_desc + mkdir $(CONFIGFS_FIDO2)/strings/0x409 + mkdir $(CONFIGFS_FIDO2)/configs/c.1/strings/0x409 + echo $(IDPRODUCT) > $(CONFIGFS_FIDO2)/idProduct + echo $(IDVENDOR) > $(CONFIGFS_FIDO2)/idVendor + echo $(SERIAL) > $(CONFIGFS_FIDO2)/strings/0x409/serialnumber + echo $(MANUFACTURER) > $(CONFIGFS_FIDO2)/strings/0x409/manufacturer + echo $(PRODUCT) > $(CONFIGFS_FIDO2)/strings/0x409/product + echo "Configuration 1" > $(CONFIGFS_FIDO2)/configs/c.1/strings/0x409/configuration + echo 120 > $(CONFIGFS_FIDO2)/configs/c.1/MaxPower + ln -s $(CONFIGFS_FIDO2)/functions/hid.usb0 $(CONFIGFS_FIDO2)/configs/c.1 + echo "dummy_udc.0" > $(CONFIGFS_FIDO2)/UDC + +uninstall: + echo "" > $(CONFIGFS_FIDO2)/UDC + rm $(CONFIGFS_FIDO2)/configs/c.1/hid.usb0 + rmdir $(CONFIGFS_FIDO2)/configs/c.1/strings/0x409 + rmdir $(CONFIGFS_FIDO2)/configs/c.1 + rmdir $(CONFIGFS_FIDO2)/functions/hid.usb0 + rmdir $(CONFIGFS_FIDO2)/strings/0x409 + rmdir $(CONFIGFS_FIDO2) + rmmod dummy_hcd.ko + +dummy_hcd.ko: dummy_hcd.c + $(MAKE) -C /lib/modules/$(KERNEL_FULL_VERSION)/build M=$(TOP) modules + +dummy_hcd.c: /usr/src/linux-source-$(KERNEL_VERSION).tar.bz2 + tar -xvf $^ linux-source-$(KERNEL_VERSION)/drivers/usb/gadget/udc/dummy_hcd.c + cp linux-source-$(KERNEL_VERSION)/drivers/usb/gadget/udc/dummy_hcd.c $@ + +clean: + $(MAKE) -C /lib/modules/$(KERNEL_FULL_VERSION)/build M=$(TOP) clean + rm -rf linux-source-$(KERNEL_VERSION) + rm -f dummy_hcd.c + +