Выключить контроллер usb linux

Обновлено: 05.07.2024

Как я могу программно включать и отключать питание определенного USB-порта в Linux? Возможно ли такое? Ответы Mac тоже приветствуются!

Я пытался получить BOC (не притворяйтесь, что вы тоже не пытались его получить!) И в итоге получил один из них, и хотел бы получить от этого какую-то пользу, подключив его к нашему монитору сервера.

Ответы

Что-то вроде: echo on > /sys/bus/usb/devices/usb5/power/level

Возможно, вам также придется поиграть с настройкой автозапуска. Не говоря ядру о прекращении попыток, оно может автоматически приостановить порт.

Взаимодействие usbfs, похоже, менялось несколько раз с момента первоначального ответа на этот вопрос. Итак, вот как я переключаю питание порта концентратора на Ubuntu Oneiric Ocelot из оболочки Bash.

Найдите шину и номер устройства:

Найдите устройство в иерархии портов шины / концентратора, используя номер шины и устройства:

Синтаксис выглядит так: bus-port.port.port.port.port . Например, моя мышь подключена к внешнему концентратору, который подключается к концентратору моего компьютера, который внутренне подключается к корневому концентратору:

Итак, «2-1.1.1» в приведенном выше случае. Наконец, включите и выключите питание порта:

Я не подключал анализатор протокола, чтобы увидеть, что на самом деле происходит на шине, но я знаю, что индикатор мыши гаснет, когда я отвязываю его. Я предполагаю, что на нижнем уровне это взаимодействует с хост-контроллером EHCI, чтобы фактически отключить питание порта. Это особенно полезно для встроенных устройств, таких как веб-камеры UVC, которые, похоже, никогда не работают должным образом и в противном случае потребовали бы перезагрузки системы для сброса.

См. Также команду udevadm .

Роется в закладках

Похоже, вам нужно подключить его к концентратору и управлять мощностью концентратора. Ни один из корневых концентраторов, которые я видел, похоже, не поддерживает управление питанием.

mvp picture

Вы можете использовать uhubctl - утилиту командной строки для управления питанием USB на порт для совместимых USB-концентраторов.

Он работает только с концентраторами, которые поддерживают переключение питания для каждого порта, но обратите внимание, что многие современные материнские платы имеют концентраторы USB, поддерживающие эту функцию. Кроме того, последняя версия uhubctl поддерживает концентраторы USB 3.0, и хорошей новостью является то, что довольно много новых концентраторов USB 3.0 поддерживают эту функцию.

Чтобы просмотреть статус всех концентраторов и портов, которыми можно управлять с помощью uhubctl:

Чтобы отключить питание порта 5 единственного совместимого концентратора:

Чтобы включить питание всех портов всех совместимых концентраторов:

Чтобы выключить и снова включить питание:

Раскрытие информации - я автор uhubctl.

Это пример беспроводной мыши Logitech USB под Linux.

Прочтите соответствующий параграф «/ proc / bus / usb / devices» в соответствии с вашими устройствами «Производитель» (идентификатор поставщика) и «ProdID» (идентификатор продукта) или «Производитель» и «Продукт» (все эти значения постоянны для каждого устройства). .

(первый абзац с включенным устройством, второй с тем же устройством, выключенным, но все еще подключенным)

Здесь вам нужны две переменные. Они расположены в строке «T:» (первая строка абзаца). Эти переменные: Bus (Bus = 01 в этом примере) Cnt (Cnt = 01 в этом примере)

Вам нужно будет добавить «1» (арифметическое) к «Cnt», чтобы получить рейтинг Rank = Cnt + 1 (это математическая функция, в данном примере Rank = 2).

Итак, устройство, которое вы ищете, представляет собой следующую строку: Bus-Rank (это не математическая функция, это строка, 1-2 в этом примере)

Также обратите внимание на строку «C: Он содержит информацию о мощности (токе) устройства. есть звездочка (как в нашем 1-м примере), то на устройство подано питание. Если нет («C:»), то устройство «более или менее» выключено, что означает, что при подключении устройства всегда есть крошечный ток, иначе мы не сможем прочитать всю эту информацию.

Запомните, наконец, строчку «I:». Если поле «I: *» содержит звездочку (как в нашем 1-м примере), значит, есть ввод с устройства или с устройства, я не уверен, возможно и то, и другое. Последнее поле строки содержит используемый драйвер («usbhid» в нашем 1-м примере).

Мы готовы переключить питание нашего устройства:

Ниже приведен простой сценарий bash "USBMS" (USB Mouse Switch), который управляет мощностью устройства в нашем примере выше. Он не очень динамичен и использует константы «Продукт» и «Производитель» для поиска соответствующего абзаца в «/ proc / bus / usb / devices». Вам следует использовать «Производитель» (идентификатор поставщика) и «ProdID» (продукт id) вместо этого. Он также проверяет состояние питания устройства. Запускаем как суперпользователь.

