На плате 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
При загрузке ядра на 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 ядра и отключить драйвер там).
Добавляем в него:
blacklist pn533
sudo modprobe -r pn533
Звуковая и световая индикация на картридере не включается. Но при загрузке модуля nfc (modprobe nfc) и перезапуске демона (pcscd), картридер начинает корректно реагировать на поднесение карты. Моё приложение, которое использует библиотеку libpcsclite, в это время корректно отрабатывает чтение c карты. Но постепенно демон умирает и картридер перестает работать. Ставим модуль nfc в автозагрузку, добавляя в /etc/modules строку nfc, и получаем временное плохое решение.
Следующая проблема заключается в том, что устройство ACR122U перестает корректно распознаваться, если мы подключаем его через USB 2.0 Hub, в который также подключается USB-разъем touchscreen'а.
Удалим на устройстве установленные пакеты:
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)
Мы подключаемся по RS-232 к BBB через собранную на коленке плату-конвертор. Подробнее тут . На нашей рабочей ОС Ubuntu 14.04 amd64 зайдем в терминал и установим связь:
sudo screen /dev/ttyS0 115200,cs8
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".
Команда 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
При загрузке ядра на 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
Ludovic Rousseau. Решение проблемы состоит в том, чтобы выгрузить и отменить загрузку драйвера устройства pn533 (можно ещё залезть в сборку Device Tree ядра и отключить драйвер там).
Формируем конфигурационный файл, запрещающий загрузку драйвера pn533:
sudo nano /etc/modprobe.d/blacklist-libnfc.conf
Добавляем в него:
blacklist 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
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
Устанавливаем собранный пакет:
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
Устанавливаем собранный пакет:
cd ..
dpkg --install ./pcscd_1.8.13-1_armhf.deb
Отредактируем файл репозитариев (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
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
apt-get build-dep pcscd
Пересобираем пакет c помощью вызова скрипта debuild -us -uc (не будем его подписывать):
cd ./pcsc-lite-1.8.13/
debuild -us -uccd ..
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)
Комментариев нет:
Отправить комментарий