PS:随便学习,随便转载~闻道有先后,术业有专攻 !瞧不起这篇博主:http://blog.csdn.net/wenjunfen/article/details/5025861?reload感觉此人太坐坐了~。
PCSC-Lite应该是Personal Computer/Smart Card lite的缩写。
PCSC-Lite 以后简称PCSC是为智能卡提供驱动和开发的linxu精简版。本文主要总结工作中Linux下使用并移植PCSC的过程和遇到的问题,仅供后来者参考讨论。
1.Linux下PCSC的使用
PCSC包含pcsc-lite和CCID,其中pcsc-lite包含一个pcscd daemon( 守护进程)和一个被调用的库(libpcsclite.so),CCID 是基于用户空间的ccid driver.另外,pcsclite 是在libusb基础开发的。因此系统需要安装libusb。
Pcsc-lite 和CCID官网站点:http://www.musclecard.com/middle.html
Libus 的官方站点:http://www.libusb.org
如果使用的是Ubuntu/Debian系统,也可以用synaptic安装这些软件包。
本文按照源码包进行安装。
系统:Ubuntu 12.04 内核 uname –r 3.11.0-15
包文件:
首先安装libusb,版本号安装pcsc-lite 要求1.0版本以上,采用最新版。(安装包可以用直接拖拽放进虚拟机,具体google)
安装libusb
解压:tar jxvf(-jxvf) libusb-*.*.*.tar.bz2
进入解压后目录执行./configure >log_config
make> log_make
makeinstall >log_make_install
在重定位的log文件里可以看到配置的默认信息和make生产的库以及安装到的目录。也可进行自己配置具体可以查看./configure –help 我理解就是把对应的.h 拷贝到系统能搜索到的文件。动态库文件.so 放到可以搜索的文件(环境变量设置)。pcsc-lite 安装
linux 下安装同理,和1类似:
解压:tar jxvf(-jxvf) pcsc-lite-*.*.*.tar.bz2
进入解压后目录执行./configure >log_config
make > log_make
makeinstall >log_make_install
这次只是多了一个pcscd的守护进程被生成。
具体信息查看log文件。
ccid 安装
解压:tar jxvf(-jxvf) pcsc-lite-*.*.*.tar.bz2
进入解压后目录执行./configure >log_config
make> log_make
makeinstall >log_make_install
这次只是生成里pcsc的一个文件目录,里面有驱动和Info.plist。具体生成过程查看configure和log信息。
首先lsusb查看usb设备,在插入USB读卡器,虚拟机需要点击设备选择虚拟usb 设备选中自己的插入设备,在lsusb 这时有了我们的设备。此时运行pcscd –f –d 具体参数意义查看 pcscd –h。查看pcscd守护进行是否正常运行和退出。这时关闭pcscd进程并打开。运行ccid解压下的example 内的scontrol文件。如果能正确识别SIM卡着环境搭建完成。
Sim卡的APUD交互是上层的应用调用了,具体操作可以在研究。现在已经实现读取sim卡的ICCID和手机号码薄。
2.移植到嵌入式开发环境
系统信息:
IT的AM335X开发板。 移植了uboot 和 内核 内核版本3.2.0。
首先在虚拟机搭建嵌入式开发环境采用源码中的am335xcross安装包,具体要找和自己cpu 对应的交叉编译工具。
安装参考解压后的Readme。
如果在Terminal下输入arm- 加Tab几下有相对于的命令则安装交叉工具完成,就是把交叉编译的bin加入到环境变量。
流程:
由于是交叉编译所以要指定编译后安装到的文件目录用prefix。
libusb 安装:
./configure CC=arm-****-linux-gnueabi-gcc --host=arm-****-linxu prefix=/usr/ccid/
make
make install
pcsc安装:
./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/us/ccid/include/libusb-1.0/" --enable-static
make
make install
ccid 安装:
./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_CFLAGS="-I/usr/ccid/include/PCSC/"PCSC_LIBS="/usr/ccid/lib/ -lpcsclite "--enable-usbdropdir="/usr/ccid/pcsc/drivers/"
make
make install
到此为止交叉编译完成。需要把生成的ccid 文件拷贝到开发板对应的/usr 下。
并把库文件加入到环境变量。
运行pcscd : ./usr/ccid/sbin/pcscd –f –d 查看。
正常读取驱动,这在关闭开启这个守护进程。
将虚拟机下的ccid源文件下的example生成的scontrol拷贝到开发板,运行。注意:调试时一定要lsusb查看是否有读卡器插入。首先pcscd 以debug模式开启,查看服务的驱动是否在对呀目录。