понедельник, 13 июля 2015 г.

Безуспешные попытки заставить работать nfc-картридер ACR122 на BBB под управлением Debian 8

На плате BBB используется один из последних дистрибутивов GNU/Linux Debian 8, в котором есть пакетный репозитарий.

Мы подключаемся по RS-232 к BBB через собранную на коленке плату-конвертор. Подробнее тут . На нашей рабочей ОС Ubuntu 14.04 amd64 зайдем в терминал и установим связь:

sudo screen /dev/ttyS0 115200,cs8 

1. Подключим BeagleBone Black через коммутатор к сети и поставим уже собранные пакеты демона (pcscd) и драйвера (libacsccid) (middleware-библиотека libpcsclite уже стоит):

sudo apt-get update
sudo apt-get install pcscd
sudo apt-get install libacsccid1

Команда lsusb (sudo lsusb) видит картридер ACR122:

Bus 001 Device 005: ID 072f:2200 Advanced Card Systems, Ltd 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Запустим демон в режиме отладки (sudo /usr/sbin/pcscd -fd), чтобы увидеть, что драйвер картридера libacsccid корректно загрузился при подключении устройства:

00000000 debuglog.c:269:DebugLogSetLevel() debug level=debug
00000150 configfile.l:254:DBGetReaderListDir() Parsing conf directory: /etc/reader.conf.d
00000034 configfile.l:307:DBGetReaderList() Parsing conf file: /etc/reader.conf.d/libccidtwin
00000059 configfile.l:266:DBGetReaderListDir() Skipping non regular file: .
00000019 configfile.l:266:DBGetReaderListDir() Skipping non regular file: ..
00000020 pcscdaemon.c:545:main() pcsc-lite 1.8.10 daemon ready.
00001981 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/003/001
00000157 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/004/001
00000149 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/005/001
00000148 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001
00000140 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/006/001
00000140 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/007/001
00000111 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/007/001
00000116 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x072F, PID: 0x2200, path: /dev/bus/usb/007/003
00000040 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x072F, PID: 0x2200, path: /dev/bus/usb/007/003
00000017 hotplug_libudev.c:321:HPAddDevice() Adding USB device: ACS ACR122U
00000038 readerfactory.c:989:RFInitializeReader() Attempting startup of ACS ACR122U 00 00 using /usr/lib/pcsc/drivers/ifd-acsccid.bundle/Contents/Linux/libacsccid.so
00000210 readerfactory.c:874:RFBindFunctions() Loading IFD Handler 3.0
00000041 ifdhandler.c:2328:init_driver() Driver version: 1.0.5
00000248 ifdhandler.c:2341:init_driver() LogLevel: 0x0003
00001316 ifdhandler.c:2361:init_driver() DriverOptions: 0x00C0
00000221 ifdhandler.c:2388:init_driver() ACR38CardVoltage: 0
00000210 ifdhandler.c:2395:init_driver() ACR38CardType: 0
00000016 ifdhandler.c:94:IFDHCreateChannelByName() lun: 0, device: usb:072f/2200:libudev:0:/dev/bus/usb/007/003
00094665 ccid_usb.c:375:OpenUSBByName() Manufacturer: Advanced Card Systems Ltd.
00000199 ccid_usb.c:385:OpenUSBByName() ProductString: ACS CCID driver
00000191 ccid_usb.c:391:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
00012154 ccid_usb.c:643:OpenUSBByName() Can't claim interface 007/003: Device or resource busy
00025410 ifdhandler.c:118:IFDHCreateChannelByName() failed
00000039 readerfactory.c:1020:RFInitializeReader() Open Port 0x200000 Failed (usb:072f/2200:libudev:0:/dev/bus/usb/007/003)
00000015 readerfactory.c:312:RFAddReader() ACS ACR122U init failed.
00000018 readerfactory.c:535:RFRemoveReader() UnrefReader() count was: 1
00000013 readerfactory.c:1040:RFUnInitializeReader() Attempting shutdown of ACS ACR122U 00 00.
00000012 readerfactory.c:911:RFUnloadReader() Unloading reader driver.
00000238 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/008/001
00000126 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0001, path: /dev/bus/usb/008/001
00000121 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x04D9, PID: 0x1702, path: /dev/bus/usb/008/002
00000119 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x04D9, PID: 0x1702, path: /dev/bus/usb/008/002
00000150 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001
00000116 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/002/001
00000118 hotplug_libudev.c:269:get_driver() Looking for a driver for VID: 0x058F, PID: 0x6362, path: /dev/bus/usb/002/002
^C31211962 pcscdaemon.c:726:signal_trap() Received signal: 2
00000017 pcscdaemon.c:745:signal_trap() Preparing for suicide
01000081 readerfactory.c:1273:RFCleanupReaders() entering cleaning function
00000026 winscard_svc.c:130:ContextsDeinitialize() remaining threads: 0

