NFC读取器ACR122U和libnfc.driver.acr122_usb无法写入USB(结果太大)

时间:2019-09-10 18:01:23

标签: nfc acr122 lib-nfc

我尝试在带libnfc的Mac OSX Mojave 10.14.6上使用ACR122 USB NFC读取器,并且在尝试使用命令{{时,出现“无法写入USB(结果太大)”)错误。 1}}:

LIBNFC_LOG_LEVEL=3 nfc-list

当我开始进行故障排除时,我遇到了一个“无法声明USB接口”错误,其他人也有。因此,我从发现的this stackoverflow问题和this github问题中尝试了以下方法:

  1. 使用info libnfc.config Unable to open file: /usr/local/etc/nfc/libnfc.conf debug libnfc.config key: [device.allow_autoscan], value: [false] info libnfc.config Unknown key in config line: device.allow_autoscan = false debug libnfc.config key: [device.allow_intrusive_scan], value: [false] info libnfc.config Unknown key in config line: device.allow_intrusive_scan = false debug libnfc.config key: [device.log_level], value: [3] info libnfc.config Unknown key in config line: device.log_level = 3 debug libnfc.general log_level is set to 3 debug libnfc.general allow_autoscan is set to true debug libnfc.general allow_intrusive_scan is set to false debug libnfc.general 0 device(s) defined by user nfc-list uses libnfc 1.7.1 debug libnfc.driver.acr122_usb device found: Bus 020 Device 020 Name ACS ACR122 debug libnfc.general 1 device(s) found using acr122_usb driver debug libnfc.driver.acr122_usb 3 element(s) have been decoded from "acr122_usb:020:020" debug libnfc.driver.acr122_usb TX: 62 00 00 00 00 00 00 01 00 00 error libnfc.driver.acr122_usb Unable to write to USB (Result too large) debug libnfc.general Unable to open "acr122_usb:020:020". nfc-list: ERROR: Unable to open NFC device: acr122_usb:020:020 安装libnfc->出现“无法声明...”错误。
  2. 使用sudo->不变
  3. 禁用PC / SC守护程序->未执行任何操作
  4. 编辑brew install libnfc->没有帮助
  5. 卸载libnfc,自己编译项目并禁用ifreader。我尝试使用驱动程序acr122_usb和acr122_pcsc来构建它->现在出现了“无法写入USB(结果太大)”错误。
    • 编译为:/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist
    • autoreconf -iv && ./configure --with-drivers=acr122_usb && make clean && make && make install
    • sudo launchctl remove com.apple.ifdreader

在进行故障排除后,我仍然停留在该错误上,并且不知道如何解决该问题。读取器指示灯不再呈红色闪烁,但是由于错误,该设备已明确连接至计算机并且可以使用。

作为副节点:我通过USB集线器连接阅读器,因为阅读器没有USB C电缆,但这应该不是问题。有没有人遇到相同的问题或我可以尝试的其他方法?

2 个答案:

答案 0 :(得分:1)

您的第4步,编辑/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist对我有用,这是我能找到的唯一干净的解决方案。

以下是您需要做的简短描述:

  • 禁用“系统完整性保护”
  • 从plist /usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist的3个数组ifdFriendlyName,ifdVendorID和ifdProductID中删除3条匹配的行(具有相同的数组索引!)。
  • 启用“系统完整性保护”

在我的案例中,三行是条目号370:

  • ifdFriendlyName =“ ACS ACR122U PICC接口”
  • ifdVendorID = 0x072F
  • ifdProductID = 0x2200

