在linux系統下通過ccid協定與USB裝置實現通訊。
通過參考其他人的部落格,決定採用如下方式來實現ccid通訊。
udev 是Linux2.6核心裡的一個功能,它替代了原來的devfs,成為當前Linux 預設的裝置管理工具。udev以守護行程的形式執行,通過偵聽核心發出來的uevent來管理/dev目錄下的裝置檔案。不像之前的裝置管理工具,udev在使用者空間(userspace) 執行,而不在核心空間(kernel space) 執行。
如果是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。
在Ubuntu14.04下,直接執行sudo apt-get install systemd-devel 或者 sudo apt-get install libudev-devel,有的時候並不能安裝成功,會出現下面的提示:
一般apt-get出現上面的情況,就是沒有更新APT庫,安裝如下方式進行更新即可(需要等待一段時間~):
sudo apt-get update
sudo apt-get upgrade
執行結束後,我們再執行sudo apt-get install libudev-devel即可成功。
對於連線到電腦的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。
在https://github.com/libusb/libusb/releases/ 地址中選擇一個版本進行下載,本文使用的是libusb-1.0.18。
(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;
(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節介紹。
pcsc-lite 封裝了存取使用 SCard API (PC/SC) 存取智慧卡裝置的開發包。
在https://alioth-archive.debian.org/releases/pcsclite/pcsclite/地址中選擇一個版本進行下載,本文選擇的是pcsc-lite-1.8.11版本。
(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
該庫為符合CCID協定的USB智慧卡驅動程式提供了PC / SC IFD處理程式實現。需要此軟體包才能通過PC / SC Lite資源管理器(pcscd)與CCID智慧卡讀取器進行通訊。
在https://alioth-archive.debian.org/releases/pcsclite/ccid/ 地址中選擇一個版本進行下載,本文使用的是ccid-1.4.16版本。
(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;
將編譯生成的共用庫的路徑新增到環境變數中。執行如下操作:
(1)通過vim /etc/profile的指令,開啟profile檔案。
(2)增加:export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH,儲存退出。
(3)執行 source /etc/profile。
在命令列中執行pcscd,注意如果不是root賬戶執行sudo pcscd。
在pcsc-lite-1.8.11/src/ 的路徑下找到testpcsc可執行檔案,插入裝置後,執行./testpcsc,結果如下則證明CCID協定通訊成功。
因為專案需要安裝一些其他的開源庫,因此在這裡記錄一下。
Boost是為C++語言標準庫提供擴充套件的一些C++程式庫的總稱。Boost庫是一個可移植、提供原始碼的C++庫,作為標準庫的後備,是C++標準化程序的開發引擎之一,是為C++語言標準庫提供擴充套件的一些C++程式庫的總稱。
在https://sourceforge.net/projects/boost/files/boost/ 地址中選擇一個版本下載,本文中使用的是boost_1_43_0。
(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(需要等待很長一段時間~);
由第一行可知有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)未完。。。
(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)https://blog.csdn.net/magic_ninja/article/details/87981662
(6)https://baike.baidu.com/item/boost/69144?fr=aladdin
(7)https://blog.csdn.net/yujun_huoxu/article/details/7913135