00000007 pcscdaemon.c:670:at_exit() cleaning /var/run/pcscd

Возникает ошибка: "Can't claim interface 007/003: Device or resource busy".

При загрузке ядра на BBB мы получаем следующие сообщения инициализации USB (dmesg | grep usb):

root@arm:/usr/sbin# dmesg | grep usb
[    2.699934] usbcore: registered new interface driver usbfs
[    2.700007] usbcore: registered new interface driver hub
[    2.700075] usbcore: registered new device driver usb
[    3.874971] usbcore: registered new interface driver udl
[    3.892840] usbcore: registered new interface driver dln2
[    4.168040] usbcore: registered new interface driver usb-storage
[    4.175175] 47401300.usb-phy supply vcc not found, using dummy regulator
[    4.183797] musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn)
[    4.183810] musb-hdrc: MHDRC RTL version 2.0 
[    4.183817] musb-hdrc: setup fifo_mode 4
[    4.183833] musb-hdrc: 28/31 max ep, 16384/16384 memory
[    4.184753] 47401b00.usb-phy supply vcc not found, using dummy regulator
[    4.193260] musb-hdrc: ConfigData=0xde (UTMI-8, dyn FIFOs, bulk combine, bulk split, HB-ISO Rx, HB-ISO Tx, SoftConn)
[    4.193272] musb-hdrc: MHDRC RTL version 2.0 
[    4.193278] musb-hdrc: setup fifo_mode 4
[    4.193290] musb-hdrc: 28/31 max ep, 16384/16384 memory
[    4.193388] musb-hdrc musb-hdrc.1.auto: MUSB HDRC host driver
[    4.199391] musb-hdrc musb-hdrc.1.auto: new USB bus registered, assigned bus number 1
[    4.207430] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
[    4.214264] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[    4.221515] usb usb1: Product: MUSB HDRC host driver
[    4.226508] usb usb1: Manufacturer: Linux 4.1.0-rc1-bone0 musb-hcd
[    4.232711] usb usb1: SerialNumber: musb-hdrc.1.auto
[    4.395355] usbcore: registered new interface driver usbhid
[    4.400953] usbhid: USB HID core driver
[   23.783052] usb 1-1: new full-speed USB device number 2 using musb-hdrc
[   23.926410] usb 1-1: New USB device found, idVendor=072f, idProduct=2200
[   23.933231] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[   23.940419] usb 1-1: Product: ACR122U PICC Interface
[   23.945487] usb 1-1: Manufacturer: ACS
[   24.131674] usbcore: registered new interface driver pn533

Картридер неправильно опознается ядром как устройство pn533 (usbcore: registered new interface driver pn533). Как пишут на форуме, в ядре версии  (>= 3.1) появилась своя подсистема NFC с своими драйверами, которые конфликтуют с драйверами CCID самого разработчика pscslite
Ludovic Rousseau. Решение проблемы состоит в том, чтобы выгрузить и отменить загрузку драйвера устройства pn533 (можно ещё залезть в сборку Device Tree ядра и отключить драйвер там).

Формируем конфигурационный файл, запрещающий загрузку драйвера pn533:

sudo nano /etc/modprobe.d/blacklist-libnfc.conf

Добавляем в него:

blacklist pn533

Выгружаем сам драйвер из активной системы:

sudo modprobe -r pn533

После перезагрузки системы на BBB вызов команды /usr/sbin/pcscd -fd выводит следующее:

root@arm:~# /usr/sbin/pcscd -fd
00000000 debuglog.c:292:DebugLogSetLevel() debug level=debug
00003033 configfile.l:283:DBGetReaderListDir() Parsing conf directory: /etc/reader.conf.d
00001684 configfile.l:355:DBGetReaderList() Parsing conf file: /etc/reader.conf.d/libccidtwin
00001802 configfile.l:317:DBGetReaderListDir() Skipping non regular file: .
00001306 configfile.l:317:DBGetReaderListDir() Skipping non regular file: ..
00001368 pcscdaemon.c:569:main() pcsc-lite 1.8.13 daemon ready.
00023781 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001
00002998 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x1D6B, PID: 0x0002, path: /dev/bus/usb/001/001
00002729 hotplug_libudev.c:296:get_driver() Looking for a driver for VID: 0x072F, PID: 0x2200, path: /dev/bus/usb/001/002
00001504 hotplug_libudev.c:435:HPAddDevice() Adding USB device: ACS ACR122U
00001646 readerfactory.c:1012:RFInitializeReader() Attempting startup of ACS ACR122U 00 00 using /usr/lib/pcsc/drivers/ifd-acsccid.bundle/Contents/Linux/libacsccid.so
00003277 readerfactory.c:897:RFBindFunctions() Loading IFD Handler 3.0
00001837 ifdhandler.c:2330:init_driver() Driver version: 1.0.8
00004341 ifdhandler.c:2343:init_driver() LogLevel: 0x0003
00003992 ifdhandler.c:2363:init_driver() DriverOptions: 0x00C0
00003897 ifdhandler.c:2390:init_driver() ACR38CardVoltage: 0
00003782 ifdhandler.c:2397:init_driver() ACR38CardType: 0
00001249 ifdhandler.c:94:IFDHCreateChannelByName() lun: 0, device: usb:072f/2200:libudev:0:/dev/bus/usb/001/002
00178173 ccid_usb.c:375:OpenUSBByName() Manufacturer: Advanced Card Systems Ltd.
00002323 ccid_usb.c:385:OpenUSBByName() ProductString: ACS CCID driver
00002030 ccid_usb.c:391:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
00084474 ccid_usb.c:652:OpenUSBByName() Found Vendor/Product: 072F/2200 (ACS ACR122U)
00000771 ccid_usb.c:654:OpenUSBByName() Using USB bus/device: 001/002
01002109 ifdhandler.c:220:IFDHCreateChannelByName() dwFeatures: 0x00020040
00001456 ifdhandler.c:221:IFDHCreateChannelByName() wLcdLayout: 0x0000
00001121 ifdhandler.c:222:IFDHCreateChannelByName() bPINSupport: 0x00
00001088 ifdhandler.c:223:IFDHCreateChannelByName() dwMaxCCIDMessageLength: 271
00001402 ifdhandler.c:224:IFDHCreateChannelByName() dwMaxIFSD: 256
00000154 ifdhandler.c:225:IFDHCreateChannelByName() dwDefaultClock: 4000
00000693 ifdhandler.c:226:IFDHCreateChannelByName() dwMaxDataRate: 250000
00000138 ifdhandler.c:227:IFDHCreateChannelByName() bMaxSlotIndex: 0
00000122 ifdhandler.c:228:IFDHCreateChannelByName() bCurrentSlotIndex: 0
00000697 ifdhandler.c:229:IFDHCreateChannelByName() bInterfaceProtocol: 0x00
00000135 ifdhandler.c:230:IFDHCreateChannelByName() bNumEndpoints: 3
00000126 ifdhandler.c:231:IFDHCreateChannelByName() bVoltageSupport: 0x07
00000724 ifdhandler.c:536:IFDHGetCapabilities() tag: 0xFB3, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00000148 readerfactory.c:350:RFAddReader() Using the pcscd polling thread
00000338 ccid_usb.c:1498:InterruptRead() Reader: 001/002
00000804 ccid_usb.c:1516:InterruptRead() Slot 0: 0x00
02002053 ccid_usb.c:1090:ReadUSB() usb_bulk_read(001/002): Resource temporarily unavailable
00001482 ifdwrapper.c:371:IFDStatusICC() Card not transacted: 612
00001119 eventhandler.c:233:EHSpawnEventHandler() Initial Check Failed on ACS ACR122U 00 00
00001180 readerfactory.c:361:RFAddReader() ACS ACR122U init failed.
00001124 readerfactory.c:558:RFRemoveReader() UnrefReader() count was: 1
00001103 readerfactory.c:1063:RFUnInitializeReader() Attempting shutdown of ACS ACR122U 00 00.
00000195 ifdhandler.c:437:IFDHCloseChannel() usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00001795 readerfactory.c:934:RFUnloadReader() Unloading reader driver.
00000681 hotplug_libudev.c:501:HPAddDevice() Failed adding USB device: ACS ACR122U
00001389 readerfactory.c:1012:RFInitializeReader() Attempting startup of ACS ACR122U 00 00 using /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Linux/libccid.so
00002124 readerfactory.c:897:RFBindFunctions() Loading IFD Handler 3.0
00002023 ifdhandler.c:1927:init_driver() Driver version: 1.4.18
00010158 ifdhandler.c:1944:init_driver() LogLevel: 0x0003
00001545 ifdhandler.c:1955:init_driver() DriverOptions: 0x0000
00003202 ifdhandler.c:96:CreateChannelByNameOrChannel() Lun: 0, device: usb:072f/2200:libudev:0:/dev/bus/usb/001/002
00001438 ccid_usb.c:284:OpenUSBByName() Using: /usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plist
00009651 ccid_usb.c:302:OpenUSBByName() ifdManufacturerString: Ludovic Rousseau (ludovic.rousseau@free.fr)
00001477 ccid_usb.c:303:OpenUSBByName() ifdProductString: Generic CCID driver
00001242 ccid_usb.c:304:OpenUSBByName() Copyright: This driver is protected by terms of the GNU Lesser General Public License version 2.1, or (at your option) any later version.
00012421 ccid_usb.c:596:OpenUSBByName() Found Vendor/Product: 072F/2200 (ACS ACR122U PICC Interface)
00001651 ccid_usb.c:598:OpenUSBByName() Using USB bus/device: 1/2
00001172 ccid_usb.c:650:OpenUSBByName() bNumDataRatesSupported is 0
03005752 ccid_usb.c:798:ReadUSB() read failed (1/2): -7 Resource temporarily unavailable
00002414 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB3, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00001325 readerfactory.c:355:RFAddReader() Using the reader polling thread
00002295 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFAE, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00001331 ifdhandler.c:463:IFDHGetCapabilities() Reader supports 1 slot(s)
00001550 readerfactory.c:1353:RFWaitForReaderInit() Waiting init for reader: ACS ACR122U 00 00
00002976 ifdhandler.c:1139:IFDHPowerICC() action: PowerUp, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00002459 eventhandler.c:289:EHStatusHandlerThread() powerState: POWER_STATE_POWERED
00001289 Card ATR: 3B 8F 80 01 80 4F 0C A0 00 00 03 06 03 00 01 00 00 00 00 6A 
08002816 ccid_usb.c:798:ReadUSB() read failed (1/2): -7 Resource temporarily unavailable
00000138 ifdwrapper.c:371:IFDStatusICC() Card not transacted: 612
00000058 eventhandler.c:478:EHStatusHandlerThread() powerState: POWER_STATE_UNPOWERED
^C01299378 pcscdaemon.c:750:signal_trap() Received signal: 2
00000104 pcscdaemon.c:769:signal_trap() Preparing for suicide
00004968 hotplug_libudev.c:676:HPStopHotPluggables() Hotplug stopped
01001623 readerfactory.c:1296:RFCleanupReaders() entering cleaning function
00001386 readerfactory.c:1305:RFCleanupReaders() Stopping reader: ACS ACR122U 00 00
00001130 readerfactory.c:558:RFRemoveReader() UnrefReader() count was: 1
00001064 eventhandler.c:179:EHDestroyEventHandler() Stomping thread.
00001250 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB1, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00000176 ifdhandler.c:375:IFDHGetCapabilities() tag: 0xFB2, usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00000134 eventhandler.c:204:EHDestroyEventHandler() Request stopping of polling thread
00000743 ifdhandler.c:340:IFDHStopPolling() usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
00400660 eventhandler.c:501:EHStatusHandlerThread() Die
00001340 eventhandler.c:219:EHDestroyEventHandler() Thread stomped.
00000197 readerfactory.c:1063:RFUnInitializeReader() Attempting shutdown of ACS ACR122U 00 00.
00000730 ifdhandler.c:266:IFDHCloseChannel() usb:072f/2200:libudev:0:/dev/bus/usb/001/002 (lun: 0)
03001115 ccid_usb.c:798:ReadUSB() read failed (1/2): -7 Resource temporarily unavailable
00001948 ccid_usb.c:191:close_libusb_if_needed() libusb_exit
00002357 readerfactory.c:934:RFUnloadReader() Unloading reader driver.
00000867 winscard_svc.c:154:ContextsDeinitialize() remaining threads: 0
00001388 pcscdaemon.c:694:at_exit() cleaning /var/run/pcscd