详细的分步说明:

  1. 拔下NFC读卡器
  2. 关闭OSX
  3. 按住键盘上的键<cmd>+<R>,然后启动Mac进入恢复模式
  4. 使用“实用程序”菜单打开终端窗口
  5. 执行命令csrutil disable
  6. 正常重启Mac
  7. 打开“终端”窗口并执行以下命令:

    sudo -i
    cd /usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents
    cp Info.plist Info.plist.orig
    patch -l -p0 <<EOF
    --- Info.plist.orig 2019-12-07 20:26:36.000000000 +0100
    +++ Info.plist  2019-12-07 20:26:40.000000000 +0100
    @@ -471,7 +471,6 @@
            <string>0x1050</string>
            <string>0x1050</string>
            <string>0x1050</string>
    -       <string>0x072F</string>
            <string>0x09C3</string>
            <string>0x03EB</string>
            <string>0x0A5C</string>
    @@ -864,7 +863,6 @@
            <string>0x0405</string>
            <string>0x0406</string>
            <string>0x0407</string>
    -       <string>0x2200</string>
            <string>0x0008</string>
            <string>0x6016</string>
            <string>0x5800</string>
    @@ -1257,7 +1255,6 @@
            <string>Yubico Yubikey 4 OTP+CCID</string>
            <string>Yubico Yubikey 4 U2F+CCID</string>
            <string>Yubico Yubikey 4 OTP+U2F+CCID</string>
    -       <string>ACS ACR122U PICC Interface</string>
            <string>ActivCard ActivCard USB Reader V2</string>
            <string>ATMEL VaultIC460</string>
            <string>Broadcom Corp 5880</string>
    EOF
    
  8. 正常重启Mac

  9. 插入NFC读卡器
  10. 测试nfc utils是否正在运行,例如通过致电nfc-scan-device
  11. 关闭OSX
  12. 按住键盘上的键<cmd>+<R>,然后启动Mac进入恢复模式
  13. 使用“实用程序”菜单打开终端窗口
  14. 执行命令csrutil enable
  15. 正常重启Mac

@anderssonjohan提供了正确的答案in his post,但是他发布的plist文件不一致,因为他只删除了一行而不是三行。

答案 1 :(得分:0)

最初的问题是,守护程序system/com.apple.ifdreader加载了based on pcsc-lite的用户级驱动程序/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle并声明了USB设备的所有权。要使libnfc可以使用读卡器,您可以

  • 告诉ifd-ccid忽略USB设备(我将告诉您如何实现)
  • 告诉libnfc使用pcsc-lite
  • 完全禁用ifdreader守护程序(我认为这样做有风险,尤其是在系统升级时)

我对这个问题做了两个回答:

  1. 这是假设您对终端和恢复环境中的路径更加熟悉。除了禁用“系统完整性保护”并需要多次重新启动(如我的其他答案中所述)外,您还可以只执行一次重新启动即可
  2. 另一个答案需要更多步骤(特别是重新启动),而我之前已经写过。它会暂时禁用“系统完整性保护”,当您忘记再次启用它时可能会带来危险。

您可以执行以下命令来显示服务状态:

launchctl list com.apple.ifdreader
launchctl blame system/com.apple.ifdreader

仅杀死守护程序将不起作用,当系统检测到USB设备的ID在其Info.plist中列出ID时,它将自动(重新)启动,因此您需要从{{1 }}。

不幸的是,该文件受MacOS Mojave 10.14.6中的“系统完整性保护”保护,因此您只能在引导至恢复模式时对其进行修改,然后在其中进行修改,或者使用{{1}在其中禁用“系统完整性保护” },以便能够在普通用户环境中对其进行修改。

这些是您需要执行的步骤:

  1. 准备新的Info.plist并保留原始信息的备份(请参见下文)
  2. 关闭OSX
  3. 按住键盘上的键/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist,然后启动Mac进入恢复模式
  4. 使用“实用工具”菜单打开“终端”窗口
  5. 将原来的csrutil disable替换为您准备的那个

在进入恢复模式之前,您需要知道可以在哪些路径下找到文件,因为根文件系统不同,并且正常的根文件系统将挂载在/ Volumes / << em> TheNameOfYourSystemDisk >下。 ,因此请先在Finder中查找此名称,然后再进入恢复模式。

例如,我的系统驱动器名为<cmd>+<R>,路径为:

  • 我的主目录:/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist
  • pinfo文件:Macintosh HD

在我的示例中,最好的方法是使/Volumes/Macintosh HD/Users/michael能够使用大多数普通的CLI命令。

要创建新的Info.plist文件,可以使用其他答案中的小补丁。或者,您可以使用更灵活的附件python脚本。只需调用脚本,它将在当前目录的子目录/Volumes/Macintosh HD/usr/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist中创建更改后的Info.plist文件:

chroot '/Volumes/Macintosh HD'

只需将SmartCardService_disable更改为其他任何模式,即可轻松修改该脚本以删除其他读卡器。