Команда: ./USBMS действие

параметр: action = "off" или "0" для выключения - action = "on" или "1" для включения (без кавычек)

@Kristian Обычно вы не найдете рекламируемых программно контролируемых портов, потому что пользователи не должны осознавать этот уровень. Я не думаю, что для этого есть много вариантов использования, кроме как принудительно переводить некорректно работающие устройства с питанием от шины в известное состояние и обрабатывать тупые, как почтовые устройства, которые используют только USB для питания. Возможно, устройство Марка относится ко второй категории. Это грубый механизм на крайний случай.

Как я уже упоминал, я не изучал детали реализации взлома отмены привязки, и я только пробовал его на хост-контроллере EHCI, встроенном в мою материнскую плату, «Усовершенствованный хост-контроллер USB семейства наборов микросхем Intel Corporation 6 Series / C200 Series ( ред 05) ". Я предполагаю, что в этом хост-контроллере установлен бит PPC в HCSPARAMS, указывающий на программное управление переключателями питания порта в соответствии со спецификацией EHCI.

Если вы взаимодействуете с внешним концентратором, «концентратор указывает, поддерживает ли он переключение питания, с помощью настройки поля Logical Power Switching Mode в wHubCharacteristics» в соответствии со спецификацией USB 2.0. Я не помню, обеспечивают ли тесты на соответствие эту функциональность или нет, но если они это сделают, вам нужно будет найти только концентратор с логотипом USB 2.0. Я предполагаю, что взлом отправит запрос функции набора порта, но он может циклически повторять не только целевой порт. Опять же, согласно спецификации USB 2.0, «концентратор с переключателями питания может переключать питание на все порты как группу / группу, на каждый порт индивидуально или иметь произвольное количество групп из одного или нескольких портов». Я не уверен, есть ли хороший инструмент командной строки для получения wHubCharacteristics.

Короче говоря, насколько мне известно, универсального способа решения этой проблемы не существует. Однако можно опросить внутренний или внешний концентратор, чтобы определить уровень его поддержки, а затем, если он поддерживается, использовать его. Вопрос лишь в том, сколько времени вы хотите потратить на это.

Можно ли в Linux включать / выключать источники питания от USB вручную?

Есть этот внешний USB-вентилятор (тот, который вы используете для охлаждения себя, а не ПК), и было бы неплохо иметь возможность управлять им с терминала, потому что я хочу расположить вентилятор где-то далеко.

Я полагаю, что это также может быть полезно для множества других вещей, потому что есть много игрушек USB. Может быть, очистители воздуха и т. Д. (Я слышал, что они на самом деле не работают).

Эта функция действительно заслуживает хорошего графического интерфейса

Заметка. Информация в этом ответе относится к более старым ядрам (до 2.6.32). Смотрите ответ tlwhitec для информации о более новых ядрах.

(Вам может понадобиться изменить usb1 на usb n )

Источник: Документация / usb / power-management.txt.gz

Вау, спасибо за это. Я думал, что должен был пройти через libUSB, несмотря ни на что. Любая идея, как получить имена подключенных устройств, а? Я получаю ошибку «Отказано в разрешении», даже если я использую sudo! В разрешении отказано, потому что команда в форме sudo foo > bar анализируется как непосредственный вывод bar , а затем запускается foo с использованием sudo . Перенаправление не происходит, потому что это происходит до того, как вы получите root-доступ. Решение состоит в том, чтобы использовать sudo sh -c 'echo disabled > /sys/bus/usb/devices/usb1/power/wakeup' и так далее: получить root, запустить новый ад, чтобы выполнить перенаправление, затем вывести что-то в дескриптор перенаправленного файла.

Согласно документам , в ядре 2.6.32 произошли некоторые изменения в управлении питанием USB , которые, похоже, установились в 2.6.38 . Теперь вам нужно дождаться простоя устройства , которое определяется конкретным драйвером устройства. Драйвер должен поддерживать его, иначе устройство никогда не достигнет этого состояния. К сожалению, теперь у пользователя нет шансов форсировать это. Однако, если вам повезло, и ваше устройство может бездействовать, то чтобы отключить это, вам нужно:

или, для ядер около 2.6.38 и выше:

Это буквально означает « приостановить работу» в тот момент, когда устройство бездействует.

Так что, если ваш поклонник не является чем-то «интеллектуальным», который можно рассматривать как устройство и которым управляет драйвер, вам вряд ли повезет с нынешними ядрами.

