LINUX.ORG.RU

Где определены коды ошибок для usb? Ошибка: device descriptor read/64, error -110

$ wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.4.tar.bz2
$ tar xvfj linux-3.4.4.tar.bz2
$ cd linux-3.4.4
$ find . -name "*" -exec grep -Hn "device descriptor read" {} \;
./drivers/usb/core/hub.c:3109:                                  "device descriptor read/64, error %d\n",
./drivers/usb/core/hub.c:3155:                                  "device descriptor read/8, error %d\n",
./drivers/usb/core/hub.c:3205:          dev_err(&udev->dev, "device descriptor read/all, error %d\n",

Идём на строку 3109 файлика ./drivers/usb/core/hub.c, там вызов dev_err(&udev->dev, «device descriptor read/64, error %d\n», r)

а значит `-110` это r

а выше по коду присвоено r = usb_control_msg(...)

а значит грепаем usb_control_msg по сорцам

а находим его внезапно в Documentation/usb/error-codes.txt. Да и в нагрузку http://man-wiki.net/index.php/9:usb_control_msg

а и видим, что единственный код возврата, заданный для usb_control_msg(...), это -ETIMEDOUT

а пробуем грепать define'ишен ETIMEDOUT по сорцам

а внезапно находим его в include/asm-generic/errno.h

#define ETIMEDOUT       110     /* Connection timed out */

Я далеко не кернел-девелопер, но у меня на это ушло минут десять. Это так сложно было сделать самому???

И еще, как происходит инициализация устройства, оно само передает код для определения idVendor idProduct?

RTFM, же: http://www.usb.org/developers/docs/ -> USB 2.0 Specification, usb_20.pdf

anonymous
()
Ответ на: комментарий от anonymous

И еще, как происходит инициализация устройства, оно само передает код для определения idVendor idProduct?

А кто его ещё может за него передать, если оно в устройстве зашито в eprom'e, например? Или ты имел в виду, что контроллер может запросить его при инициализации? Или ты имел в виду, что контроллеру доступна некая область памяти? Непонятно, что ты себе фломастерами нарисовал там. Есть спеки, открывай, смотри процедуру инициализации

anonymous
()
Ответ на: комментарий от anonymous

спасибо, я так и сделал, просто был конеец рабочего дня я озадачился запостил и пришел домой и прочитал, очень удобно :-) В любом случае спасибо!

splinter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

А кто его ещё может за него передать, если оно в устройстве зашито в eprom'e, например?

Есть некоторое устройство на базе AT91SAM9G45 которое должно в обычных условиях работать как USB, а при вытаскивании перемычки и сброса должно запускает живущую в ROM программу SAM Boot Agent (SAM-BA), но так как управляющую плату клепали на питерском заводе то такого не происходит ни на одном из устройств, я подозреваю что SAM Boot Agent либо отсутствует либо процесс загрузки с переферии при вытаскивании перемычки работает как то неправильно.

splinter ★★★★★
() автор топика

Первый ответ довольно исчерпывающий. А по-поводу второго вопроса - idVendor и idProduct напрямую прошито в контроллере USB внешнего устройства (см device descriptor и configuration descriptor), причем передается все только при запросе с хоста. Так что скорее всего намудрили где-либо с прошивкой (или, маловероятный вариант - ошибка драйвера, но он очень маловероятный)

XVilka ★★★★★
()
Ответ на: комментарий от XVilka

Так что скорее всего намудрили где-либо с прошивкой

С какой имено прошивкой? Ту которую должны заливать в в контроллер USB внешнего устройства?

splinter ★★★★★
() автор топика
Ответ на: комментарий от anonymous

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

ilovewindows ★★★★★
()
Ответ на: комментарий от splinter

походу ее туда вообще тупо не залили.

тогда бы он вывалился на read/8 что-то мне подсказывает, а не read/64

так что видимо залили, но не то

dimon555 ★★★★★
()
Ответ на: комментарий от splinter

Это изврат, по кодам понять USB устройство, попался как-то битый программатор, какими только кодами он не ругался. Поставьте сниффер , wireshark , и воткните девайс, если на запросы хоста ответов не будет, значит нет прошивки .

ilovewindows ★★★★★
()
Ответ на: комментарий от splinter

SAM-BA еще умеет появляться на DBGU, поищи ее там.

slapin ★★★★★
()
Ответ на: комментарий от splinter

собственно число байт, которые ты хочешь считать, если я всё правильно понимаю.

просто контрол трансфер умеет отваливаться по таймауту, а какой-нибудь bulk не умеет

dimon555 ★★★★★
()
Ответ на: комментарий от splinter

а что значат эти read/8 read/64 и т.п.?

посмотри 9.6 в usb 2.0 specification

для high speed device descriptor он 64 байта для low speed и прочих вначале 8 байт читается

короче device descriptor неправильный и это не нравится драйверу.

dimon555 ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.