|
Нюансы драйверов USB (Windows) |
|
|
|
Jun 22 2017, 22:13
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Постараюсь сразу к делу::
Есть WinDriver. Работает так (в моём понимании): При инициализации я задаю размер буфера для IN пакетов, он может быть хоть гигабайт. Ядрёная (kernel) часть драйвера выгребает заданный BULK ендпойнт САМА, без пинков от медленной юзерской программы. А когда я в юзерской программе делаю чтение, то оно происходит уже из ядрёного буфера.
Есть libusb. Работает так (в моём понимании): Когда я вызываю чтение, то только тогда на шине инициируется IN-транзакция. Никаких буферов нет. Поэтому когда прога работает, а я давлю "обновить" в браузере на каком-нить тяжёлом сайте, то чтение прекращается на сотню миллисекунд, и не слишком длинный буфер в моём устройстве переполняется.
Вопросы:: - верно ли я понимаю ситуацию? - может быть я неправильно использую libusb? - может быть надо использовать libusbK или ещё что? Пробовать все существующие дрова самому в облом.
Виндрайвер использовать не хочется. Хоть он и хорошо работает, но у юзеров инсталится и деинсталится с проблемами. Тот же libusb в этом смысле образцовый.
|
|
|
|
|
 |
Ответов
|
Jun 22 2017, 23:55
|
Знающий
   
Группа: Участник
Сообщений: 750
Регистрация: 1-11-11
Пользователь №: 68 088

|
Цитата(Dr.Alex @ Jun 23 2017, 01:13)  Есть WinDriver. Работает так (в моём понимании): При инициализации я задаю размер буфера для IN пакетов, он может быть хоть гигабайт. Ядрёная (kernel) часть драйвера выгребает заданный BULK ендпойнт САМА, без пинков от медленной юзерской программы. А когда я в юзерской программе делаю чтение, то оно происходит уже из ядрёного буфера. Не так. Если бы было так, как вы описали, то при открытии чтения из юзерской программы вы бы получали данные, выгребенные из устройства полчаса назад. При открытии чтения драйвер (или цепочка драйверов) выделяет буфера и строит цепочку дескрипторов на заявленную длину чтения (которая может быть много больше размера эндпойнта), после чего практически не участвует в чтении (разве что обрабатывает прерывания) - обработку транзакций и слив данных в буфера производит USB-контроллер аппаратно, посредством DMA-механизма, согласно цепочке дескрипторов обмена. Цитата(Dr.Alex @ Jun 23 2017, 01:13)  Есть libusb. Работает так (в моём понимании): Когда я вызываю чтение, то только тогда на шине инициируется IN-транзакция. Никаких буферов нет. Поэтому когда прога работает, а я давлю "обновить" в браузере на каком-нить тяжёлом сайте, то чтение прекращается на сотню миллисекунд, и не слишком длинный буфер в моём устройстве переполняется. Насколько я понимаю, libusb также опирается на kernel-драйвер, только расположенный ниже по иерархии, который предоставляет generic-доступ к устройству, то есть на уровне "осуществить bulk-чтение" в размере конечной точки. Поэтому, чтобы выгрести приличный объем данных, libusb вынуждена много раз "слазить" на уровень kernel и обратно, что довольно затратно для системы, ну и другие процессы тоже могут "перебивать" эту неспешную процедуру.
--------------------
"... часами я мог наблюдать, как люди работают." (М. Горький)
|
|
|
|
|
Jun 23 2017, 00:31
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(gerber @ Jun 23 2017, 02:55)  Если бы было так, как вы описали, то при открытии чтения из юзерской программы вы бы получали данные, выгребенные из устройства полчаса назад. В Windriver оно ровно так и происходит. Насколько хватит заданного мной буфера. Цитата(gerber @ Jun 23 2017, 02:55)  Насколько я понимаю, libusb также опирается на kernel-драйвер Да это и эжу понятно, что какой-то кернел есть. Вопрос в том, как быть. Может эта коряга работать так как виндрайвер или нет. И если нет, то какую корягу взять.
|
|
|
|
|
Jun 23 2017, 20:58
|
Местный
  
Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458

|
Цитата(Dr.Alex @ Jun 23 2017, 03:31)  Может эта коряга работать так как виндрайвер или нет. И если нет, то какую корягу взять. libusb именно и сделан как юзерспейс подсистема, полностью выносящая обслуживание USB устройств из ядра (kernel часть реализуется внутри libusb, а внаружу торчит только юзерспейс). И сделано это так, чтобы не зависеть от операционной системы где это используется (т.е. именно скрыть детали kernel особенностей). На libusb на сегодня реализованы десятки, точнее сотни проприетарных и фирменных подсистем поддержки самого разнообразного USB-оборудования (фотоаппараты, диктофоны, видеокамеры и мн. мн. другое). Если им все оно годилось, то не думаю что у вас что-то такое "военное"  , что вам оно будет "в облом". P.S. И чуть-чуть по поводу терминологии... libusb - это серьёзно проработанный и массово используемый проект. Поэтому вряд ли к нему применим термин "коряга". А "коряга" - это что-то такое, что вы будете писать, возможно используя libusb, а возможно и нет
|
|
|
|
|
Jun 23 2017, 23:06
|
Профессионал
    
Группа: Свой
Сообщений: 1 386
Регистрация: 5-04-05
Из: моська, RF
Пользователь №: 3 863

|
Цитата(Olej @ Jun 23 2017, 23:58)  libusb именно и сделан как юзерспейс подсистема, полностью выносящая обслуживание USB устройств из ядра (kernel часть реализуется внутри libusb, а внаружу торчит только юзерспейс). И сделано это так, чтобы не зависеть от операционной системы где это используется (т.е. именно скрыть детали kernel особенностей). Рыбята, давайте так. Кто знает по теме ещё меньше меня — не пишите сюда, ладно? Не надо мне втирать тут банальшину, тем более ложную.
|
|
|
|
Сообщений в этой теме
Dr.Alex Нюансы драйверов USB (Windows) Jun 22 2017, 22:13    Olej Цитата(Dr.Alex @ Jun 24 2017, 02:06) Рыбя... Jun 24 2017, 08:06 Raven Раз уж речь идет о USB в Windows, то почему у вас ... Jun 24 2017, 07:34 Dr.Alex Цитата(Raven @ Jun 24 2017, 10:34) Раз уж... Jun 24 2017, 11:45 UniSoft Цитата(Dr.Alex @ Jun 24 2017, 19:45) К то... Jun 24 2017, 12:45  Dr.Alex Цитата(UniSoft @ Jun 24 2017, 15:45) Ну э... Jun 24 2017, 13:00   UniSoft Цитата(Dr.Alex @ Jun 24 2017, 21:00) Но и... Jun 24 2017, 13:38    Dr.Alex Цитата(UniSoft @ Jun 24 2017, 16:38) Но у... Jun 24 2017, 14:02     UniSoft Цитата(Dr.Alex @ Jun 24 2017, 22:02) То е... Jun 24 2017, 14:56
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|