Сканер отпечатков пальцев - BioPod в OpenWrt
Как-то давно меня просил заказчик обеспечить в системе контроля доступа помимо стандартных проксимити карт и тач-мемори еще и доступ по отпечаткам пальцев. Помню, абсолютно не было времени на это, да и не представлял себе, как это сделать вообще. Поэтому пришлось потерять клиента.
Недавно нашел некое устройство USB BioPod от компании APC, в котором используется биометрический сенсор AES3500. Попробуем подключить его к роутеру и получить снимок отпечатка пальца.
На этапе конфигурации OpenWrt нужно отметить следующие модули:
Libraries:
<M> libjpeg
Utilities:
<M> jpeg-tools
В составе OpenWrt поддержки APC USB Biopod нет.
Драйвер под Linux для APC USB Biopod можно скачать отсюда
Ну раз уж приступили к задаче, думаю, не стоит её бросать. Немного погуглив, чтобы понять хотя бы, как устроен usb-драйвер, пришел к выводу, что не так уж всё и страшно. Наверно даже было бы интересно самому написать драйвер под Linux для APC BIOPOD, но для этого необходима куча времени и документация на сам сенсор.
В общем, потратив некоторое время, получил работоспособную версию. Здесь не буду описывать, что и где надо поправить, а просто предлагаю взять мою исправленную версию Linux драйвера APC BIOPOD
Единственное, что стоит заметить — собирать его естественно нужно, используя кросс-компилятор. Как это сделать, можно посмотреть опять же в 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