Кажется, это приведет к постоянному отключению USB-устройства . (?) Как мне возобновить подачу питания после того, как это сработало? Моя цель - один раз перезагрузить устройство, а не навсегда изменить его конфигурацию подвески. Чтобы возобновить работу приостановленного устройства, вы можете снова отключить функцию «Автоподвеска» echo "on" > "/sys/bus/usb/devices/usbX/power/control" , но я думаю, что вам нужно понять первоначальную цель. Функция автоматической приостановки здесь предназначена только для того, чтобы позволить бездействующим устройствам переходить в состояние пониженного энергопотребления (где оно может казаться выключенным), и возобновляться позже, когда это необходимо, либо хостом, либо каким-либо внешним событием. Это происходит (или должно происходить) автоматически. Сам порт на самом деле никогда не отключается. Действительно, прочитайте документы ;) Я могу подтвердить, что это работает с ядрами> 3.10. Просто должны быть уверены , что устройство «идентификатор» используется правильно: dmesg | grep "usb" и использовать номер после того, как «USB», например: usb 2-4.4: SerialNumber: A0848020 вы будете использовать: /sys/bus/usb/devices/2-4.4/power/. . Также убедитесь, что устройство не используется. Я создал скрипт, чтобы упростить этот процесс Есть ли способ сохранить эту конфигурацию, чтобы при каждом ее подключении она не возвращалась к настройкам по умолчанию? У меня есть устройство, для которого мне нужно установить управление питанием, чтобы оно заряжалось.

Я нашел эти решения, которые по крайней мере работают для правильно сконфигурированного чипа-концентратора Terminus FE 1.1 USB:

1.Чтобы отключить питание всех портов USB концентратора, вы можете отсоединить концентратор от ядра, используя:

чтобы снова включить питание - вы можете связать его обратно, используя

2. Переключение питания на каждом порту в отдельности более сложное: я смог использовать hubpower для управления каждым портом - но у него есть и обратная сторона: hubpower сначала отключает usbdevfs, что приводит к отключению всех USB-устройств от системы, по крайней мере, в ubuntu :

С этим ioctl отключенным я смог отключить питание отдельного порта, не отключая все устройства, но питание сразу же включается (вероятно, из-за того, что ядро ​​видит неинициализированное устройство), что заставляет USB-устройство просто выполнить «холодный перезапуск», что я в общем хотел сделать. Мой исправленный Hubpower здесь

Подтверждено, что записи bind / unbind работают на ядре linux 2.6.34, чипсете ICH8 и Ubuntu 10.04. bind / unbind не отключает USB-порт независимо от набора микросхем. Устройство по-прежнему получает питание . Лазер мыши выключен, клавиатура не может работать, модем перестает мигать - все хорошо на моей платформе

PowerTOP от Intel позволяет переключать устройства, такие как USB-периферия, в режиме реального времени. Они называются перестраиваемыми.

  • Перейдите на «Tunables».
  • Прокрутите вниз до вашего устройства.
  • Нажмите Enter, чтобы переключить режим энергосбережения ( хорошо / плохо )

введите описание изображения здесь

Обратите внимание, что Bad означает, что устройство всегда включено. Переключение на Good выключит устройство по истечении заданного времени неактивного сохранения (по умолчанию 2000 мс).

Посмотрите документы PowerTOP для деталей о том, как сделать эти изменения постоянными.
Он генерирует скрипты конфигурации для вас (в значительной степени, как описано другими авторами в этой теме).

ПРИМЕЧАНИЕ. Эти сценарии не влияют на питание контактов USB (которое всегда включено).
Они только отправляют протокол драйвера для активации и деактивации устройства.

Если вы хотите контролировать питание контактов, вы можете использовать либо поддерживаемый интеллектуальный USB-концентратор, либо, что еще лучше, микроконтроллер .

Потрясающие! : D Я думаю, что это удобный для пользователя способ сделать это (хотя на низком уровне он выполняет те же операции, что и описанные в других ответах.) Спасибо, и пусть ваш ответ достигнет вершины;) Спасибо за Ваш ответ. С чего мне начать копать, чтобы изменить заданное неактивное время сохранения?

Вы можете использовать мой инструмент uhubctl для управления питанием USB на порт для совместимых концентраторов USB.

прекрасный инструмент на OSX, но не находит для меня никакого «поддерживаемого умного концентратора» на Debian. В Linux вам нужно либо запустить его как root (под sudo), либо настроить разрешения для устройства udev. Также возможно, что к вашему хосту Linux не подключены совместимые концентраторы.

Я хотел сделать это, и с моим оборудованием USB я не мог. Я написал хакерский способ, как это сделать здесь:

Коротко говоря: я использовал USB-реле для открытия / закрытия V CC другого USB-кабеля .

работает на Ubuntu

