http://blog.csdn.net/CaesarZou/article/details/7999624

因为PC/SC是Windows的体系,以系统API的层面服务应用。所以一直以来智能卡相关的读卡器和工具都集中在Windows上,而在unix体系下则一直水土不服。值得庆幸的是随着开源组织M.U.S.C.L.E (Movment for the Use of Smart in Linux Environment)的积极努力下,pcsclite作为Xnix下的PC/SC设备框架和应用接口已经成为了事实上的标准,Mac的Lion系统更是已经在发行版里面集成了此服务。下面以ubuntu 12.0.4 发行版为例子。

#首先安装pcsc的守护进程pcscd和工具

sudo apt-get -y install libusb-dev

sudo apt-get -y install pcscd

 

#然后安装支持pcsc的读卡器驱动(例子为内置的ACR ACS38U,其它读卡器也可以到网站下载安装)

sudo apt-get -y install libacr38u

#连接读卡器,插卡后运行扫描工具验证安装结果

pcsc_scan

结果如下:
PC/SC device scanner
V 1.4.18 (c) 2001-2011, Ludovic Rousseau <ludovic.rousseau@free.fr>
Compiled with PC/SC lite version: 1.7.4
Using reader plug'n play mechanism
Scanning present readers...
0: ACS ACR38U 00 00

Thu Sep 20 12:55:08 2012
Reader 0: ACS ACR38U 00 00
  Card state: Card inserted, Shared Mode, 
  ATR: 3B 1D 94 42 72 6F 61 64 54 68 69 6E 6B 69 00 00

ATR: 3B 1D 94 42 72 6F 61 64 54 68 69 6E 6B 69 00 00
+ TS = 3B --> Direct Convention
+ T0 = 1D, Y(1): 0001, K: 13 (historical bytes)
  TA(1) = 94 --> Fi=512, Di=8, 64 cycles/ETU

62500 bits/s at 4 MHz, fMax for Fi = 5 MHz => 78125 bits/s
+ Historical bytes: 42 72 6F 61 64 54 68 69 6E 6B 69 00 00
  Category indicator byte: 42 (proprietary format)

Possibly identified card (using /usr/share/pcsc/smartcard_list.txt):
NONE

Your card is not present in the database.
You can get the latest version of the database from
  http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt
or use: wget http://ludovic.rousseau.free.fr/softwares/pcsc-tools/smartcard_list.txt --output-document=/home/caesarzou/.smartcard_list.txt

If your ATR is still not in the latest version then please send a mail
to <ludovic.rousseau@free.fr> containing:

#到此为止,PC/SC驱动已经打通,现在我们试试发个APDU

sudo apt-get -y install pcsc-tools

gscriptor

这是一个图形界面的工具,在Script框里面输入:

00A4040000

点Run按钮,可以看到连接提示,然后就是结果:

Beginning script execution...

Sending: 00 A4 04 00 00 
Received: 6C 12 
Wrong length Le: should be 0x12

Script was executed without error...

#恭喜你,卡片访问成功,现在你一定心痒难耐,想创建你自己的应用了吧?

#安装开发库

sudo apt-get install libpcsclite-dev

#安装eclipse的cdt作为开发环境

sudo apt-get -y install g++
sudo apt-get -y install eclipse eclipse-cdt

#打开eclipse,新建一个C工程,在c文件中加入

#include <PCSC/winscard.h>

#链接到pcsclite库:在C/C++ build / GCC Linker / Libraries 增加 pcsclite

#现在你会幸福的发现,winscard.h里面提供的类型定义和接口和windows是一致的,我们从windows中拷贝一段代码过来:

