在 ACR122U NFC reader 上强制 PC/SC 驱动程序

Force PC/SC driver on ACR122U NFC reader

我在使用来自 ACS 的 ACR122U RFID 卡 reader 时遇到问题。我需要使用 PC/SC 驱动程序将它连接到我的 Mac。我从ACS网站上安装了驱动,确认是运行.

但是,每当我使用 nfc-list 命令进行测试时,我都会收到以下错误:

nfc-list uses libnfc libnfc-1.7.1-189-g2869ae2
error   libnfc.driver.acr122_usb        Unable to claim USB interface (Permission denied)
nfc-list: ERROR: Unable to open NFC device: acr122_usb:020:002

据我通过谷歌搜索了解到,是 Mac 接管 USB 阻止 PC/SC 使用该设备,但我如何强制计算机使用 PC/SC 驱动程序而不是默认的 Apple USB?

PS: 我已经安装了libusb

您似乎混合了两种不同的选项来将 ACR122U 连接到 libnfc:

  1. 您可以使用 ACR122U 的直接 USB 驱动程序,libnfc.driver.acr122_usb(这是您当前正在使用的)。在这种情况下,您需要确保 PC/SC 守护程序不会接管 reader 的控制权(因为一次只有一个实例可以访问 reader 的 USB 接口) .

    • 快速而简单的修复方法是禁用控制 ACR122U 的 PC/SC 守护进程。虽然这在 Mac OS X 上不是直截了当的,但可以在 Ludovic's blog.
    • 中找到详细的解释
    • 或者,您可以通过编辑 /usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist 来阻止 PC/SC 守护程序控制特定的 reader。您需要搜索条目

      <key>ifdProductID</key>
      

      在此条目下方,有一个条目数组,格式为

      <string>0xXXXX</string>
      

      您将需要搜索包含值 0x2200、0x90CC 和 0x2214 的条目。删除那些行,但记住相对行号(即 <array> 中的偏移量)。然后,同样去掉

      下对应的行
      <key>ifdVendorID</key>
      

      它们都应包含值 0x072F,因此具有形式

      <string>0x072F</string>
      

      另外,你还需要去掉

      下面相应的行
      <key>ifdFriendlyName</key>
      

      所有这些都可能以 <string>ACS 开头。

  2. 或者,您可以为 ACR122U (libnfc.driver.acr122_pcsc) 使用基于 PC/SC 的 libnfc 驱动程序。此驱动程序使用系统 PC/SC 守护程序访问 reader 而不是直接控制 USB 接口。要使此选项生效,您需要将 lib-nfc 配置为使用 PC/SC 驱动程序而不是直接 USB 驱动程序。当您自己编译 libnfc 时,您可以通过显式仅激活基于 PC/SC 的驱动程序来做到这一点:

    ./configure --with-drivers=acr122_pcsc
    make
    

    但是请注意,此驱动程序已被贬值,libnfc 作者强烈反对使用它。