Звуковая и световая индикация на картридере не включается. Но при загрузке модуля nfc (modprobe nfc) и перезапуске демона (pcscd), картридер начинает корректно реагировать на поднесение карты. Моё приложение, которое использует библиотеку libpcsclite, в это время корректно отрабатывает чтение c карты. Но постепенно демон умирает и картридер перестает работать. Ставим модуль nfc в автозагрузку, добавляя в /etc/modules строку nfc, и получаем временное плохое решение.

Следующая проблема заключается в том, что устройство ACR122U перестает корректно распознаваться, если мы подключаем его через USB 2.0 Hub, в который также подключается USB-разъем touchscreen'а.

2. Попробуем пересобрать deb-пакеты драйвера (libacsccid1) и демона (pcscd) из репозитария на плате вручную.

Отредактируем файл репозитариев (nano /etc/apt/sources.list), раскомментив репозитарии с исходниками пакетов:

deb http://ftp.us.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.us.debian.org/debian/ jessie main contrib non-free

deb http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free
deb-src http://ftp.us.debian.org/debian/ jessie-updates main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

#deb http://ftp.debian.org/debian jessie-backports main contrib non-free
##deb-src http://ftp.debian.org/debian jessie-backports main contrib non-free

#Kernel source (repos.rcn-ee.com) : https://github.com/RobertCNelson/linux-stable-rcn-ee
#
#git clone https://github.com/RobertCNelson/linux-stable-rcn-ee
#cd ./linux-stable-rcn-ee
#git checkout `uname -r` -b tmp
#
deb [arch=armhf] http://repos.rcn-ee.com/debian/ jessie main
deb-src [arch=armhf] http://repos.rcn-ee.com/debian/ jessie main

