Перейти к содержимому

Usb modeswitch как пользоваться

  • автор:

USB modeswitch

Пакет исходного кода: usb-modeswitch применяется в Unix системах для подключения устройств через USB интерфейс.
Для опознания USB устройства системой, в некоторых случаях, необходимо изменить конфигурационный файл /etc/usb_modeswitch.conf
В частности, мы пытались подключить модем usb pantech UM175A оператора «Интертелеком» на ось linux 5.0
Первоначально идентификатор устройства (ID) взяли командой lsusb

Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 005: ID 106c:3715 Curitel Communications, Inc.

и вставили его в конфигурационный файл usb_modeswitch.conf.
Pаскоментировали следующие строки (убрали # вначале строки)

DefaultVendor= 0x106c
DefaultProduct= 0x3b03
TargetVendor= 0x16d5
TargetProduct= 0x6502
MessageContent=»555342431234567824000000800008FF05B112AEE102000000000000000000″

Сохранив изменения запустили usb_modeswitch (от суперпользователя «root»). Благодаря этому устройство начало опознаваться.

USB_ModeSwitch ≈ управление бистабильными USB устройствами под Linux

Все больше USB гаджетов (особенно из линейки высокоскоростных WAN устройств, созданных на основе сотовых чипсетов) имеют встроенные драйвера MS Windows; будучи подключенными к компьютеру в первый раз, они ведут себя как флеш-накопители и начинают установку своего программного обеспечения. По окончании установки (и при всех последующих подключениях) драйвер переключает режим гаджета, накопитель исчезает, и можно увидеть новое устройство (например USB модем). Производитель модемов «Option» называет такой механизм «ZeroCD (TM)» так как он позволяет обойтись без отдельного носителя с драйверами.

Поначалу никакой документации на этот счет не существовало и говорить о какой-либо поддержке Linux не приходилось.
Но, с другой стороны, большинство известных гаджетов нормально работают в обоих режимах с обычными Linux драйверами типа «usb-storage» и «option» (улучшенный драйвер последовательного порта, стандарт Linux для скоростных 3G модемов).
Остается только проблема переключения режима гаджета из накопителя в модем, или в какой-либо иной прибор.

К счастью, на свете есть здравый смысл, программы прослушивания шины USB и «libusb». Возможно отследить сообщения MS Windows драйвера, выделить команду или действие, переключающие режим, а потом воспроизвести подобный сценарий по правилам Linux или BSD.

USB_ModeSwitch позволяет легко управлять этим процессом, получая важные параметры из конфигурационного файла и проводя всю работу по связи и инициализации, все при мощной помощи «libusb».
Обычно все происходит автоматически ≈ через события udev и его правила ≈ и не требует вмешательства пользователя. Но можно применять его и как инструмент командной строки, обычно когда нужно запустить незнакомый прибор.

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

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

О том как проводить собственные исследования смотрите раздел Сотрудничество.

Загрузки

Последний на сегодняшний день релиз программы ≈ 1.2.6. tar архив содержит только исходник. Я применял libusb-0.1.12, но и «compat» версия библиотеки libusb-1.0 тоже будет работать.

    Загрузите usb-modeswitch-1.2.6.tar.bz2 датированный 2013-06-02; Debian пакет скоро появится в репозиториии Debian . Поддерживаются многие архитектуры (как amd64 или ia64).
    Имейте ввиду, что Deb-пакет не на 100% совместим с последними версиями Ubuntu.

Новость: Если у вас есть андроидный планшет с USB хост-портом и Андроид по крайней мере 2.2, то можете попробовать новый «PPP Widget» (тестовая версия 0.8). Он состоит из USB_ModeSwitch и PPPD и может установить выход в Интернет при помощи USB модема или телефона.

Сверх того, я предлагаю статический бинарник для ARM: usb_modeswitch-1.1.9-arm-static.bz2.
Скомпилировано при помощи gcc (arm-none-linux-gnueabi 3.4.4) без специальных настроек. Libusb 0.1.12 вкомпилирован.

Если вы мантейнер пакетов, то следующий XML файл поможет вам сверять новые релизы:
usb-modeswitch-versions.xml

Установка

Если у вас уже установлена более ранняя версия, рекомендуется деинсталляция ее («make uninstall»). Начиная с версии 1.1.0 изменилось местоположение некоторых файлов, если у вас версия новее 1.1.0, то достаточно обновиться и переписать все файлы.

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

Команда установит небольшой shell-скрипт для udev, большой скрипт оболочки, конфигурационный файл, страницу мана и скомпилированный бинарник.
Важно: при установке программы данным способом, потребуется пакет «tcl» для работы большого управляющего скрипта. Есть другие способы установки, которые не требуют этого пакета. Для ознакомления с другими возможностями установки читайте файл README.

Такая же точно процедура с пакетом data package. Он установит конфигурационные файлы в директории «/usr/share/usb_modeswitch» и файл правил udev в директории «/lib/udev/rules.d». Прежняя директория «/etc/usb_modeswitch.d» зарезервирована для пользовательских конфигурационных файлов (новых или отредактированных).
Теперь все готово для работы; если ваш гаджет есть в базе данных, вы сможете использовать его сразу после подключения. Если он не работает как следует, то мы выясним отчего.

Для работы в ручном режиме просто нужно установить программу. Работать можно из командной строки, либо редактировать конфигурационный файл. В файле «device_reference» (см. «Загрузки») вы найдете отправные данные для создания собственной конфигурации. Этот файл обильно комментирован и подскажет вам что делать.
Ваш пользовательский конфигурационный файл может располагаться где угодно и называться как вам угодно; просто нужно указать его имя и местоположение в командной строке при помощи параметра -c.

Ручной режим предназначен для тестирования и исследования. Смотрите следующий раздел.

Использование

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

Если вы полагаете, что ваш прибор поддерживается, но почему-то не работает, первым делом подключите функцию ведения лога, как описано в разделе Диагностика.

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

Чтобы получить список параметров команды запустите «usb-modeswitch -h».
Конфигурационный файл задается параметром -c.
Следует иметь ввиду, что если не подключены опции -W, -D, -I и -q, то конфигурационный файл, заданный параметром -c игнорируется, и все необходимые параметры нужно явно указывать в командной строке.

Для работы с конфигурационным файлом используйте один из файлов в директории «/usr/share/usb_modeswitch» или создайте его сами. Задайте имя и местоположения конфигурационного файла при помощи опции -c . В файле device_reference.txt смотрите подсказки по различным семействам модемов и объяснение параметров.

Важно: USB_ModeSwitch, как и все программы, использующие libusb, запускается в командной строке от имени суперпользователя (или через «sudo»). В противном случае появляются непонятные предупреждения, и работа не идет. Так как придется постоянно пробовать новые варианты команды, то имеет смысл работать с ней в оболочке root shell («sudo bash» or «su -«).

    /lib/udev/rules.d/40-usb_modeswitch.rules ≈ правила udev, запускающие оболочку при подключении прибора с указанным ID (vendor/product).
    Если прибор после переключения режима создает последовательные порты, второе правило снова запускает оболочку и создает символическую ссылку на правильный порт (см. ниже).

При работе с беспроводными устройствами, возможны проблемы с NetworkManager (или его компонентом ModemManager), который до сих пор часто ошибается при определении правильного порта.
Хорошо зарекомендовали себя программы wvdial, UMTSmon и несколько других, обеспечивающих графический интерфейс для запуска PPP, например kppp; правда, эти программы требуют некоторых знаний.

Также появилась новая ≈ необычная и интригующая ≈ концепция, которая сокращает утомительный путь настройки различных компонентов для подключения беспроводной связи. Sakis3G ≈ это самодостаточная программа (включающая в себя, среди прочего, и новейший USB_ModeSwitch бинарник). Программа уже поддерживает большое число провайдеров и стремительно развивается. В противоположность NetworkManager она действительно работает. Ищите ее на блоге ToDo Forever . Там же и инструкции по установке, в идеале она запускает ваш модем как только он подключен.

Главное препятствие полностью автоматического запуска вновь подключенного модема программой NetworkManager и иже с ним ≈ это определение правильного порта. Зачастую, после переключения режима, создается более одного порта (в некоторых случаях до 5 штук). Вообще-то не все они являются действительно последовательными портами (драйвер не может понять какие), хотя некоторые весьма похожи и даже отвечают на AT-команды, но только правильный порт является точкой передачи данных. К сожалению, NetworkManager руководствуется иными критериями проверки и иногда ошибается. Стоит заметить, что упомянутый выше Sakis3G находит истинный порт играючи.

Начиная с версии 1.1.2, usb_modeswitch добавляет символическую ссылку на правильный порт, обеспечивающий передачу данных, если устройство создает последовательные порты. Эта ссылка носит имя /dev/gsmmodem (с соответствующим номером, в случае подключения нескольких устройств).
Можно использовать эту ссылку при настройке программ дозвона типа wvdial. В большинстве случаев их конфигурация правится вручную.

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

Поддерживаемые гаджеты

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

  1. Отключить накопительное устройство (в том числе SCSI) какой-либо редкой командой, например «eject» (немного непонятно написано; оказалось, что автор имеет ввиду управляющую команду (она же последовательность) 5553424312345678000000000000061b000000020000000000000000000000. Джошуа пишет на форуме : ≈ «Я всегда пытаюсь использовать Команду «извлечь» («eject»), если ничего не помогает).
  2. Послать на устройство одну из вендор-специфичных управляющих команд.
  3. Насильно отключить от устройства драйвер накопителя (только для некоторых ранних гаджетов).

Еще раз скажу: даже если вы не нашли ваш гаджет в списке, он может все равно поддерживаться.
Важно чтобы ваш USB ID был в числе имен файлов в директории конфигурационных файлов /usr/share/usb_modeswitch. Загляните в новейший пакет usb-modeswitch-data (см. Загрузки).

Вот этот список поддерживаемых гаджетов вместе с их производителями:
device_reference.txt

Диагностика

Если, после знакомства со всем вышесказанным, вам все еще нужна поддержка, добро пожаловать на форум ! Электронная почта предназначена для обсуждения вопросов сотрудничества.

Известные проблемы:

    Только ядра начиная с 2.6.27 и выше назначают 3G-оптимизированный драйвер последовательного порта. Если у вас более старое ядро и ваш модем после переключения режима не опознан ни одним драйвером, тогда используется универсальный драйвер «usbserial».

Для диагностики первым делом следует подключить функцию ведения логов. Как суперпользователь отредактируйте файл /etc/usb_modeswitch.conf в текстовом редакторе и замените строку

Программа начнет записывать отчет о своей деятельности в директории /var/log/usb_modeswitch_.

Если вы выставили правильные параметры вашего устройства и проделали все фокусы из раздела Поддерживаемые гаджеты, USB_ModeSwitch что-то раз за разом делает, а толку нет, то скорее всего виноваты какие-то проблемы с системой.

Первое подозрение падает на системные правила для модемов, которые могут быть прописаны не вполне корректно.
Если ваш прибор до переключения режима имеет ID 05c6:1000, то в старых системах он может получать неверную переключающую команду. Существует четыре различных бистабильных прибора с этим ID, в больших дистрибутивах они все указываются как устройства от производителя «Option», что неверно в четырех случаях из пяти. Есть даже мобильные телефоны с этим ID, которые также неверно интерпретируются при подключении по USB.

Чтобы решить проблему, можно попытаться удалить файлы правил из директории «/lib/udev/rules.d», содержащие обращения к «modem-modeswitch». После удаления, USB_ModeSwitch произведет дополнительное расследование вне USB ID и обработает подозрительные устройства должным образом. Например, не будет рассматривать неизвестные устройства с ID 05c6:1000.

Другой печально известный «подозреваемый» ≈ снова 19d2:2000. Он может нормально подключаться по существующим правилам udev, но, если модель у вас новая и ее ID еще не прописан в модуле «option», драйвер к нему не загружается.
Нужно дать команду «eject» и тогда usb_modeswitch «подхватит» устройство с этим ID.

Проблемы связанные с ядром

Некоторые новейшие ядра обрабатывают определенные устройства таким образом, что переключения режимов не требуется. Для этих устройств больше не нужна USB_ModeSwitch; но, с другой стороны, уже не получится заглянуть в «CD-ROM» такого гаджета. Больше того, бывали случаи, когда подобного рада обработка не удавалась сама и препятствовала программе USB_ModeSwitch правильно сработать (случалось с гаджетами ZTE, error «-2»).

Если у вас происходит подобное, загляните в «unusual_devs.h» в папке «drivers/usb/storage» исходника вашего ядра. Если там есть ваш ID (вендора и продукта в режиме накопителя) и USB_ModeSwitch генерирует ошибки, первым делом попробуйте занести «usb-storage» в черный список (blacklist).
Если это помогло, остается перекомпилировать ядро с дезактивированным пунктом «unusual_devs.h». После этого накопитель usb-storage будет работать в обычном режиме (а не в особом как до того). В Russian Gentoo wiki я нашел совет проделывать именно такие манипуляции с ZTE MF626.
Между прочим, разработчиками USB была достигнута договоренность не включать кода переключающего режимы в ядро, если возможно проделать это в пользовательском пространстве «user space».

Другим параметром, влияющим на поведение ядра является»delay_use» из «usb-storage», который устанавливает отрезок времени (в секундах после подсоединения) в течении которого устройство будет использоваться (и, возможно, автомонтироваться). По умолчанию задано 5 секунд; при определенных условиях это может влиять на результат переключения режимов.
Для изменения параметра добавьте в /etc/modprobe.conf:

options usb-storage delay_use=1 (или 10, или сколько хотите)

Старые системы (например CentOS 5 или Xandros 6)

Если вы пользуетесь не самой свежей системой (с ядром ниже 2.6.27), то можете натолкнуться на несовместимость между версиями «udev» (менеджера устройств). Если у вас не видно деятельности никаких компонентов usb_modeswitch (совсем нет его логов), то проделайте следующие шаги:

    Проверьте, нет ли в директории «/lib/udev/rules.d» других файлов кроме «40-usb_modeswitch.rules». Если нет, то переместите этот файл в директорию «/etc/udev/rules.d».

Сотрудничество

USB_ModeSwitch оставляет простор для экспериментов с неподдерживаемыми пока гаджетами.

Стоит попытаться использовать для новых гаджетов широко применяемые методы переключения режимов от уже известных устройств, как скажем, последовательность «eject» из файла «12d1:1446» устройства BandLuxe. Если же есть намеки, что ваш девайс сработан Huawei, то попробуйте последовательность из файла «12d1:1446». Не бойтесь повредить устройство, применение неправильной последовательности не может сломать девайс. Не забудьте только переподключать прибор после каждой попытки!

Коли ничто не помогает, попробуйте такой подход: Заметьте Vendor и Product ID прибора из /proc/bus/usb/devices (или из вывода команды «lsusb»); обычно соответствующий драйвер ≈ «usb-storage». Затем прошпионьте USB-коммуникации устройства с данным ID под M$ Windoze, после инсталляции им своих драйверов. Там ведь тоже произойдет переключение режима и вы можете поймать этот момент в логах. Рекомендую следующую программу: «SniffUSB»( http://www.pcausa.com/Utilities/UsbSnoop/default.htm).

Я кратко объяснил. Очень хороший пример Mark A. Ziesemer опубликовал в Alltel UM175AL USB EVDO under Ubuntu Hardy Heron

Все ваши наработки и открытия, информацию по новым гаджетам и отчеты об ошибках прошу постить на форуме ModeSwitchForum !
Если вам не нужна огласка, можете прислать мне старомодное и конфиденциальное (при желании) e-mail. Адрес найдете на сайте оригинала данной статьи в конце /прим. переводчика/.

Usb-modeswitch

USB-modeswitch это инструмент переключения режима для управления USB-устройствами «flip flop».
Некоторые современные USB-устройства, для облегчения их использования в Windows, при первом подключении работают как флеш-память. При установке такого USB-устройства начинается установка драйвера оттуда. А когда он установлен, запоминающее устройство исчезает, и появляется новое устройство, например, USB-модем. Эта функция называется ZeroCD. В системе Debian/GNU Linux данная функция не требуется, потому что драйвер включён в модуль usbserial ядра Linux. Тем не менее устройство продолжает отображаться по умолчанию как usb-накопитель. USB-modeswitch решает эту проблему посылкой команды, которая переключает устройство из «usb-storage» в «usbserial».

Установка

Пакет присутствует в хранилище пакетов debian.
Для установки пакета

  • в командной строке: следует выполнить команду # apt-get install usb-modeswitch
  • в графическом режиме: воспользоваться специализированной программой управления пакетами

После установки пакет готов к использованию.

Для настройки существует файл /etc/usb_modeswitch.conf с двумя параметрами

DisableSwitching=0 - 0/1 включение/выключение переключения режимов при установке USB-устройства EnableLogging=1 - 0/1 выключение/включение журналирования работы

Литература

Справочная информация

  • 10.02.2014: Usb-modeswitch: создание статьи в википедии, описание установки и настройки пакета в debian wheezy

Как настроить USB модем в Fedora

USB модем может не работать в Линуксе, потому что при подключении распознается как CD привод, а не как модем. В принципе в Fedora есть встроенный модуль usb_modeswitch, который старается автоматически переключить такой USB модем в режим модема, но новый модем он может не распознать.

Команда lsusb показывает как система опознает устройство:

$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 006: ID 05ac:8218 Apple, Inc. Bluetooth Host Controller
Bus 004 Device 003: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 004 Device 002: ID 05ac:0237 Apple, Inc. Internal Keyboard/Trackpad (ISO)
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 05ac:8507 Apple, Inc. Built-in iSight
Bus 001 Device 002: ID 12d1:15e7 Huawei Technologies Co., Ltd.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

Видно, что устройство распознается как 12d1:15e7, где 12d1 это код производителя Huawei, а 15e7 это код самого устройства. Насколько я знаю, модем должен распознаваться как 1506. То есть нужно настроить перенаправление с устройства 15e7 (USB CD) на устройство 1506 (USB модем). Для этого редактируем файл исходных устройств:

$ sudo gedit ‘/lib/udev/rules.d/40-usb_modeswitch.rules’

и в уже имеющийся список утсройств добавляем наш модем в том виде 12d1:15e7, как он распознается системой:

# Huawei E3372 (827F)
ATTR==»12d1″, ATTR==»15e7″, RUN+=»usb_modeswitch ‘%b/%k'»

и создаем файл устройства назначения, который называется как код устройства 12d1:15e7:

$ sudo gedit ‘/etc/usb_modeswitch.d/12d1:15e7’

в котором должна находиться следующая информация, перенаправляющая на устройство 12d1:1506:

# Huawei E3372 (827F)
TargetVendor=0x12d1
TargetProduct=0x1506
MessageContent=»55534243123456780000000000000011062000000101000100000000000000″

Перегружаем систему и смортим на результат:

$ lsusb
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 006: ID 05ac:8218 Apple, Inc. Bluetooth Host Controller
Bus 004 Device 003: ID 0a5c:4500 Broadcom Corp. BCM2046B1 USB 2.0 Hub (part of BCM2046 Bluetooth)
Bus 004 Device 002: ID 05ac:0237 Apple, Inc. Internal Keyboard/Trackpad (ISO)
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 003: ID 05ac:8507 Apple, Inc. Built-in iSight
Bus 001 Device 002: ID 12d1:1506 Huawei Technologies Co., Ltd. Modem/Networkcard
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

То есть сейчас USB модем уже должен работать как модем.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *