java与linux交互,Linux下通过CCID协议与USB设备进行交互经验总结

1.目标

在linux系统下通过ccid协议与USB设备实现通讯。

2. 实现方法

通过参考其他人的博客,决定采用如下方式来实现ccid通讯。

2.1 安装libudev

udev 是Linux2.6内核里的一个功能,它替代了原来的devfs,成为当前Linux 默认的设备管理工具。udev以守护进程的形式运行,通过侦听内核发出来的uevent来管理/dev目录下的设备文件。不像之前的设备管理工具,udev在用户空间(userspace) 运行,而不在内核空间(kernel space) 运行。

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。

2.1.2 安装提示错误

在Ubuntu14.04下,直接执行sudo apt-get install systemd-devel 或者 sudo apt-get install libudev-devel,有的时候并不能安装成功,会出现下面的提示:

b1693bf1a7b7de7da8c8e8753d172ad6.png

一般apt-get出现上面的情况,就是没有更新APT库,安装如下方式进行更新即可(需要等待一段时间~):

sudo apt-get update

sudo apt-get upgrade

执行结束后,我们再执行sudo apt-get install libudev-devel即可成功。

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。

2.2.1 下载libusb

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;

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节介绍。

2.3 编译安装pcsc-lite

pcsc-lite 封装了访问使用 SCard API (PC/SC) 访问智能卡设备的开发包。

2.3.1 下载pcsc-lite

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

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协议通讯成功。

75aa6fed107c50ed5f5b7e6618933524.png

2.7 其他软件包的安装

因为项目需要安装一些其他的开源库,因此在这里记录一下。

2.7.1 编译安装boost

Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称。

2.7.1.1 下载boost

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 安装时提示错误

898a400bbcaa7bd713c128c345416600.png

由第一行可知有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,结果如下:

d2124871f3c53964c0a22965dcd00c87.png

(2)未完。。。

5. 参考链接

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值