Почему массовая передача данных по USB с помощью устройства Perl ::USB отключена?

#linux #perl #usb

#linux #perl #usb

Вопрос:

Я запустил этот код Perl, работающий в Linux:

 my $command = "x{11}x{22}x{33}x{44}x{55}x{66}x{77}x{88}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}x{00}"; # total of 20 bytes to transmit
my $bytesWritten = $device->bulk_write(0x01, $command, 1000);
  

Используя Wireshark, я обнаружил, что фактические передаваемые данные приложения являются

 0000    00 00 00 00 00 00 00 00    00 00 00 00 00 00 00 00
0010    00 00 00 00 00 00 00 00    11 22 33 44
  

Печать $bytesWritten показывает, что было передано 20 байт, но это отличается от того, что было зафиксировано Wireshark.

В чем может быть проблема?

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

1. Может ли кто-нибудь показать мне правильный способ формирования URB bulk_transfer? Должна ли переменная byte содержать только команду / данные, которые я хотел бы отправить, или есть что-то еще, что мне нужно туда вставить?

2. @daxim, спасибо, что показал мне, как сделать мой пост более читаемым 🙂

3. Соответствует ли информация в wiki. wireshark.org/CaptureSetup/USB проливает какой-либо свет? т. Е. используете ли вы kernel >= 2.6.21 и libpcap >= 1.1.0?

4. Что показывает структура perl? Сколько из них было запрошено для отправки с помощью системного вызова и сколько, по словам системного вызова, было отправлено?

5. какую версию libusb вы используете?

Ответ №1:

Возможно, что программа Perl работает должным образом.

Я видел, как wireshark обрезает USB-пакеты (еще одна ссылка: http://www.mail-archive.com/tcpdump-workers@lists.tcpdump.org/msg04042.html).

Мне пришлось использовать приложение «usbmon», чтобы получить полный захват: http://people.redhat.com/zaitcev/linux /