Linux下经过CCID协议与USB设备进行交互经验总结
1.目标
在linux系统下经过ccid协议与USB设备实现通信。html
2. 实现方法
经过参考其余人的博客,决定采用以下方式来实现ccid通信。python
2.1 安装libudev
udev 是Linux2.6内核里的一个功能,它替代了原来的devfs,成为当前Linux 默认的设备管理工具。udev以守护进程的形式运行,经过侦听内核发出来的uevent来管理/dev目录下的设备文件。不像以前的设备管理工具,udev在用户空间(userspace) 运行,而不在内核空间(kernel space) 运行。linux
2.1.1 编译安装
若是是Centos能够经过执行:sudo yum install systemd-devel 或者sudo yum install libudev-devel;若是是Ubuntu能够经过:sudo apt-get install systemd-devel 或者 sudo apt-get install libudev-devel;若是已经有libudev-devel.rpm包,能够执行sudo rpm -ivh libudev-devel.rpm。git
2.1.2 安装提示错误
在Ubuntu14.04下,直接执行sudo apt-get install systemd-devel 或者 sudo apt-get install libudev-devel,有的时候并不能安装成功,会出现下面的提示:
通常apt-get出现上面的状况,就是没有更新APT库,安装以下方式进行更新便可(须要等待一段时间~):
github
sudo apt-get update sudo apt-get upgrade
执行结束后,咱们再执行sudo apt-get install libudev-devel便可成功。bootstrap
2.2 编译安装libusb
对于链接到电脑的USB设备,通常都会须要安装对应的USB driver来支持。有一款开源的跨平台的USB driver,就是libusb,能够用来进行自定义的USB设备的驱动开发。
libusb是一个C语言编写的库,能够供上层的应用来调用,和链接在笔记本上的USB设备进行通讯。易于移植,并且有对应的libusb-API的文档,能够用于Linux, OS X, Windows, Android, OpenBSD等系统。并且支持USB 1.0到3.1的规范。通常在Linux系统上会自带了libusb的。其余的平台通常须要安装libusb。
vim
2.2.1 下载libusb
在https://github.com/libusb/libusb/releases/ 地址中选择一个版本进行下载,本文使用的是libusb-1.0.18。api
2.2.2 编译安装过程
(1)解压libusb-1.0.18.tar.gz安装包,执行tar -xvf libusb-1.0.18.tar.gz。
(2)进入到libusb-1.0.18文件下,执行三步:(a)./configure; (b) make; (c)sudo make install;
bash
2.2.3 安装时提示的错误
(1)错误提示
checking for inline… inline
checking operating system… Linux
checking for library containing clock_gettime… -lrt
checking libudev.h usability… no
checking libudev.h presence… no
checking for libudev.h… no
configure: error: “udev support requested but libudev not installed”
(2)解决办法
安装libudev-devel便可解决,安装方法已2.1节介绍。
python2.7
2.3 编译安装pcsc-lite
pcsc-lite 封装了访问使用 SCard API (PC/SC) 访问智能卡设备的开发包。
2.3.1 下载pcsc-lite
在https://alioth-archive.debian.org/releases/pcsclite/pcsclite/地址中选择一个版本进行下载,本文选择的是pcsc-lite-1.8.11版本。
2.3.2 编译安装过程
(1)解压pcsc-lite-1.8.11.tar.bz2安装包,执行tar -xvf pcsc-lite-1.8.11.tar.bz2。
(2)进入pcsc-lite-1.8.11文件夹下,执行三步:(a)./configure;(b)make;(c)sudo make install
2.4 编译安装ccid
该库为符合CCID协议的USB智能卡驱动程序提供了PC / SC IFD处理程序实现。须要此软件包才能经过PC / SC Lite资源管理器(pcscd)与CCID智能卡读取器进行通讯。
2.4.1 下载ccid
在https://alioth-archive.debian.org/releases/pcsclite/ccid/ 地址中选择一个版本进行下载,本文使用的是ccid-1.4.16版本。
2.4.2 编译安装过程
(1)解压ccid-1.4.16.tar.bz2安装包,执行tar -xvf ccid-1.4.16.tar.bz2。
(2)进入ccid-1.4.16文件下,找到readers/supported_readers.txt文件,进行以下修改:(a)增长:设备名称(自定义);(b)增长:VID:PID:设备描述符;
(3)执行编译及安装,(a)./configure;(b)make;(c)sudo make install;
2.5 配置环境变量
将编译生成的共享库的路径添加到环境变量中。执行以下操做:
(1)经过vim /etc/profile的指令,打开profile文件。
(2)增长:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH,保存退出。
(3)执行 source /etc/profile。
2.6 ccid通信协议测试
2.6.1 启动pcsc服务
在命令行中执行pcscd,注意若是不是root帐户执行sudo pcscd。
2.6.2 测试结果
在pcsc-lite-1.8.11/src/ 的路径下找到testpcsc可执行文件,插入设备后,执行./testpcsc,结果以下则证实CCID协议通信成功。
2.7 其余软件包的安装
由于项目须要安装一些其余的开源库,所以在这里记录一下。
2.7.1 编译安装boost
Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,做为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。
2.7.1.1 下载boost
在https://sourceforge.net/projects/boost/files/boost/ 地址中选择一个版本下载,本文中使用的是boost_1_43_0。
2.7.1.2 编译安装过程
(1)解压boost_1_43_0.tar.gz安装包,执行tar -xvf boost_1_43_0.tar.gz。
(2)进入boost_1_43_0文件中,执行以下步骤:(a)./bootstrap.sh;(b)./bjam(须要等待很长一段时间~);
2.7.1.3 安装时提示错误
由第一行可知有78个目标失败,通过分析有一下几个问题须要修改:
(1)./boost/python/detail/wrap_python.hpp:50:23: fatal error: pyconfig.h: No such file or directory,即pyconfig.h文件没法找到。致使该问题产生的缘由是,所需文件在/usr/include/python2.7路径下,须要将该路径配置到系统路径下。打开/etc/profile文件增长以下内容,再执行source /etc/profile
export PATH=/usr/include/python2.7:$PATH
再执行./bjam,结果以下:
(2)未完。。。
5. 参考连接
(1)https://blog.csdn.net/fafactx/article/details/22931141
(2)https://blog.51cto.com/seiang/1950594
(3)https://blog.csdn.net/suxiang198/article/details/75106296
(4)https://www.jianshu.com/p/8581d232dd6c
(5)http://www.javashuo.com/article/p-ewfmgkap-ky.html
(6)https://baike.baidu.com/item/boost/69144?fr=aladdin
(7)https://blog.csdn.net/yujun_huoxu/article/details/7913135