上一个攻略讲到怎么打通linux到读卡器的访问,以及实现最底层的APDU收发。现在让我们进阶一下,进入JavaCard的环境:
关于在ubuntu上搭建JavaCard开发环境,参阅我之前的博客--http://blog.csdn.net/caesarzou/article/details/7534493 , 本文主要讲一下JavaCard的应用下载环境:GP相关的工具。
上一篇文章的环境是ubuntu 11.10在12.04下ant已经升级,不再支持jre1.5。所以先做小小修正
1. 在~/.bashrc中删除JAVA_HOME的定义,使用默认的JRE: OpenJDK icetea
2. 修改~/javacard/samples/build_samples.xml中的编译任务javac,增加属性:fork="true" executable="/usr/lib/jvm/java-1.5.0-sun" 或者增加 target="1.5" 来使用sun的1.5jdk编译或者使用当前的jdk编译1.5版本的字节码。
3. 之前描述了JCOP 3.1.1b eclipse插件在ubuntu上的安装,但只支持了虚拟卡片。我们现在已经打通了PCSC,现在就让这个插件来操作实卡。
#首先打开eclipse,我们发现debug configuration部分的PCSC部分是灰的,不能选择读卡器。
#来到插件的目录
cd /usr/lib/eclipse/plugins/com.ibm.bluez.jcop.eclipse_3.1.1.b/
ls
#我们可以看到操作系统的支持目录
cd os/linux/x86
ls
#可以看到插件在linux下pcsc接口的动态库文件libjpcsc.so,为啥没起效呢? 我们来分析一下
ldd libjpcsc.so
可以看到此动态库依赖的一个动态库找不到了:libpcsclite.so.0
#是不是很眼熟。没错,这正式pcsclite的库。链接失败可能是因为libjpcsc.so编译的时候链接的pcsclite的库版本和当前系统的版本不符。
#我们安装的pcsclite的库是gnu的,所以来到目录
cd /usr/lib/i386-linux-gnu
ls libpcsclite*
#可以找到系统的pcsclite库文件:libpcsclite.so (随着版本不同可能会有变化,具体参考 libpcsclite.la中的libtools的描述)
sudo ln -P libpcsclite.so ../libpcsclite.so.0
#为此库文件建立一个硬链接,再次检查 libjpcsc.so 可以看到链接成功了。
#重新打开eclipse,打开debug configurations, 建立一个Java Card Application的配置,可以看到Card Reader一栏已经激活,选择读卡器,配置好ISD和Key,点Debug。
熟悉的JCShell打开了!
GlobalPlatform自己的开源项目GPShell也有for linux的版本,但是down下来之后编译总是失败,有搞定的同学可以指点一下。
anyway,javacard开发和下载的主要环境已经搭好。做JavaCard Applet的同学可以从windows上搬家过来了。 开发COS的同学,还需要搞定gcc交叉编译~~~我正努力尝试中,希望相应的攻略尽快出来。