[cpp] view plaincopyprint?
  1. #include <stdio.h>
  2. #include <PCSC/winscard.h>
  3. int main(void) {
  4. SCARDCONTEXT m_hContext;
  5. SCARDHANDLE  m_hCard;
  6. SCARD_IO_REQUEST io;
  7. char pmszReaders[100];
  8. BYTE CAPDU[] = {0x00,0xA4,0x04,0x00,0x00};
  9. BYTE RAPDU[256+2];
  10. DWORD cch = 100;
  11. DWORD i = 0;
  12. //Insert
  13. if(SCARD_S_SUCCESS != SCardEstablishContext(SCARD_SCOPE_USER, NULL, NULL, &m_hContext))
  14. {
  15. printf("Context error");
  16. return -1;
  17. }
  18. //List Reader
  19. if(SCARD_S_SUCCESS != SCardListReaders(m_hContext, NULL, pmszReaders, &cch))
  20. {
  21. printf("List Reader error");
  22. return -2;
  23. }
  24. printf("List Readers\n");
  25. while(i<cch)
  26. {
  27. printf("%s\n",pmszReaders+i);
  28. i += strlen(pmszReaders);
  29. i ++;
  30. }
  31. //Connect first Reader
  32. io.cbPciLength = sizeof(SCARD_IO_REQUEST);
  33. if(SCARD_S_SUCCESS != SCardConnect(m_hContext, pmszReaders, SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0|SCARD_PROTOCOL_T1, &m_hCard, &io.dwProtocol))
  34. {
  35. printf("Connect Card error");
  36. return -3;
  37. }
  38. //Transmit APDU
  39. cch = 256+2;
  40. if(SCARD_S_SUCCESS != SCardTransmit(m_hCard, &io, CAPDU, 5, NULL, RAPDU, &cch))
  41. {
  42. printf("Transmit APDU error");
  43. return -4;
  44. }
  45. //echo
  46. printf("Transmit APDU\n");
  47. printf("CAPDU: ");
  48. for(i=0;i<5;i++)
  49. {
  50. sprintf(pmszReaders,"%02X",CAPDU[i]);
  51. printf("%s",pmszReaders);
  52. }
  53. printf("\n");
  54. printf("RAPDU: ");
  55. for(i=0;i<cch;i++)
  56. {
  57. sprintf(pmszReaders,"%02X",RAPDU[i]);
  58. printf("%s",pmszReaders);
  59. }
  60. printf("\n");
  61. //DisConnect
  62. SCardDisconnect(m_hCard, SCARD_EJECT_CARD);
  63. //Eject
  64. SCardReleaseContext(m_hContext);
  65. //puts("!!!Hello World!!!"); /* prints !!!Hello World!!! */
  66. return 0;
  67. }

#编译运行,输出:
List Readers
ACS ACR38U 00 00

Transmit APDU
CAPDU: 00A4040000
RAPDU: 6C12

大功告成!下一个攻略我会讲一下在ubuntu上基于JavaCard环境和工具的配置,敬请期待。

注:

ubuntu上libpcsclite的头文件默认位置在/usr/include/PCSC中,多了个目录,有的版本在编译的时候可能有#include 文件错误,可以自行修改如下:

sudo vim /usr/include/PCSC/winscard.h

将#include <pcsclite.h>修改为#include <PCSC/pcsclite>,保存退出

sudo vim /usr/include/PCSC/pcsclite.h

将#include <wintypes.h>修改为#include <PCSC/wintypes.h>,保存推出

附件:

ubuntu上的eclipse工程:猛击下载

Mac上的xcode工程:猛击下载

转载于:https://www.cnblogs.com/bigben0123/archive/2013/05/30/3108351.html

