vikaig |
|
Темы:
3
Сообщения:
11
Участник с: 11 мая 2019
|
Хочу вызвать вот этот участок кода с нужными мне аргументами https://github.com/torvalds/linux/blob/07c4b9e9f71aa4bc74009f710fc5a745e10981bf/drivers/usb/core/hcd.c#L682 Как это проще всего сделать? Судя по коду для этого есть интерфейс USB Request Block, но я в ядерной разработке так себе, мне бы пример, а желательно вообще из юзерспейса через write() в блочный девайс или что-то в этом роде |
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
vikaigДумаешь у нас тусуются разработчики, имеющие отношение к URB? … думаю вряд ли, они обычно тусуются на других форумах. Но имеются отдельные любопытные, имеющие отношение к анализу дампов (usbdump, usbmon) блоков запроса USB, но их в большей степени интересует расшифровка этих запросов. А потому интересно узнать, что тебя больше интересует разработка или обработка? Если разработка, то маловероятно, что кто то что то посоветует конкретное. Начни с азов: USB Request Block … Блоки запроса USB А если обработка, то в этом случае структура/формат URB запросов хорошо документировано, но это похоже тебе не нужно.
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
vikaig, не дает мне покоя любопытство - если не секрет, что такое специфическое изобретаешь. Для стандартного вроде все имеется ... и вряд ли это связано с драйверами. USB/IP, что то связанное с пробросом, но здесь тоже имеется готовый инструмент, да и причем тут URB ... а потому и интересно - что же это такое будет. Но, скорее всего, как всегда - думаешь о сложном, а окажется что то простое.
Ошибки не исчезают с опытом - они просто умнеют
|
vikaig |
|
Темы:
3
Сообщения:
11
Участник с: 11 мая 2019
|
vasekВроде форум по линю и раздел по разработке, так что как ни странно именно это и ожидал...vikaigДумаешь у нас тусуются разработчики, имеющие отношение к URB? … думаю вряд ли, они обычно тусуются на других форумах. Но имеются отдельные любопытные, имеющие отношение к анализу дампов (usbdump, usbmon) блоков запроса USB, но их в большей степени интересует расшифровка этих запросов. Интересует меня только разовая отправка управляющей команды драйверу USB хост контроллера чтоб проверить ее результат, сама разработка как-такова меня не интересует, задача чисто разовая, нужно просто проверить пропадет ли питание на USB порте при отправке команды ClearPortFeature(USB_PORT_FEAT_POWER), именно эту управляющую команду я нашел в документации к ядру по управлению энергопотреблением USB устройств, через sysfs ее как я понял нельзя отправить |
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
vikaigВ принципе выражение отключить питание шины/порта USB не верное, фактически такое не возможно в принципе - под этим обычно понимается отключить устройство от шины/порта USB (програмно), но питание на шину подается всегда - просто прекращается общение устройства с шиной и это устройство как бы не видимо, оно отсутствует в выоде lsusb. После того как выполнено подключение устройства к шине/порту USB, в дальнейшем это устройство постоянно находится в режиме ожидания. Одни устройства периодически отправляют сигналы (запросы) хосту, а тот отвечает, даже если ничего не происходит, например, мой USB 3G modem при бездействии с периодичностью в 30с шлет запрос на hub, а тот отвечает, привожу URB запросы А вот USB мышь ничего не отправляет в режиме бездействия, отправляет данные только при наличии событий/движений мыши Но это все упрощенно, в действительности все намного сложнее.Инициатором обмена всегда выступает хост. Устройство не может начать передачу данных по собственной инициативе. Хост поочередно (с интервалом в несколько милисекунд) опрашивает все подключенные устройства. Каждый раз, при опросе, устройство может получить данные от хоста и отправить данные хосту.Да и забыл отметить, что устройство в целях эконмии энергии переводится в другой режим энергопотребления, но способно быстро приступить к своим прямым обязанностям. И если нужно смореть состояние USB устройства, то оно имеет, как бы это сказать, только 2 состояния - подключено, прошло энумерацию, и видно в выводе lsusb - не подключено, программно (физически воткнуто в порт), не видно в выоде lsusb. PS - Многое забыл, писал по памяти, возможно что то и на путал/ошибся ...
Ошибки не исчезают с опытом - они просто умнеют
|
vikaig |
|
Темы:
3
Сообщения:
11
Участник с: 11 мая 2019
|
да я тоже так думал, но вот один человек утверждает, что пока он не заменил на ThinkPad свою древнюю убунту с древним ядом 2.6.34 на свежую версию, то у него в режиме сна не было питания на USB портах, а теперь на 5.4.0 присутствует, то есть таки есть какое-то управление |
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
Вот подумай, чтобы отключить питание какого то устройства, нужно физически разорвать цепь питания ... вопрос - неужели в цепи питания порта USB имеется какое то устройство, скажем просто, стоит рэле устройство, которое при подаче определенного сигнала разрывает цепь? - нет такого устройства. А вот энергосбережение, разные состояния, имеется. Точно не помню, забылось, но раньше было подругому - в файлах устройств USB (в /sys/.../) был параметр autosuspend и что то еще там (не помню), который мог принимать несколько значений, а потом это изменилось, точнее упростилось (если не ошибаюсь, то сейчас всего 2 значения on и auto ) - лень копаться в архивах ............. а вообще лучше в этой части почитать power-management PS - а вообще если есть желание узнать наверняка, то рекомендую обратиться к спецификации USB - правда она на английском и более 1000 страниц, но есть русский перевод (не полный) части, касающейся электрической части - там все подробно расписано.
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
Поднял старые записи БЫЛО в части power/level
СТАЛО в части power/level
Обрати внимание - раньше был параметр "suspend" - который означал, что устройство должно оставаться приостановленным, а автоматическое возобновление запрещено. Этот параметр больше не поддерживается EDIT 1 - по дефолту стоит auto, например для устройств на usb3 (usb mouse) cat /sys/bus/usb/devices/usb3/power/level auto
Ошибки не исчезают с опытом - они просто умнеют
|
vasek |
|
Темы:
47
Сообщения:
11881
Участник с: 17 февраля 2013
|
Ну и если по существу вопроса (решил освежить в памяти эти запросы)
применительно к запросу Get Status поля запроса будут следующие В ответ хост должен вернуть 2 байта в следующем формате: ... и в итоге, получив это ответ, не возможно, точнее нет такого понятия есть питание или нет питания, что еще раз доказывает, что если устройство подключено и прошло энумерацию, то оно постоянно находится в дежурном режиме и в любой момент готово принять запрос от хоста или передать ему. А вот в случае отсутствия питания, не возможно ни отправить запрос, ни получить ответ.
Ошибки не исчезают с опытом - они просто умнеют
|
vikaig |
|
Темы:
3
Сообщения:
11
Участник с: 11 мая 2019
|
Потратил всего пол часа времени и вышло это: Только вот у меня usb_control_msg() возвращает -EPIPE:[108766.034483] mod_init();В документации написано "The pipe type specified in the URB doesn’t match the endpoint’s actual type.", есть у кого идеи как исправить? |