Ubuntu无法识别我的智能卡读卡器

yxyvkwin  于 2023-08-03  发布在  其他
关注(0)|答案(2)|浏览(164)

我正在使用Ubuntu 18并尝试编写使用智能卡的代码。我正在使用ACS APG 8201-b2智能卡读卡器,并且我已经安装了the official driver(PC/SC驱动程序包3.04 MB,版本1.1.8,2020年1月10日)和libpcsclite-dev。首先,我尝试运行LudovicRousseau的示例C代码here。我可以将代码ApduTool.c编译为:

#ifdef WIN32
    #undef UNICODE
    #endif
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <winscard.h>
    
    #ifdef WIN32
    static char *pcsc_stringify_error(LONG rv)
    {
     static char out[20];
     sprintf_s(out, sizeof(out), "0x%08X", rv);
    
     return out;
    }
    #endif
    
    #define CHECK(f, rv) \
        if (SCARD_S_SUCCESS != rv) \
        { \
            printf(f ": %s\n", pcsc_stringify_error(rv)); \
            return -1; \
        }
    
    int main(void)
    {
        LONG rv;
    
        SCARDCONTEXT hContext;
        LPTSTR mszReaders;
        SCARDHANDLE hCard;
        DWORD dwReaders, dwActiveProtocol, dwRecvLength;
    
        SCARD_IO_REQUEST pioSendPci;
        BYTE pbRecvBuffer[258];
        BYTE cmd1[] = { 0x00, 0xA4, 0x04, 0x00, 0x0A, 0xA0, 0x00, 0x00, 0x00, 0x62, 0x03, 0x01, 0x0C, 0x06, 0x01 };
        BYTE cmd2[] = { 0x00, 0x00, 0x00, 0x00 };
    
        unsigned int i;
    
        rv = SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, &hContext);
        CHECK("SCardEstablishContext", rv)
    
        #ifdef SCARD_AUTOALLOCATE
            dwReaders = SCARD_AUTOALLOCATE;
            rv = SCardListReaders(hContext, NULL, (LPTSTR)&mszReaders, &dwReaders);
            CHECK("SCardListReaders", rv)
        #else
            rv = SCardListReaders(hContext, NULL, NULL, &dwReaders);
            CHECK("SCardListReaders", rv)
            mszReaders = calloc(dwReaders, sizeof(char));
            rv = SCardListReaders(hContext, NULL, mszReaders, &dwReaders);
            CHECK("SCardListReaders", rv)
        #endif
    
        printf("reader name: %s\n", mszReaders);
        return 0;
    }

字符串
使用Makefile

all: ApduTool.c
    gcc -c ApduTool.c -lsqlite3 -lpcsclite -lcrypto -lssl -I/usr/local/include/PCSC/ -I/usr/lib/ -I.
    gcc ApduTool.o -o ApduTool -lsqlite3 -lpcsclite -lcrypto -lssl -I/usr/local/include/PCSC/ -I/usr/lib/ -I.
clean:
    rm -f ApduTool *.o


当我运行ApduTool二进制文件时,SCardListReaders函数返回:SCardListReaders: Cannot find a smart card reader.我猜不出问题是什么,因为我可以看到我的USB读卡器时运行lsusb

Bus 001 Device 003: ID 072f:8206 Advanced Card Systems, Ltd 
Bus 001 Device 002: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub


我在运行代码时运行了PCSC守护进程(pcscd)。
有人能帮我解决这个问题吗?我是否错过了安装某个特定的驱动程序?

ca1c2owp

ca1c2owp1#

pcscd应记录发生的情况以及是否找到读卡器驱动程序。
请参阅https://pcsclite.apdu.fr/#support了解如何生成正确的pcscd日志。

juzqafwq

juzqafwq2#

事实上,您的系统将USB读卡器识别为存在并连接,这不足以知道如何解决它。
我假设,相应的驱动程序丢失(不确定,ACS是否为Linux提供了一个)。

相关问题