*-
libnfc 是一个允许用户空间应用程序访问 NFC 设备的库。
官方网站已关闭,可通过 WayBackMachine 浏览其存档副本。
官方论坛已关闭,可通过 WayBackMachine 浏览其存档副本。
官方开发站点为: https://github.com/nfc-tools/libnfc
重要提示:本文件针对 POSIX 系统,Windows 请阅读 README-Windows.md
部分 NFC 驱动依赖第三方软件:
pn53x_usb 和 acr122_usb:
acr122_pcsc:
pcsc:
回归测试套件依赖 cutter 框架: http://cutter.sf.net
注意:如果直接使用仓库的 git 克隆副本,部分文件需要先生成。为此请运行
autoreconf -vis
或者使用打包版本的 .tar.bz2(其中已包含 ./configure): https://github.com/nfc-tools/libnfc/releases/
构建过程只需运行以下命令即可:
./configure
make
要使用特定驱动构建,请参阅 ./configure --help 中详细说明的 --with-drivers=... 选项。
make install
您可能需要为您的用户授予使用设备的权限。 在 GNU/Linux 系统中,如果您使用 udev,可以使用附带的 udev 规则。 例如在 Debian、Ubuntu 等系统中:
sudo cp contrib/udev/93-pn53x.rules /lib/udev/rules.d/
在 FreeBSD 下,如果您使用 devd,也提供了一个规则文件:contrib/devd/pn53x.conf。
为了更改库的默认行为,libnfc 使用位于 sysconfdir 的配置文件(由 ./configure 提供)。
源码中提供了一个带注释的示例文件:libnfc.conf.sample
如果您是使用以下命令编译的:
./configure --prefix=/usr --sysconfdir=/etc
则可以创建配置目录并复制示例文件:
sudo mkdir /etc/nfc
sudo cp libnfc.conf.sample /etc/nfc/libnfc.conf
要配置多个设备,您可以修改 libnfc.conf,或者在 nfc/devices.d 目录中为每个设备创建一个文件:
sudo mkdir -p /etc/nfc/devices.d
printf 'name = "My first device"\nconnstring = "pn532_uart:/dev/ttyACM0"\n' | sudo tee /etc/nfc/devices.d/first.conf
printf 'name = "My second device"\nconnstring = "pn532_uart:/dev/ttyACM1"\n' | sudo tee /etc/nfc/devices.d/second.conf
您可以使用以下环境变量在运行时覆盖某些配置选项:
LIBNFC_DEFAULT_DEVICE=<connstring>: LIBNFC_DEFAULT_DEVICE=pn532_uart:/dev/ttyACM0 将使用 /dev/ttyACM0 上的 pn532 作为默认设备LIBNFC_DEVICE=<connstring> 将忽略配置文件中的所有设备,仅使用该变量中定义的那一个LIBNFC_AUTO_SCAN=<true|false> 覆盖配置文件中的 allow_autoscan 选项LIBNFC_INTRUSIVE_SCAN=<true|false> 覆盖配置文件中的 allow_intrusive_scan 选项LIBNFC_LOG_LEVEL=<0|1|2|3> 覆盖配置文件中的 log_level 选项要获取已识别设备的 connstring,可以使用 nfc-scan-device:LIBNFC_AUTO_SCAN=true nfc-scan-device 将显示所有已找到设备的名称和 connstring。
要报告 Bug,请访问 https://github.com/nfc-tools/libnfc/issues 并填写 Bug 报告表单。
如果您有任何问题或意见,我们鼓励您在开发者社区中发帖: http://www.libnfc.org/community
请务必包含以下内容:
libnfc 的版本
有关您系统的信息。例如:
以及您认为相关的任何其他信息。
启用调试后的跟踪信息。
在调试模式下重现该 Bug,例如,如果命令是:
$ nfc-list -v
请这样运行:
$ LIBNFC_LOG_LEVEL=3 nfc-list -v
如何重现该 Bug。
请附上一个能够展示该行为的简短测试程序。
作为最后手段,您也可以提供一个指向较大型软件的指针,
该软件可以下载。
如果 Bug 是崩溃,请提供打印出的确切文本,
即崩溃发生时打印的内容。
堆栈跟踪等进一步信息可能有用,但
并非必需。
补丁可以发布到 https://github.com/nfc-tools/libnfc/issues
如果补丁修复了 Bug,通常最好包含“如何报告 Bug”中描述的所有信息。
如果您的 Touchatag 或 ACR122 设备无法被 libnfc 检测到,请确保 PCSC-lite 守护进程(pcscd)已安装并正在运行。
如果您的 Touchatag 或 ACR122 设备无法被 PCSC-lite 守护进程检测到(pcsc_scan 看不到任何设备),请尝试禁用 libccid 的伪固件检测:编辑 libccid_Info.plist 配置文件(通常为 /etc/libccid_Info.plist),找到 <key>ifdDriverOptions</key>,将 <string>0x0000</string> 的值改为 0x0004 以允许伪设备,然后重启 pcscd 守护进程。
将 ACR122 设备与 libnfc 配合使用且不带标签时(例如使用 NFCIP 模式或卡模拟),还需要另一项 PCSC-lite 调整:您需要允许使用 CCID Exchange 命令。为此,请编辑 libccid_Info.plist 配置文件(通常为 /etc/libccid_Info.plist),找到 <key>ifdDriverOptions</key>,将 <string>0x0000</string> 的值改为 0x0001 以允许 CCID exchange,或改为 0x0005 以允许 CCID exchange 和伪设备(参见上一条说明),然后重启 pcscd 守护进程。
警告:如果您使用 ACS CCID 驱动(acsccid),配置文件位于类似路径:/usr/lib/pcsc/drivers/ifd-acsccid.bundle/Contents/Info.plist
libnfc 不能与 SCL3711 的 PCSC 专有驱动同时使用。有两种可能的解决方案:
从 Linux 内核版本 3.1 开始,要使用 libnfc,必须不加载几个内核模块:“nfc”、“pn533”和“pn533_usb”。 为防止内核自动加载这些模块,您可以在 modprobe 配置文件中将其加入黑名单。libnfc 压缩包中提供了该文件:
sudo cp contrib/linux/blacklist-libnfc.conf /etc/modprobe.d/blacklist-libnfc.conf
libnfc 可以与 bR500 和 R502 的 PCSC 专有驱动配合使用,该驱动在大多数 Linux 环境中已可用。
要启用 PCSC 支持:./configure --with-drivers=pcsc。
已知可正常工作的读卡器:
从 v1.4.25 起,CCID 即支持这些读卡器,请确保您的 CCID 驱动版本高于或等于 1.4.25。
在 MacOS 上,您可以使用以下命令检查 CCID 版本;如有需要,您可以从 https://github.com/martinpaljak/osx-ccid-installer/releases 安装最新的 CCID 驱动
grep -A 1 CFBundleShortVersionString /usr/local/libexec/SmartCardServices/drivers/ifd-ccid.bundle/Contents/Info.plist
在 Linux 上,您可以使用以下命令检查 CCID 版本;如有需要,您可以从 https://ccid.apdu.fr/ 安装最新的 CCID 驱动
grep -A 1 CFBundleShortVersionString /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
FeliCa 是索尼公司的注册商标。 MIFARE 是 NXP Semiconductors 的商标。 Jewel Topaz 是 Innovision Research & Technology 的商标。 所有其他商标均为其各自所有者的财产。