使用C ++在RHEL 6 linux上使用pcsc-lite检测/与读卡器进行通信

时间:2013-03-27 04:41:10

标签: c++ smartcard smartcard-reader pcsc rhel6

我正在尝试开发一个可以与智能卡读卡器连接并从智能卡读取信息的应用程序。

让我告诉你开发环境和使用的硬件 操作系统:红帽企业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中找到关于连接的读卡器的以下信息:
设备节点路径:( null)
供应商ID:076b
产品编号:5321
制造商:OMNIKEY
产品:智能卡读卡器USB
序列号:( null)

所以我确定该设备是可检测的。但为什么PC / SC资源管理器无法创建此上下文?

那么,我该如何解决这个问题?

我是Linux的新手,并且一直试图在不寻求帮助的情况下自己解决这个问题。但后来我发现,当有时间限制时,更好地寻求专家和有工作和/或遇到过这样问题的人的帮助。

我一直在谷歌搜索太多,但没有看到任何有我的问题。所以我认为我错过了一些非常基本的东西。

如果我需要提供,请告诉我。我会尽快这样做。

感谢您抽出时间阅读。

问候。

编辑:
我有更新...

我做了以下事项:
1.我有一个新的读卡器(SCM Microsystems),但仍未检测到它 2.默认情况下,pcscd守护程序在引导时启动。登录后我停止了服务,然后使用命令“pcscd -a -f -d”以前台模式运行,并成功检测到SCM阅读器。
3.我试图在上面的问题中插入读者,OMNIKIEY 5321,但没有检测到。

显然,我得出以下结论:
1.出于某种原因,直到pcscd停止并在我登录后手动以前台模式运行,未检测到读取器 2. OMNIKEY阅读器/驱动程序有问题。

问候。

0 个答案:

没有答案