移植智能卡/读卡器系列驱动(libusb、pcsc-lite、pcsc_tools、ccid)到嵌入式ARM开发板上

 

这里安装目录统一用同一个,不然会有问题,这里统一为安装到/usr/ccid下(有些同学可能是公司的服务器,没有权限安装到/usr目录下,那就安装在你本地,如${PWD}/ccid,然后记得要确认pcsc-lite和ccid源码包里的config.h文件某些定义的路径是否是对的,后面具体会讲)

一、编译libusb

下载地址:https://github.com/libusb/libusb/releases/tag/v1.0.21

1)tar jxvf libusb-1.0.21.tar.bz2

2)./configure CC=arm-linux-gnueabi-gcc  host=arm-linux --prefix=/usr/ccid 

3)make

4) make install

 

二、编译pcsc-lite

下载地址:https://alioth-archive.debian.org/releases/pcsclite/pcsclite/1.8.11/

1)tar jxvf pcsc-lite-1.8.11.tar.bz2

2)./configure CC=arm-linux-gnueabi-gcc --host=arm-linux --prefix=/usr/ccid --disable-libudev --enable-libusb LIBUSB_LIBS="-L /usr/ccid/lib -lusb-1.0" LIBUSB_CFLAGS=-I /usr/ccid//include/libusb-1.0 --enable-static

3)make

4)修改config.h文件里的PCSCLITE_HP_DROPDIR,定义为 "/usr/ccid/lib/pcsc/drivers"

5)make

6)make install

 

三、编译ccid

下载地址:https://alioth-archive.debian.org/releases/pcsclite/ccid/1.4.15/

1)tar jxvf ccid-1.4.15.tar.bz2

2)./configure CC=arm-linux-gnueabi-gcc --host=arm-linux --prefix=/usr/ccid/ --enable-libusb LIBUSB_LIBS="-L /usr/ccid/lib -lusb-1.0" LIBUSB_CFLAGS=-I/usr/ccid//include/libusb-1.0 PCSC_LIBS="-L /usr/ccid/lib -lpcsclite" PCSC_CFLAGS=-I/usr/ccid/include/PCSC --enable-usbdropdir=/usr/ccid/lib/pcsc/driver

3)make

4)修改PCSCLITE_HP_DROPDIR。 定义为 "/usr/ccid/lib/pcsc/driver"

5)make

6)make install

 

四、编译pcsc-tools

下载地址:http://ludovic.rousseau.free.fr/softwares/pcsc-tools/

1)tar jxvf pcsc-tools-1.5.4.tar.bz2

2)./configure CC=arm-linux-gnueabi-gcc --host=arm-linux --prefix=/usr/ccid/PCSC_LIBS="-L /usr/ccid/lib -lpcsclite" PCSC_CFLAGS=-I/usr/ccid/include/PCSC

3)make

4)make install

 

五、测试

1)/usr/ccid/sbin/pcscd &

2)运行/usr/ccid/bin/pcsc_scan,能识别到智能卡设备,并读出ATR。

 

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
最新的PCSCCCID以及测试源码。 贴一段源码: LONG SCardEstablishContext(DWORD dwScope, /*@unused@*/ LPCVOID pvReserved1, /*@unused@*/ LPCVOID pvReserved2, LPSCARDCONTEXT phContext) { (void)pvReserved1; (void)pvReserved2; if (dwScope != SCARD_SCOPE_USER && dwScope != SCARD_SCOPE_TERMINAL && dwScope != SCARD_SCOPE_SYSTEM && dwScope != SCARD_SCOPE_GLOBAL) { *phContext = 0; return SCARD_E_INVALID_VALUE; } /* * Unique identifier for this server so that it can uniquely be * identified by clients and distinguished from others */ *phContext = (PCSCLITE_SVC_IDENTITY + SYS_RandomInt(1, 65535)); Log2(PCSC_LOG_DEBUG, "Establishing Context: 0x%X", *phContext); return SCARD_S_SUCCESS; } LONG SCardReleaseContext(SCARDCONTEXT hContext) { /* * Nothing to do here RPC layer will handle this */ Log2(PCSC_LOG_DEBUG, "Releasing Context: 0x%X", hContext); return SCARD_S_SUCCESS; } LONG SCardConnect(/*@unused@*/ SCARDCONTEXT hContext, LPCSTR szReader, DWORD dwShareMode, DWORD dwPreferredProtocols, LPSCARDHANDLE phCard, LPDWORD pdwActiveProtocol) { LONG rv; READER_CONTEXT * rContext = NULL; uint32_t readerState; (void)hContext; PROFILE_START *phCard = 0; if ((dwShareMode != SCARD_SHARE_DIRECT) && !(dwPreferredProtocols & SCARD_PROTOCOL_T0) && !(dwPreferredProtocols & SCARD_PROTOCOL_T1) && !(dwPreferredProtocols & SCARD_PROTOCOL_RAW) && !(dwPreferredProtocols & SCARD_PROTOCOL_ANY_OLD)) return SCARD_E_PROTO_MISMATCH; if (dwShareMode != SCARD_SHARE_EXCLUSIVE && dwShareMode != SCARD_SHARE_SHARED && dwShareMode != SCARD_SHARE_DIRECT) return SCARD_E_INVALID_VALUE; Log3(PCSC_LOG_DEBUG, "Attempting Connect to %s using protocol: %d", szReader, dwPreferredProtocols); rv = RFReaderInfo((LPSTR) szReader, &rContext); if (rv != SCARD_S_SUCCESS) { Log2(PCSC_LOG_ERROR, "Reader %s Not Found", szReader); return rv; } /* * Make sure the reader is working properly */ rv = RFCheckReaderStatus(rContext); if (rv != SCARD_S_SUCCESS) re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值