Установим вспомогательный пакет dpkg-dev, содержащий утилиту для распаковки dpkg-source  (у него много зависимостей :( ):

apt-get install dpkg-dev

2.1. Скачаем в текущую папку (у меня домашняя папка суперпользователя /root) исходники пакета libacsccid1 (на самом деле скачивается пакет acsccid):

apt-get source libacsccid1

Скачаем в текущую папку зависимости пакета libacsccid1 (зависимостей меньше, чем в предыдущем запросе, но всё равно много :((  ):

apt-get build-dep libacsccid1

Установим дополнительно пакет devscripts, содержащий утилиту debuild (очень много зависимостей :(((  ):

apt-get install devscripts

Пересобираем пакет c помощью вызова скрипта debuild -us -uc (не будем его подписывать):

cd ./acsccid-1.0.8/
debuild -us -uc

Устанавливаем собранный пакет:

cd ..
dpkg --install ./libacsccid1_1.0.8-1_armhf.deb

2.2. Скачаем в текущую папку (у меня домашняя папка суперпользователя /root) исходники пакета pcscd (на самом деле скачивается пакет pcsc-lite):

apt-get source pcscd

Скачаем в текущую папку зависимости пакета pcscd :

apt-get build-dep pcscd
Пересобираем пакет c помощью вызова скрипта debuild -us -uc (не будем его подписывать):

cd ./pcsc-lite-1.8.13/
debuild -us -uc

Устанавливаем собранный пакет:

cd ..
dpkg --install ./pcscd_1.8.13-1_armhf.deb


3. Попробуем собрать вручную на рабочей машине Ubuntu 14.04 amd64 c установленным кросскомпилятором Linaro драйвер (libacsccid) и демон (pcscd).

Удалим на устройстве установленные пакеты:
sudo apt-get remove libacsccid1
sudo apt-get remove pcscd

3.1. Соберем libusb, так как от него зависит pcsclite. Скачиваем версию 1.0.9 отсюда. Не берем последнюю версию 1.0.19, так как в ней появилась внешняя зависимость от libudev. Переходим в папку с проектом (у меня /media/Data/Libraries/bbb/libusb-1.0.9/), настраиваем кросскомпиляцию, выбираем директорию для установки собранной библиотеки и собираем:

cd /media/Data/Libraries/bbb/libusb-1.0.9./configure --host=arm-linux-gnueabihf --build=i686-pc-linux-gnu --prefix=/home/adil/target
make
make install

3.2. Соберем libusb-compat для совместимости со старой версией libusb-0.1, в которой присутствовал файл usb.h. Скачиваем версию 0.1.5 отсюда. Настраиваем и собираем:

cd /media/Data/Libraries/bbb/libusb-compat-0.1.5
./configure --host=arm-linux-gnueabihf --build=i686-pc-linux-gnu --prefix=/home/adil/target LIBUSB_1_0_CFLAGS="-I/home/adil/target/include/libusb-1.0" LIBUSB_1_0_LIBS="-L/home/adil/target/lib -lusb-1.0"
make
make install

3.3. Собираем проект pcsclite. Скачиваем версию 1.5.5 отсюда. Переходим в папку с проектом (у меня /media/Data/Libraries/bbb/pcsc-lite-1.5.5/), отказываемся от использования библиотеки libhal, выбираем директорию для установки на устройстве (/usr/local/pcsc/drivers; после выполнения шага ./configure параметр USB drop directory должен быть /usr/local/pcsc/drivers) и собираем:

./configure --host=arm-linux-gnueabihf --build=i686-pc-linux-gnu --prefix=/usr/local LIBUSB_CFLAGS="-I/home/adil/target/include/libusb-1.0/ -I/home/adil/target/include" LIBUSB_LIBS="-L/home/adil/target/lib/ -lusb-1.0 -lusb" --disable-libhal --enable-libusb
make
make install prefix=/home/adil/target

3.4. Собираем библиотеку драйвера libacsccid. Скачиваем версию 1.0.3 отсюда. Собираем (после выполнения шага ./configure параметр USB drop directory должен быть /usr/local/pcsc/drivers ):

./configure --host=arm-linux-gnueabihf --build=i686-pc-linux-gnu --prefix=/home/adil/target LIBUSB_CFLAGS="-I/home/adil/target/include -I/home/adil/target/include/libusb-1.0" LIBUSB_LIBS="-L/home/adil/target/lib/ -lusb-1.0 -lusb" --enable-usbdropdir=/usr/local/pcsc/drivers PCSC_LIBS="-L/home/adil/target/lib/ -lpcsclite" PCSC_CFLAGS="-I/home/adil/target/include/PCSC"
make
sudo make install

После сборки драйвера необходимо папку с ним скопировать на хост-системе из /usr/local/pcsc в ~/target/pcsc.

После успешной сборки четырех проектов необходимо скопировать содержимое трех папок ~target/lib, ~target/sbin, ~target/pcsc на файловую систему target-машины. Я это делаю сжатием всей папки ~/target, затем копирую архив с виртуальной машины на основную, а их основной через ssh-подключение на target-машину копирую папки ~/target/sbin, ~/target/lib, ~/target/pcsc в соответственно /usr/local/sbin, /usr/local/lib, /usr/local/pcsc.

После всего этого запускаем:

/usr/local/sbin/pcscd -fd

И получаем вывод:

root@arm:/usr/local/sbin# ./pcscd -fd
debuglog.c:230:DebugLogSetLevel() debug level=debug
pcscdaemon.c:512:main() pcsc-lite 1.5.5 daemon ready.
hotplug_libusb.c:403:HPEstablishUSBNotifications() Driver ifd-acsccid.bundle does not support IFD_GENERATE_HOTPLUG. Using active polling instead.
hotplug_libusb.c:412:HPEstablishUSBNotifications() Polling forced every 1 second(s)


Комментариев нет:

Отправить комментарий