PC/SC在android上的移植

本处只讨论分别移植libusb,pcsc和ccid部分,主要涉及到的源码为:

libusb:http://sourceforge.net/projects/libusb/

pcscd:https://github.com/mikma/pcsc-lite-android

ccid:https://github.com/mikma/ccid-android


使用testpcsc测试失败的原因是因为pcscd没有正常启动,有可能涉及到usbfs有没有挂载成功,由于测试的时候手机是作为一个device设备,

 不是一个host,所以在没有插入一个device设备也就没有生成该节点。可以通过查看dev/bus/usb是否有建立。而libusb在加载的时候会去检

测 usbfs,一 旦检 测失败pcscd也就退出了,有时也会出现僵死情况。

reader.conf个人理解是用pcscd守护进程(用户空间)可以有两种方式和内核层进行通信。这又涉及到PC/SC这个读卡的通信规范。

一般情况下可以这么理解:pcscd守护进程<—>ccid(usb转换成卡的协议)<— >libusb(泛指 枚举usb)<—>读卡设备

第一种方式(没有具体验证过),将ccid+libusb(泛指usb协议)放在内核中做,内核向用户空间提供一个tty接口,那对用户空间来说操作起来

就相对简单,直接当一个串口设备操作,这种情况下,android上只要移植pscs这个库,同时需要reader.conf这个文件来配置串口设备。

第二种方式,将ccid+libusb(移植的开源库),这种方式在内核层做的就相对简单,只需要将读卡器注册 成usbfs设备就行了,而繁重的usb枚举,

ccid协议转换都将有用户空间来做,这时候就不需要reader.conf但由于涉及到usb枚举就需要另一个文件info.plist。这个文件在 ccid库中会自动生成

(如果没有的话可以先编译一个PC版本的就可以得到),里面已经包含了很多型号。将自己的模块信息加进去就行了。

scardcontril,testpcsc分别用来调试ccid和pcscd,另外libusb可以用 listdevice(lsusb)来测试。


一个完整的例子:https://github.com/mikma/androidsc-usb,这个没有尝试过。

你可能感兴趣的:(Other)