Ридер бесконтактных карт RD-03AB и Linux

Ридер RD-03AB под Linux работает ещё лучше, чем под Windows 🙂 Разумеется, речь идёт про скорость обмена через USB HID интерфейс: в лине нет ограничения трафика USB HID устройств, по крайней мере такого ограничения нет в Ubuntu-клонах и OpenWrt. При работе через tty-устройства, ридер под Linux и Windows ведёт себя одинаково.

Linux обслуживает ридер RD-03AB как hidraw - устройство

Linux создал устройство hidraw4 для ридера RD-03AB

Скачать исходники софта можно здесь. Ридер не требует дополнительной установки каких-либо драйверов: система подхватывает его как hidraw-устройство. Однако, если ридер инсталлирован в многопользовательскую систему, система даст доступ к нему только root-у. Если нет желания запускать весь софт ридера через sudo, то следует добавить правило создания драйвера, в котором указывается разрешение использовать устройство всем пользователям: для этого следует скопировать из каталога INSTALL файл 90-ccr_rd0xab.rules в каталог /etc/udev/rules.d ,  перезапустить udev с помощью /etc/init.d/udev restart и переподключить ридер (если он уже был подключен).
В системе OpenWrt перед сборкой проекта следует проверить установки buildroot (команда make menuconfig, далее Kernel modules > USB Support > kmod-usb-hid).

Для сборки софта под Linux в системе должны присутствовать gcc (да уж, новость 🙂 ), должны быть установлены заголовочные файлы типа linux-headers-… , и должна быть установлена библиотека libudev. Впрочем, функции udev используются только для поиска ридера при подключении (link_hidopen), и, переписав функцию открытия ридера link_hidopen, можно вполне обойтись без помощи udev, что может быть актуально для embedded применений при отсутствии udev и наличии, например, hotplug. Собственно, сборка любой программы из пакета заключается в том, чтобы зайти в каталог программы, которую хочется собрать, и набрать команду make.
Сборка mfoc для Linux

Для «показательной» сборки была выбрана программа mfoc. Сборка и успешное «выдирание» ключей показывают работоспособность ридера. Именно работоспособность, а не просто запуск mfoc позволяют показать, что ридер работает так, как надо, а не просто запускается и рисует «весёлые» картинки, т.к. mfoc «требует» от ридера несколько бОльших возможностей, чем просто чтение данных.

Работа mfoc0.10.7.4 под Linux

В процессе подготовки исходника выяснилось, что gcc4.8.2 создаёт не очень удачный код в месте ветвления на измерение дистанции и восстановление ключей с точки зрения равенства временных интервалов в функции mf_enhanced_auth (смотреть два места с коментарием «// ATTENTION!!! TIME for pseudo random generator rotation!!!!«). Лень по уравниванию времён привела к тому, что вместо уравнивания был выбран более простой путь: просто в два раза увеличен разброс для поиска вариантов, благо USB HID под Lin работает значительно быстрее (параметр DEFAULT_TOLERANCE в файле mfoc.h).

Остальные проекты собираются аналогично mfoc, но перед сборкой следует заглянуть в файл readme в каталоге собираемой программы, т.к. исходники в каталогах acs-ibe и srd предназначены для сборки нескольких программ (эдакий 3-in-1).