ubuntu/Mac系统智能卡操作全攻略1--访问PC/SC读卡器相关推荐

  1. Windows2000、XP、2003系统万能Ghost全攻略

    Windows2000.XP.2003系统万能Ghost全攻略 ==================================================================== ...

  2. 微软WIN7系统瘦身全攻略

    微软WIN7系统瘦身全攻略 首先 开启 Administrator 用户 删除其他用户!~~这个应该都会吧!~~ 1."以管理员身份运行,所有程序→附件→命令提示符",右击选择&q ...

  3. WINDOWS系统密码破解全攻略

    题目:Windows系统密码破解全攻略 作者:hackest [H.S.T.] 来源:hackest's blog 此文章已发表在<黑客X档案>2009年第6期杂志上 后经作者发布在博客上 ...

  4. X61/T61/X200/T400/T500/W500/W700使用XP安装盘安装系统及驱动全攻略(

    1楼 大 中 小 发表于 2009-2-8 06:59 PM  只看该作者 X61/T61/X200/T400/T500/W500/W700使用XP安装盘安装系统及驱动全攻略(视频) X61/T61/ ...

  5. 网吧克隆——XP系统母盘制作全攻略

    机器配置: AMD Athlon XP 2500+ (0.13盒). 磐正EP-8KRAI . HY 512MB DDR 400 .   西捷 酷鱼7200.7 80G.七彩虹 5700CF 白金版. ...

  6. 教你做Ghost系统盘--Windows2000、XP、2003系统万能Ghost全攻略New!!!!!!

    来自Asp.net精英论坛:bbs.1aspx.com 一直以来,安装操作系统和应用软件是一件吃力不讨好的事情,虽然现在的电脑速度越来越快,并且操作系统安装步骤也很简单,但每次都是只能等系统慢慢地一步 ...

  7. 用Python实现磁盘IO操作全攻略,让数据流动起来!

    导读:IO在计算机中指的是Input/Output,也就是输入输出.凡是用到数据交换的地方,都会涉及IO编程,例如磁盘.网络的数据传输. 在IO编程中,Stream(流)是一种重要的概念,分为输入流( ...

  8. Windows2000、XP、2003系统万能Ghost全攻略(转)

    一直以来,安装操作系统和应用软件是一件吃力不讨好的事情,虽然现在的电脑速度越来越快,并且操作系统安装步骤也很简单,但每次都是只能等系统慢慢地一步步完成,系统装完后,接着装应用软件,并具还要设置网络使用 ...

  9. 2019年计算机无纸化试题,2019年中级会计无纸化考试操作全攻略!机考常见问题大合集!...

    2019年中级会计职称考试继续采用无纸化机考形式,要求考生在电脑上完成所有题目.对于部分考生来说,机考操作是有难度的,为了避免考生操作不熟练导致失分,东奥小编将结合机考操作流程以及公式符号的录入为大家 ...

最新文章

  1. 为什么说康托尔知道聚宝盆的秘密?
  2. IDA Pro的patch插件 KeyPatch
  3. VTK:几何对象之Quad
  4. centos7安装mysql日志空白_centos7安装Mysql爬坑记录 - G
  5. CSS 盒子模型(Box model)中的 padding 与 margin
  6. python图形界面库哪个好_8个必备的Python GUI库
  7. python代码读取外部变量_在Python中从外部文件中写入和读取特定的变量
  8. 进程调度(一)--linux内核设计与实现读书笔记
  9. 【路径规划】基于matlab A_star算法机器人栅格地图路径规划【含Matlab源码 116期】
  10. STK之Commu模块之二-仿真同步卫星与地面站通信显示EIRP分布
  11. linux程序开发ide,LiteIDE 开发工具指南 (Go语言开发工具)
  12. 手把手DES加密解密详解-Java,Python
  13. 查看浏览器版本及内核信息
  14. ajax传参的一些总结
  15. 响铃:AWE2018只是“草船”,三星已成大屏电视“东风”
  16. PhysX官方手册翻译
  17. linux mtr命令安装,如果mtr没在你的机子上安装
  18. Android 11 强制分区存储
  19. flask专题-小说网站开发二(抓取数据)
  20. 一起来看流星雨剧情简介/剧情介绍/剧情分集介绍第二十八集

热门文章

  1. D. Divide and Sum(组合数学)
  2. HarmonyOS学习路之开发基础知识——应用基础知识
  3. 汉字----dgfont
  4. 部落卫队 解题报告
  5. Python玩转Excel:统计函数
  6. 微信支付-付款到零钱开发流程
  7. 【JAVA程序设计】(C00072)基于Springboot的网上点餐管理系统
  8. 使用Flax、Jax、TF经历记录
  9. python怎么编写视觉识别系统_视觉识别系统的制作方法
  10. 40 - 前置操作符和后置操作符