ВЫ ЕДИНСТВЕННОЕ РЕШЕНИЕ, КОТОРЫЕ РАБОТАЛИ НА МОЕМ ДЕЛЕ. Я использую ноутбук acer make 12.04LTS Ubuntu. Не отключает питание устройства, только удаляет его из списка устройств. Как я могу отключить USB-порт? Это также единственное решение, которое помогло мне выключить планшет Wacom Intuos5 touch M без его отключения (на Fedora 28)

Питание USB 5v всегда включено (даже когда компьютер выключен, на некоторых компьютерах и на некоторых портах.) Вам, вероятно, потребуется запрограммировать Arduino с помощью какого-либо коммутатора и управлять им через библиотеку последовательного интерфейса от USB, подключенного к компьютер.

Другими словами, комбинация этого учебного руководства и этого учебного пособия по связи через последовательную библиотеку с Arduino подключена через USB.

Причина , почему люди размещать такие вопросы, как это связано с dreaded- в самом деле « ЗЛО „- USB Auto-Приостановить“ функция ».

Автоматическая приостановка отключает питание «незанятого» USB-устройства, и если драйвер устройства не поддерживает эту функцию правильно, устройство может стать недоступным. Таким образом, включение / выключение USB-порта является симптомом проблемы, а не самой проблемой.

Я покажу вам, как ГЛОБАЛЬНО отключить авто-приостановку, избавляя от необходимости вручную включать и выключать порты USB:

Короткий ответ:

Вам НЕ нужно редактировать « autosuspend_delay_ms » по отдельности: USB autosuspend можно отключить глобально и ПРОСТО, используя следующие команды:

ОДНАКО мое тестирование показало, что настройка usbcore.autosuspend=-1 в / etc / default / grub, как показано ниже, может использоваться в качестве GLOBAL- переключателя для функции автоподключения USB - вам НЕ нужно редактировать отдельные файлы " autosuspend_delay_ms ".

В том же документе, ссылка на который приведена выше, указано, что значение «0» ВКЛЮЧЕНО, а отрицательное значение ОТКЛЮЧЕНО :

На аннотированном скриншоте Ubuntu 18.04 ниже, иллюстрирующем, как мои результаты были достигнуты (и воспроизводимы), пожалуйста, отметьте, что по умолчанию «0» ( включено ) в autosuspend_delay_ms .

Затем обратите внимание, что после ТОЛЬКО настройки usbcore.autosuspend=-1 в Grub, эти значения теперь отрицательны ( отключены ) после перезагрузки. Это избавит меня от необходимости редактировать отдельные значения и теперь может отключить автоматическое отключение USB.

снимок экрана: автоматическое приостановление значений до и после глобального редактирования

Надеюсь, что это делает отключение USB-автоподвески немного проще и удобнее для написания сценариев.

Как программно включить и отключить питание определенного USB-порта в Linux? Возможно ли такое вообще? Ответы Mac также оценили!

Я пытался BOC (не притворяйтесь, что вы не пытались получить его тоже!) и закончил с одним из них, и хотел бы получить некоторую пользу от этой вещи, подключив ее к нашему монитору сервера.


рылся в закладки

Похоже, вам нужно подключить его к концентратору и контроль питания хаба. Ни один из корневых концентраторов, которые я видел, не может поддерживать управление питанием.

что-то типа: echo on > /sys/bus/usb/devices/usb5/power/level

возможно, Вам также придется играть с настройкой autosuspend. Не говоря ядру прекратить попытки, оно может автоматически приостановить работу порта.

взаимодействие usbfs, похоже, изменилось несколько раз, так как на этот вопрос был первоначально дан ответ. Итак, вот как я задействую питание порта концентратора на Ubuntu Oneiric Ocelot из оболочки Bash.

Поиск Шины и номер устройства:

найдите устройство в иерархии портов шины / концентратора, используя шину и номер устройства:

синтаксис, кажется, " автобусный порт.порт.порт.порт.порт. Например, мышь подключена к внешнему концентратор, который подключается к концентратору моего компьютера, который внутренне подключается к корневому концентратору:

Итак, - 2-1.1.1 в приведенном выше случае. Наконец, цикл питания порта:

Я не подключил анализатор протокола, чтобы увидеть, что на самом деле происходит в автобусе, но я знаю, что моя мышь выключается, когда я ее развязываю. Я предполагаю, что на нижнем уровне это взаимодействует с хост-контроллером EHCI, чтобы фактически отключить питание порта. Это особенно полезно для встраиваемых устройства, такие как веб-камеры UVC, которые никогда не функционируют должным образом и в противном случае потребуют перезагрузки системы для сброса.

вы могли бы использовать uhubctl - утилита командной строки для управления мощностью USB на порт для совместимых USB-концентраторов.

