Сканер отпечатков пальцев - BioPod в OpenWrt

Как-то давно меня просил заказчик обеспечить в системе контроля доступа помимо стандартных проксимити карт и тач-мемори еще и доступ по отпечаткам пальцев. Помню, абсолютно не было времени на это, да и не представлял себе, как это сделать вообще. Поэтому пришлось потерять клиента.

Недавно нашел некое устройство USB BioPod от компании APC, в котором используется биометрический сенсор AES3500. Попробуем подключить его к роутеру и получить снимок отпечатка пальца.

На этапе конфигурации OpenWrt нужно отметить следующие модули:
Libraries:
<M> libjpeg
Utilities:
<M> jpeg-tools

В составе OpenWrt поддержки APC USB Biopod нет.

Драйвер под Linux для APC USB Biopod можно скачать отсюда http://ww2.cs.fsu.edu/~micsmith/devices/ Спасибо его авторам. Правда скачав его, можно заметить, что он довольно древний и сходу не собирается. Ситуацию усугубляет еще и отсутствие хотя бы какой-то документации о том, как с ним работать.

Ну раз уж приступили к задаче, думаю, не стоит её бросать. Немного погуглив, чтобы понять хотя бы, как устроен usb-драйвер, пришел к выводу, что не так уж всё и страшно. Наверно даже было бы интересно самому написать драйвер под Linux для APC BIOPOD, но для этого необходима куча времени и документация на сам сенсор.

В общем, потратив некоторое время, получил работоспособную версию. Здесь не буду описывать, что и где надо поправить, а просто предлагаю взять мою исправленную версию Linux драйвера APC BIOPOD biopod_linux_drv.tar.bz2.

Единственное, что стоит заметить — собирать его естественно нужно, используя кросс-компилятор. Как это сделать, можно посмотреть опять же в Makefile. И при сборке нужно выполнить: make testers (соберутся утилиты), а затем make(соберется сам модуль).

Копируем директорию biopod на раздел MyData флэшки (раздел, который монтируется к директории home)

Итак, загружаемся и устанавливаем пакеты:

root@OpenWrt:/# opkg install bash bash-completion
Installing bash (3.2-2) to root...
Downloading ftp://ftp:ftp@192.168.0.9/bash_3.2-2_brcm47xx.ipk.
Installing libncurses (5.7-3) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libncurses_5.7-3_brcm47xx.ipk.
Installing bash-completion (20080705-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/bash-completion_20080705-1_all.ipk.
Configuring libncurses.
Configuring bash.
Configuring bash-completion.
root@OpenWrt:/# opkg install libjpeg jpeg-tools
Installing libjpeg (6b-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/libjpeg_6b-1_brcm47xx.ipk.
Installing jpeg-tools (6b-1) to root...
Downloading ftp://ftp:ftp@192.168.0.9/jpeg-tools_6b-1_brcm47xx.ipk.
Configuring libjpeg.
Configuring jpeg-tools.

Переходим в директорию /home/biopod. Дальше выполняем магическую последовательность действий.

Загружаем модуль и смотрим вывод команды lsmod:

root@OpenWrt:/home/biopod_dlink# ./biopod_load
root@OpenWrt:/home/biopod_dlink# lsmod |grep bio
biopod 9568 0
usbcore 103600 7 biopod,snd_usb_audio,snd_usbmidi_lib,usb_storage,ohci_hcd,ehci_hcd

Как нетрудно догадаться — скрипт biopod_unload — выгружает модуль.
Далее подключаем APC BIOPOD и смотрим вывод dmesg и ls:

root@OpenWrt:/home/biopod_dlink# dmesg
usbcore: registered new interface driver biopod
usb 1-1.2: new full speed USB device using ohci_hcd and address 4
USB Biopod device now attached to USBBiopod-192
root@OpenWrt:/home/biopod_dlink# ls /dev/bio*
/dev/biopod0

Модуль подгрузился. Устройство создалось. Вроде пашет! Проверим..
Запускаем скрипт setdefaults.sh (судя по названию — конфигурит biopod AES3500)

root@OpenWrt:/home/biopod_dlink# ./setdefaults.sh
80 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
80 0 81 0 82 0 83 10 84 7 85 7F 86 3 87 1 88 2 89 3 8A 5 8B 2F 8C 7A 8D 0 8E 20 8F 22 90 0 91 14 92 3
93 0 94 F 95 0 96 7F 97 4 98 20 99 0 0 0 0 0 9C 0 9D 0 9E 0 0 0 A2 2 A1 3 A7 8 A9 40 B4 5 BB 22

Создадим отпечаток пальца. Подносим палец к сенсору и запускаем createFingerprints.sh:

root@OpenWrt:/home/biopod_dlink# ./createFingerprints.sh
count0
fprint0
0 0 81 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 count =
8329
Starting ioctl based image retrievalioctl biopod_start called with retval 0
ioctl biopod_image called with retval -1
ioctl biopod_stop called with retval 0
count01
fprint01
0 0 81 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2 count =
8329
Starting ioctl based image retrievalioctl biopod_start called with retval 0
ioctl biopod_image called with retval -1
ioctl biopod_stop called with retval 0

В результате, в текущей директории создался файл с отпечатком пальца. У меня он вот такой:

сканер отпечатков пальцев
APC BIOPOD AES3500