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