он работает только на концентраторах, которые поддерживают переключение питания на порт, но обратите внимание, что многие современные материнские платы имеют USB-концентраторы, которые поддерживают эту функцию. Кроме того, последняя версия uhubctl поддерживает концентраторы USB 3.0, и хорошей новостью является то, что довольно много новых концентраторов USB 3.0 поддерживают эту функцию.

для список состояния всех концентраторов и портов, которые могут управляться uhubctl:

для отключения питания на Порту 5 одного совместимого концентратора:

включить питание для всех портов всех совместимых концентраторов:

для выключения питания, а затем на:

раскрытие информации - я автор uhubctl.

это пример с беспроводной мышью Logitech USB под linux.

прочитайте соответствующий абзац "/ proc / bus / usb / devices "в соответствии с вашими устройствами "Vendor" (идентификатор поставщика) и "ProdID" (идентификатор продукта) или "производитель" и "продукт" (все эти значения постоянны для каждого устройства).

(первый абзац с устройством включен, второй с тем же устройством выключен, но все еще подключен)

здесь нужны две переменные. Они расположены в строка" T: "(первая строка абзаца). Эти переменные : Bus (Bus=01 в данном примере) Cnt (Cnt=01 в данном примере)

вам нужно будет добавить "1" (арифметический) в "Cnt", чтобы получить ранг Rank=Cnt+1 (это математическая функция, Rank=2 в данном примере)

таким образом, устройство, которое вы ищете, является следующей строкой : Bus-Rank (это не математическая функция, это строка, 1-2 в этом примере)

ум также "C:" линия. Он содержит информацию о мощности (токе) устройства. Если есть звездочка в "C: "(как в нашем 1-м примере), то устройство питается. Если нет ("C:"), то устройство" более или менее " отключено, что означает, что всегда есть крошечный ток, когда устройство подключено, иначе мы не смогли бы прочитать всю эту информацию.

обратите внимание на строку "I:". Если поле "I:*" содержит звездочку (как в нашем 1-м примере) , то есть вход, от или к устройству, я не уверен, может быть, оба. Поле заключительная строка содержит используемый драйвер ("usbhid" в нашем 1-м примере)

мы готовы включить питание устройства :

ниже приведен простой скрипт bash "USBMS" (USB Mouse Switch), который контролирует мощность устройства в нашем примере выше. Это не очень динамично, и он использует константы" продукт "и" производитель", чтобы найти соответствующий пункт "/proc / bus / usb / устройства" Вместо этого следует использовать "поставщик" (идентификатор поставщика) и "ProdID" (идентификатор продукта). Он также проверяет состояние питания устройства. Запуск от имени суперпользователя.

команда : ./ USBMS action

параметр: action = " off " или " 0 "для выключения питания-action =" on "или" 1 " для включения питания (без кавычек)

@Kristian обычно вы не найдете программное обеспечение, контролируемое портом, контролируемым питанием, потому что пользователи не должны осознавать этот уровень. Я не думаю, что есть много вариантов использования для него, кроме как заставить устройства с питанием от шины в известное состояние и обрабатывать тупые как почтовые устройства, которые используют только USB для питания. Возможно, устройство Марка относится ко второй категории. Это грубый механизм в крайнем случае.

Как я уже упоминал, я не рассматривал реализацию детали для разматывания взлома, и я только попробовал его на хост-контроллере EHCI, встроенном в мою материнскую плату, "Intel Corporation 6 Series/C200 Series Chipset Family USB Enhanced Host Controller (rev 05)."Я бы предположил, что этот хост-контроллер имеет бит PPC набора HCSPARAMS, указывающий программное управление коммутаторами питания портов, согласно спецификации EHCI.

Если вы взаимодействуете с внешним концентратором, " концентратор указывает, поддерживает ли он переключение мощности установкой Логическое поле режима переключения мощности в wHubCharacteristics", согласно спецификации USB 2.0. Я не помню, обеспечивают ли тесты соответствия эту функциональность или нет, но если они это делают, вам нужно только найти концентратор с логотипом USB 2.0. Я предполагаю, что Хак отправит запрос функции set port, но он может задействовать больше, чем просто целевой порт. Опять же, в спецификации USB 2.0 " концентратор с выключателями питания может переключать питание на все порты как группа / Банда, на каждый порт по отдельности или иметь произвольный номер банд одного или нескольких портов."Я не уверен, есть ли хороший инструмент командной строки для получения wHubCharacteristics.

в OS X вы можете получить доступ к USB-устройству из пользовательского пространства и запросить его приостановку.

вы можете найти общий пример в руководство по интерфейсу USB-устройства. Вам нужно будет использовать IOUSBDeviceInterface182 (или выше) USBDeviceSuspend метод.

