ubuntu/Mac系統智慧卡操作全攻略2--Java Card之旅
上一個攻略講到怎麼打通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交叉編譯~~~我正努力嘗試中,希望相應的攻略儘快出來。