Я пытаюсь разработать приложение, которое будет взаимодействовать с устройством чтения смарт-карт и считывать информацию со смарт-карты.
Позвольте мне дать вам среду разработки и используемое оборудование.
ОС: Red Hat Enterprise Linux 6
IDE: Затмение Юнона CDT
Язык: C / C ++
Оборудование:
Считыватель смарт-карт: Omnikey 5321 (https://www.hidglobal.com/products/readers/omnikey/5321)
Я установил драйвер и могу найти следующие каталоги / файлы:
/usr/lib64/pcsc/drivers/ifd-ccid.bundle
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents/info.plist
/usr/lib64/pcsc/drivers/ifdokrfid_lnx_x64-2.10.0.1.bundle/Contents/Linux
Содержимое info.plist четко показывает строку «OMNIKEY CardMan 5×21» под ключом «ifdFriendlyName».
Я хочу использовать стандарт PC / SC. Следовательно, я скачал и установил PCSC-lite и проверил, что демон (pcscd) работает и статус службы в порядке.
Теперь начинается интересная часть …
В своем коде я последовательно использовал следующие API.
SCARDCONTEXT oSCardContext;
SCardEstablishContext(SCARD_SCOPE_SYSTEM, NULL, NULL, & SCardContext);
SCardEstablishContext () возвращает SCARD_S_SUCCESS. Большой!
SCARDCONTEXT oSCardContext;
DWORD dwReaders = SCARD_AUTOALLOCATE;
LPSTR mszReaders;
SCardListReaders(oSCardContext, NULL, (LPSTR) & mszReaders, & dwReaders);
SCardListReaders () возвращает SCARD_E_NO_READERS_AVAILABLE. Нехорошо.
В этот момент я иду и проверяю, правильно ли подключен ридер. Да, это.
Я проверяю, могу ли я видеть какие-либо записи читателей в /etc/reader.conf, но я не вижу читателей, перечисленных здесь.
Затем я захожу в /etc/reader.conf.d, но здесь также не нахожу никаких файлов.
Я полагаю, что контекст смарт-карты пуст, и поэтому в списке нет читателей.
Таким образом, проблема сейчас заключается в том, что pcsc-lite не может обнаружить (?) Подключенный мой ридер и для какого драйвера был установлен?
Просто для проверки я написал простую программу, использующую библиотеку udev для чтения всех записей подсистемы "usb", и смог найти следующую информацию от udev о подключенном картридере:
Путь к узлу устройства: (ноль)
ID поставщика: 076b
Код продукта: 5321
Производитель: OMNIKEY
Продукт: Считыватель смарт-карт USB
серийный номер: (нуль)
Так что я уверен, что устройство можно обнаружить. Но почему PC / SC Resource Manager не может создать этот контекст?
Итак, как мне решить это?
Я новичок в Linux и пытаюсь решить эту проблему самостоятельно, не обращаясь за помощью. Но потом я вижу, что, когда есть нехватка времени, действительно разумнее обратиться за помощью к экспертам и людям, которые работали и / или сталкивались с такой проблемой.
Я слишком много гуглял, но не видел ни одной, у которой есть моя проблема. Так что я предполагаю, что мне не хватает чего-то действительно базового, возможно.
Если есть что-то, что я должен предоставить, пожалуйста, дайте мне знать. Я сделаю это как можно скорее.
Я ценю ваше время, чтобы прочитать.
С уважением.
РЕДАКТИРОВАТЬ :
У меня есть обновления ...
Я сделал следующее:
1. Я получил новый кард-ридер (SCM Microsystems), и все же он не был обнаружен.
2. Демон pcscd был запущен во время загрузки по умолчанию. После того, как я вошел в систему, я остановил службу, а затем запустил ее в режиме переднего плана с помощью команды «pcscd -a -f -d», и считыватель SCM был успешно обнаружен.
3. Я попытался подключить читателя в моем вопросе выше, OMNIKIEY 5321, и он не был обнаружен.
По-видимому, я пришел к следующему выводу:
1. По какой-то причине, пока pcscd не был остановлен и запущен вручную в режиме переднего плана после того, как я вошел в систему, считыватели не были обнаружены.
2. У читателя / водителя OMNIKEY есть проблема.
С уважением.
Задача ещё не решена.
Других решений пока нет ...