Примечание: концентраторы и порты контроллера могут иметь объединенные источники питания, что означает, что один и тот же коммутатор разделяется несколькими портами. если это так, и ваше устройство находится в одной группе как другое активное устройство, он не будет выключен.

власть/уровень

" on " означает, что устройство должно быть возобновлено, а autosuspend-нет допустимый.(Конечно, системные приостановки все еще разрешены.)

"auto" - это нормальное состояние, в котором ядру разрешено autosuspend и автозапуск устройства.

"приостановить" означает, что устройство должно оставаться приостановлено, и autoresume не допускается. (Но удаленное пробуждение все еще может быть разрешено, в виду того что она проконтролирована separaely атрибут питания / пробуждения.)

Шаг 1: так что я, с USB1, USB2, с, с USB3, usb4 .

Шаг 2: как я узнаю, какой из них какой? (

Optional 1: в случае, если lsusb показывает и нужно найти конкретный

дополнительно 2: в случае, если никто не найден-перезагрузка не удается использовать цикл питания Arduino реле над udp

Arduino реле:

Я был бы более склонен отрезать провод и подключить его к последовательному порту с каким-то простым реле, работающим с одного из "готовых" штырей. Затем вы можете просто потянуть линию вниз (сигнал "Я готов к приему") в файл последовательного порта каждый раз, когда есть какая-то isssue. Когда это будет сделано, просто сигнал 'я'

мое понимание этих вещей, однако, заключается в том, что они тянут много тока до полного заряда конденсатора, затем отпустите их все сразу прошить лампочка. Я не могу представить, что такой внезапный разряд хорош для схемы компьютера. для предотвращения обратной связи в последовательный порт может потребоваться несколько диодных ловушек тока.

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

вы работаете просто " эхо " как root, попробуйте:

A несколько USB-концентраторов может включать и выключать свои порты, как описано в ссылке. Мне еще предстоит найти материнскую плату с USB-портами, которые можно включить или отключить.

Не покупайте дорогой смарт-концентратор только для включения и выключения USB-гаджетов.
Все, что вам нужно-это микроконтроллер.

Arduino Nano™ ATmega328 *


Изысканные крошечные случаи доступны (также бесплатно 3d печатные).

* используйте только подлинный Arduino Nano™. Остерегайтесь подделки.

обновление: миниатюризации ATtiny и беспроводной интернет микроконтоллеры также доступный.

Как я понимаю, ваши устройства поставляются USB-линией питания VCC (

5V). Проблема в том, что эта линия питания не может управляться из пользовательского пространства в стандартной платформе linux, если вы не взаимодействуете с концентраторами, включенными с управлением питанием. Код ядра Ony может коснуться этой линии питания.

pavel avatar

Во-вторых, питание на USB этими командами не снимается (и вообще, афаик, снятие питания на шине USB стандартом не предусмотрено).

Команда suspend (on) относится только к устройству на шине USB.

Natrio
udisks –unmount отмонтирует, а udisks –detach отключает флешку так, что она гаснет и полностью исчезает из устройств. Вот питание вольтметром не замерял, но вы можете проверить :)
Не катит, только что замерял вольтметром. После eject напряжение как и было 5В, а после detach флешка вообще нервно моргать светодиодом стала :) Понимаю, что срок большой. Но может есть решение с данным вопросом? Мне тоже надо так отключать модем

PS - у меня накрылась (точнее частенько глючит и сыпит ошибками) шина с вебкамерой - пришлось написать юнит, который отключает при старте эту шину (на этой шине два порта, приходится обходится двумя другими).

EDIT 1 - Если коротко - находишь шину, далее два способа, смотря что нужно
1. Переинициализация USB устройства без физического его отключения (unbind - bind)
2. Отключение/включение шины (физический порт) USB (authorized)

vasek
shtrihs, уже несколько раз описывал в разных топиках как это делается (два способа), поищи - лень все писать по новой.

PS - у меня накрылась (точнее частенько глючит и сыпит ошибками) шина с вебкамерой - пришлось написать юнит, который отключает при старте эту шину (на этой шине два порта, приходится обходится двумя другими).

EDIT 1 - Если коротко - находишь шину, далее два способа, смотря что нужно
1. Переинициализация USB устройства без физического его отключения (unbind - bind)
2. Отключение/включение шины (физический порт) USB (authorized)

Это я всё пробывал. Не отрубает питание

Но у меня не срабатывает, так как CONFIG_USB_SUSPEND не включена. У меня Ubuntu 18.04

grep CONFIG_USB_SUSPEND /boot/config-4.15.0-76-generic
Ничего не выдаёт. То есть в принципе нету этого параметра.

Вот в инете нашёл

