<p>Harald Welte <strong>merged</strong> this change.</p><p><a href="https://gerrit.osmocom.org/14065">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  Harald Welte: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">ccid: Add README and kernel patch related to CCID on functionfs<br><br>Change-Id: Ib7315dadd63d14933e9728c0884297b440f6530c<br>---<br>A ccid/CCID.patch<br>A ccid/README.linux-dummy_hcd-ffs<br>A ccid/remove_ccid_gadget.sh<br>3 files changed, 146 insertions(+), 0 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/ccid/CCID.patch b/ccid/CCID.patch</span><br><span>new file mode 100644</span><br><span>index 0000000..011697a</span><br><span>--- /dev/null</span><br><span>+++ b/ccid/CCID.patch</span><br><span>@@ -0,0 +1,15 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Index: linux-source-4.19/drivers/usb/gadget/function/f_fs.c</span><br><span style="color: hsl(120, 100%, 40%);">+===================================================================</span><br><span style="color: hsl(120, 100%, 40%);">+--- linux-source-4.19.orig/drivers/usb/gadget/function/f_fs.c</span><br><span>++++ linux-source-4.19/drivers/usb/gadget/function/f_fs.c</span><br><span style="color: hsl(120, 100%, 40%);">+@@ -2000,8 +2000,8 @@</span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+      case HID_DT_HID:</span><br><span style="color: hsl(120, 100%, 40%);">+              pr_vdebug("hid descriptor\n");</span><br><span style="color: hsl(120, 100%, 40%);">+-             if (length != sizeof(struct hid_descriptor))</span><br><span style="color: hsl(120, 100%, 40%);">+-                 goto inv_length;</span><br><span style="color: hsl(120, 100%, 40%);">++             //if (length != sizeof(struct hid_descriptor))</span><br><span style="color: hsl(120, 100%, 40%);">++                       //goto inv_length;</span><br><span style="color: hsl(120, 100%, 40%);">+            break;</span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+     case USB_DT_OTG:</span><br><span>diff --git a/ccid/README.linux-dummy_hcd-ffs b/ccid/README.linux-dummy_hcd-ffs</span><br><span>new file mode 100644</span><br><span>index 0000000..bb628b6</span><br><span>--- /dev/null</span><br><span>+++ b/ccid/README.linux-dummy_hcd-ffs</span><br><span>@@ -0,0 +1,98 @@</span><br><span style="color: hsl(120, 100%, 40%);">+Requirements</span><br><span style="color: hsl(120, 100%, 40%);">+============</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* you need dummy_hcd.ko, i.e. a kernel compiled with CONFIG_USB_DUMMY_HCD=m</span><br><span style="color: hsl(120, 100%, 40%);">+* you need a fixed usb_f_fs.ko, which doesn't make blind assumptions about</span><br><span style="color: hsl(120, 100%, 40%);">+  everything being a HID descriptor.  See CCID.patch</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+On a stock Debian system, this works as follows (kernel versions will change over time,</span><br><span style="color: hsl(120, 100%, 40%);">+in my case `uname -r` shows 4.19.0-4-amd64).</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+apt-get install linux-headers-4.19.0-4-amd64 linux-source-4.19</span><br><span style="color: hsl(120, 100%, 40%);">+cd /usr/src</span><br><span style="color: hsl(120, 100%, 40%);">+tar xf linux-source-4.19.tar.xz</span><br><span style="color: hsl(120, 100%, 40%);">+cd linux-source-4.19</span><br><span style="color: hsl(120, 100%, 40%);">+ln -s /boot/config-4.19.0-4-amd64 .config</span><br><span style="color: hsl(120, 100%, 40%);">+ln -s /usr/src/linux-headers-4.19.0-4-amd64/Module.symvers .</span><br><span style="color: hsl(120, 100%, 40%);">+patch -p1 < /my/path/to/CCID.patch</span><br><span style="color: hsl(120, 100%, 40%);">+# edit .config and set CONFIG_USB_DUMMY_HCD=m</span><br><span style="color: hsl(120, 100%, 40%);">+make modules_prepare</span><br><span style="color: hsl(120, 100%, 40%);">+make M=drivers/usb/gadget/function</span><br><span style="color: hsl(120, 100%, 40%);">+make M=drivers/usb/gadget/udc</span><br><span style="color: hsl(120, 100%, 40%);">+cp drivers/usb/gadget/function/usb_f_fs.ko /lib/modules/`uname -r`/kernel/drivers/usb/gadget/function/</span><br><span style="color: hsl(120, 100%, 40%);">+cp drivers/usb/gadget/udc/dummy_hcd.ko /lib/modules/`uname -r`/kernel/drivers/usb/gadget/udc/</span><br><span style="color: hsl(120, 100%, 40%);">+depmod</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Running</span><br><span style="color: hsl(120, 100%, 40%);">+-------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+You first have to run the `create_ccid_gadget.sh` script, which will</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+* load the required kernel modules with their respective options</span><br><span style="color: hsl(120, 100%, 40%);">+* use usb-gadget-configfs to create a new device with configuration + interface</span><br><span style="color: hsl(120, 100%, 40%);">+* mount the resulting endpoints as usb functionfs to /dev/ffs-ccid</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Next, you run the actual userspace implementation of the gadget, telling it the functionfs path</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+   ./ccid_functionfs /dev/ffs-ccid</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+which should make your 'dmesg' show something like</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+read descriptors</span><br><span style="color: hsl(120, 100%, 40%);">+read strings</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Finally, you can virtually connect the gadget to the virtual host controller by issuing</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+      echo dummy_udc.0 > /sys/kernel/config/usb_gadget/osmo-ccid/UDC</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+at which point your 'dmesg' should print something along the lines of</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: new full-speed USB device number 8 using dummy_hcd</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: New USB device found, idVendor=2342, idProduct=2342, bcdDevice= 4.19</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: Product: sysmoOCTSIM</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: Manufacturer: sysmocom GmbH</span><br><span style="color: hsl(120, 100%, 40%);">+usb 3-1: SerialNumber: 2342</span><br><span style="color: hsl(120, 100%, 40%);">+configfs-gadget gadget: full-speed config #1: c</span><br><span style="color: hsl(120, 100%, 40%);">+----</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+Using from pcsc-lite</span><br><span style="color: hsl(120, 100%, 40%);">+--------------------</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+In order to make pcsc-lite recognize the reader, you'll need to add the VID/PID</span><br><span style="color: hsl(120, 100%, 40%);">+to the /etc/libccid_Info.plist with a diff like this:</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+--- /tmp/libccid_Info.plist 2019-05-15 22:02:07.892925425 +0200</span><br><span>++++ /etc/libccid_Info.plist      2018-12-27 16:18:01.026824476 +0100</span><br><span style="color: hsl(120, 100%, 40%);">+@@ -525,6 +525,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+              <string>0x08C3</string></span><br><span style="color: hsl(120, 100%, 40%);">+           <string>0x15E1</string></span><br><span style="color: hsl(120, 100%, 40%);">+           <string>0x062D</string></span><br><span style="color: hsl(120, 100%, 40%);">++          <string>0x2342</string></span><br><span style="color: hsl(120, 100%, 40%);">+   </array></span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+     <key>ifdProductID</key></span><br><span style="color: hsl(120, 100%, 40%);">+@@ -952,6 +953,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+              <string>0x0402</string></span><br><span style="color: hsl(120, 100%, 40%);">+           <string>0x2007</string></span><br><span style="color: hsl(120, 100%, 40%);">+           <string>0x0001</string></span><br><span style="color: hsl(120, 100%, 40%);">++          <string>0x2342</string></span><br><span style="color: hsl(120, 100%, 40%);">+   </array></span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+     <key>ifdFriendlyName</key></span><br><span style="color: hsl(120, 100%, 40%);">+@@ -1379,6 +1381,7 @@</span><br><span style="color: hsl(120, 100%, 40%);">+                 <string>Precise Biometrics Precise 200 MC</string></span><br><span style="color: hsl(120, 100%, 40%);">+                <string>RSA RSA SecurID (R) Authenticator</string></span><br><span style="color: hsl(120, 100%, 40%);">+                <string>THRC Smart Card Reader</string></span><br><span style="color: hsl(120, 100%, 40%);">++          <string>sysmoOCTSIM Test Reader</string></span><br><span style="color: hsl(120, 100%, 40%);">+  </array></span><br><span style="color: hsl(120, 100%, 40%);">+ </span><br><span style="color: hsl(120, 100%, 40%);">+     <key>Copyright</key></span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>diff --git a/ccid/remove_ccid_gadget.sh b/ccid/remove_ccid_gadget.sh</span><br><span>new file mode 100755</span><br><span>index 0000000..3ad0511</span><br><span>--- /dev/null</span><br><span>+++ b/ccid/remove_ccid_gadget.sh</span><br><span>@@ -0,0 +1,33 @@</span><br><span style="color: hsl(120, 100%, 40%);">+#!/bin/bash</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GADGET_NAME=osmo-ccid</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+GADGET_CONFIGFS=/sys/kernel/config/usb_gadget</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+set -e</span><br><span style="color: hsl(120, 100%, 40%);">+set -x</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+gadgetdir="$GADGET_CONFIGFS/$GADGET_NAME"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# unmount the endpoints from the filesystem</span><br><span style="color: hsl(120, 100%, 40%);">+umount /dev/ffs-ccid</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# detach from USB gadget/bus</span><br><span style="color: hsl(120, 100%, 40%);">+echo "" > "$gadgetdir/UDC" || true</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# remove function from config</span><br><span style="color: hsl(120, 100%, 40%);">+rm "$gadgetdir/configs/c.1/ffs.usb0"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# remove strings in config</span><br><span style="color: hsl(120, 100%, 40%);">+rmdir "$gadgetdir/configs/c.1/strings/0x409"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# remove config</span><br><span style="color: hsl(120, 100%, 40%);">+rmdir "$gadgetdir/configs/c.1"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# remove function</span><br><span style="color: hsl(120, 100%, 40%);">+rmdir "$gadgetdir/functions/ffs.usb0"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+# remove strings in gadget</span><br><span style="color: hsl(120, 100%, 40%);">+rmdir "$gadgetdir/strings/0x409"</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+rmdir $gadgetdir</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/14065">change 14065</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/14065"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-ccid-firmware </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: merged </div>
<div style="display:none"> Gerrit-Change-Id: Ib7315dadd63d14933e9728c0884297b440f6530c </div>
<div style="display:none"> Gerrit-Change-Number: 14065 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Harald Welte <laforge@gnumonks.org> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder (1000002) </div>