我正在尝试开发一个与智能卡阅读器接口并从智能卡读取信息的应用程序。
让我给你开发环境和使用的硬件。
操作系统:Red Hat Enterprise Linux 6
IDE:Eclipse Juno CDT
语言:C/C++
硬件:
智能卡读卡器:Omnikey 5321 ( https://www.hidglobal.com/products/readers/omnikey/5321 )
我已经安装了驱动,可以找到以下目录/文件:
/usr/lib64/pcsc/drivers/ifd-ccid.bundle
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents /info.plist
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents/Linux
info.plist 的内容清楚地显示了“ifdFriendlyName”键下的“OMNIKEY CardMan 5x21”字符串。
我想使用 PC/SC 标准。因此,我已经下载并安装了 PCSC-lite,并检查了守护程序 (pcscd) 是否正在运行并且服务状态正常。
现在到了有趣的部分……
在我的代码中,我按顺序使用了以下 API。
SCARDCONTEXT oSCardContext;
SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, & SCardContext);
SCardEstablishContext() 返回 SCARD_S_SUCCESS。伟大的!
SCARDCONTEXT oSCardContext;
DWORD dwReaders = SCARD_AUTOALLOCATE;
LPSTR mszReaders;
SCardListReaders(oSCardContext, NULL, (LPSTR) & mszReaders, & dwReaders);
SCardListReaders() 返回 SCARD_E_NO_READERS_AVAILABLE。不好。
在这一点上,我去检查阅读器是否正确连接。是的。我验证是否可以在 /etc/reader.conf 中看到任何阅读器条目,但我发现此处没有列出任何阅读器。然后我去 /etc/reader.conf.d 但在这里也找不到文件。所以智能卡上下文是空的,我想,因此没有列出读者。
所以现在的问题是 pcsc-lite 无法检测到(?)我连接的阅读器以及安装了哪个驱动程序?
只是为了检查一下,我使用 udev 库编写了一个简单的程序来读取所有“usb”子系统条目,并且能够从 udev 中找到有关连接的读卡器的以下信息:
设备节点路径:(空)
供应商 ID:076b
产品 ID :5321
制造商:OMNIKEY
产品:智能卡读卡器 USB
串口:(null)
所以确定设备是可检测的。但是为什么 PC/SC 资源管理器不能创建这个上下文呢?
那么,我该如何解决呢?
我是 Linux 新手,并且一直在尝试自己解决这个问题而不寻求帮助。但是后来我发现,当有时间限制时,最好向专家和曾经工作和/或遇到过此类问题的人寻求帮助确实是明智的。
我一直在谷歌上搜索太多,但没有看到任何有我的问题。所以我想我可能错过了一些非常基本的东西。
如果有什么我需要提供的,请告诉我。我会尽快这样做。
感谢您抽出宝贵时间阅读。
问候。
编辑:
我有更新...
我做了以下事情:
1. 我得到了一个新的读卡器(SCM Microsystems),但仍然没有检测到它。
2. pcscd 守护程序默认在引导时启动。我登录后停止了服务,然后使用命令“pcscd -a -f -d”在前台模式下运行,成功检测到 SCM 阅读器。
3. 我尝试在上面的问题中插入阅读器 OMNIKIEY 5321,但未检测到。
显然,我得出了以下结论:
1.由于某种原因,直到我登录后手动停止pcscd并以前台模式运行,没有检测到阅读器。
2. OMNIKEY 读卡器/驱动有问题。
问候。