««Starting with the 3.10 kernel release, dynamic PM support for USB is present whenever the kernel was built with CONFIG_PM_RUNTIME enabled. The CONFIG_USB_SUSPEND option has been eliminated.»»

Это действительно так? Как тогда быть?

Ядро я пересобирать не умею. А где найти дистрибутив с включенной опцией, мне так и не понятно.

Как программно включить и отключить питание определенного USB-порта в Linux? Это вообще возможно? Ответы Mac также приветствуются!

Я пытался получить BOC (не притворяйся, что ты тоже не пытался его получить!), И в итоге получил один из них, и хотел бы извлечь из этого пользу, подключив его к нашему монитору сервера.

Похоже, вам нужно подключить его к концентратору и контролировать мощность концентратора. Кажется, ни один из корневых узлов, которые я видел, не поддерживает управление питанием.

Что-то вроде: echo on > /sys/bus/usb/devices/usb5/power/level

Возможно, вам также придется поиграть с настройкой автоспуска. Не сообщая ядру прекратить попытки, оно может автоматически приостановить порт.

Похоже, что взаимодействие с usbfs несколько раз менялось с тех пор, как на этот вопрос был изначально дан ответ. Итак, вот как я включаю питание порта-концентратора на Ubuntu Oneiric Ocelot из Bash Shell.

Поиск автобуса и номер устройства:

Найдите устройство в иерархии портов шины/концентратора, используя номер шины и устройства:

Синтаксис выглядит так: «bus-port.port.port.port.port . » Например, моя мышь подключена к внешнему концентратору, который подключается к концентратору моего компьютера, который внутренне подключается к корневому концентратору:

Итак, «2-1.1.1» в вышеуказанном случае. Наконец, включите питание порта:

Я не подключил анализатор протоколов, чтобы увидеть, что на самом деле происходит в шине, но я знаю, что мой индикатор мыши выключается, когда я его отключаю. Я предполагаю, что на нижнем уровне это взаимодействует с контроллером хоста EHCI, чтобы фактически отключить питание порта. Это особенно полезно для встраиваемых устройств, таких как веб-камеры UVC, которые, кажется, никогда не функционируют должным образом и в противном случае потребовали бы перезагрузки системы для сброса.

Смотрите также команду udevadm .

Вы можете использовать утилиту командной строки uhubctl - для управления питанием USB на порт для совместимых концентраторов USB.

Он работает только на концентраторах, которые поддерживают переключение питания на порт, но учтите, что многие современные материнские платы имеют концентраторы USB, которые поддерживают эту функцию. Кроме того, последняя версия uhubctl поддерживает концентраторы USB 3.0, и хорошей новостью является то, что довольно много новых концентраторов USB 3.0 поддерживают эту функцию.

Чтобы вывести список всех концентраторов и портов, которыми может управлять uhubctl:

Чтобы отключить питание порта 5 одного совместимого концентратора:

Чтобы включить питание для всех портов всех совместимых концентраторов:

Чтобы выключить и включить питание:

Раскрытие - я автор uhubctl.

Это пример с беспроводной мышью Logitech USB под Linux.

Прочитайте соответствующий параграф «/ proc/bus/usb/devices» в соответствии с вашими устройствами «Vendor» (идентификатор поставщика) и «ProdID» (идентификатор продукта) Или «Manufacturer» и «Product» (все эти значения постоянны на устройство).

(первый параграф с включенным устройством, второй с тем же устройством, выключенным, но все еще подключенным)

Здесь вам нужны две переменные . Они расположены в строке "T:" (первая строка абзаца) . Эти переменные: Bus (Bus = 01 в этом примере) Cnt (Cnt = 01 в этом примере)

Вам нужно будет добавить «1» (арифметическое) к «Cnt», чтобы получить ранг Rank = Cnt + 1 (это математическая функция, Rank = 2 в этом примере)

Итак, устройство, которое вы ищете, это следующая строка: Bus-Rank (это не математическая функция, это строка, 1-2 в этом примере)

Также обратите внимание на строку "C:" . Она содержит информацию о мощности (токе) устройства . Если в "C: " есть звездочка (как в нашем первом примере), то устройство подключено к источнику питания Если нет («C:»), то устройство «более или менее» выключено, что означает, что при подключении устройства всегда есть крошечный ток, иначе мы не сможем прочитать все эта информация.

Напомним, наконец, строка «I:» . Если поле «I: *» содержит звездочку (как в нашем 1-м примере), то есть ввод с устройства или на устройство, я не уверен, может быть, оба . . Поле последней строки содержит используемый драйвер («usbhid» в нашем первом примере)

Мы готовы переключить питание нашего устройства:

Ниже приведен простой сценарий bash «USBMS» (USB Mouse Switch), который управляет питанием устройства в нашем примере выше Он не очень динамичен и использует константы «Product» и «Manufacturer» для определения местоположения соответствующий абзац "/proc/bus/usb/devices"Вы должны использовать вместо" Vendor "(идентификатор поставщика) и" ProdID "(идентификатор продукта) . Он также проверяет состояние питания устройства. Запуск от имени суперпользователя.

Команда: ./USBMS action

параметр: action = "off" или "0" для выключения - action = "on" или "1" для включения (без кавычек)

@Kristian Как правило, рекламные объявления о контроле мощности портов, управляемые программным обеспечением, не публикуются, поскольку пользователи не должны осознавать этот уровень. Я не думаю, что есть много вариантов использования для этого, кроме как заставить плохо работающие устройства с питанием от шины перейти в известное состояние, и обращаться с немыми как пост-устройства, которые используют только USB для питания. Возможно, устройство Марка относится к последней категории. Это грубый механизм последней инстанции.

Как я уже упоминал, я не рассматривал детали реализации взлома, связанного с привязкой, и я пробовал его только на хост-контроллере EHCI, встроенном в мою материнскую плату, - расширенном хост-контроллере семейства наборов микросхем Intel Series 6/C200 серии Intel ( рев 05) Я предполагаю, что на этом хост-контроллере установлен бит PPC HCSPARAMS, указывающий программный контроль переключателей питания порта в соответствии со спецификацией EHCI.

Если вы взаимодействуете с внешним концентратором, «концентратор указывает, поддерживает ли он переключение питания, путем установки поля« Режим логического переключения питания »в wHubCharacteristics», в соответствии со спецификацией USB 2.0. Я не помню, подтверждают ли тесты соответствия эту функциональность или нет, но если они это сделают, вам понадобится только найти концентратор с логотипом USB 2.0. Я полагаю, что взломщик отправит запрос на установку порта, но он может циклически работать не только на целевом порте. Опять же, согласно спецификации USB 2.0, «концентратор с переключателями питания может переключать питание на все порты в виде группы/группы, на каждый порт по отдельности или иметь произвольное количество групп одного или нескольких портов». Я не уверен, есть ли хороший инструмент командной строки для получения wHubCharacteristics.

Короче говоря, насколько я знаю, не существует общего способа решения этой проблемы. Однако можно определить внутренний или внешний концентратор, чтобы определить уровень его поддержки, а затем, если он поддерживается, использовать его. Это просто вопрос того, сколько времени вы хотите тратить на это.

В OS X вы можете получить доступ к USB-устройству из пользовательского пространства и запросить его приостановку.

Вы можете найти общий пример в Руководство по интерфейсу USB-устройства . Вам нужно будет использовать метод IOUSBDeviceInterface182 (или выше) USBDeviceSuspend .

Примечание. На концентраторах и портах контроллеров могут быть установлены блоки питания, что означает, что один и тот же коммутатор используется несколькими портами. Если это так, и ваше устройство находится в той же группе, что и другое активное устройство, оно не будет выключено.

уровень мощности

«вкл» означает, что устройство должно быть возобновлено, а автоподключение - нет разрешено. (Конечно, системные приостановки все еще разрешены.)

«auto» - это нормальное состояние, в котором ядру разрешено Автоподвеска и автоматическое возобновление устройства.

«приостановить» означает, что устройство должно оставаться приостановленным, и Автообновление не допускается. (Но удаленное пробуждение все еще может быть разрешено, , Так как оно управляется отдельно атрибутом power/wakeup.)

Шаг 1:у меня есть, usb1, usb2, usb3, usb4 .

Шаг 2:Как я узнаю, какой из них какой? (

Optional 1: если lsusb показывает и нужно найти конкретный

Необязательно 2:в случае, если ничего не найдено - перезагрузка не в состоянии выключить и включить цикл Arduino over udp

Реле Arduino:

Я был бы более склонен перерезать провод и подключить его к последовательному порту с каким-либо простым реле, работающим из одного из выводов «готов к приему». Затем вы можете просто переместить строку вниз (сигнал «я готов к приему») в файл последовательного порта каждый раз, когда возникает какая-то проблема. Когда это будет сделано, просто подайте сигнал «Я полон»

Однако я понимаю, что они потребляют большой ток, пока полностью не зарядят конденсатор, а затем сразу отпустят его, чтобы зажечь лампу. Я не могу себе представить, что такой внезапный разряд полезен для схемотехники компьютера. вам может потребоваться диодные токовые ловушки для предотвращения обратной связи в последовательный порт.

Каждый раз, когда срабатывает мой будильник, компьютер выключается!

A несколько USB-концентраторов могут включать и выключать свои порты, как описано в ссылке. Я еще не нашел материнскую плату с USB-портами, которые могут быть включены или отключены.

Читайте также: