Установка и настройка USB-модемов

Обмен опытом по установке Линукс на разные аппаратные конфигурации

Модераторы: Olej, vikos

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 29 дек 2012, 03:54

OFF TOPIC
По материалам этой темы уже можно было бы написать интереснейший обзор по USB модемам, начиная от стандартов и протоколов, которые используются разными модемами, и заканчивая приёмами "оживления" их в Linux.
По-крайней мере, я нигде в Интернет не встречал описания даже такой полноты, при том всём, что некоторые детали ещё бы требовали экспериментальной проверки.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 29 дек 2012, 13:32

dmitriev писал(а):Увы! Это не работает. Было бы слишком просто, чтобы никто не допер.
Понимаете ... вообще то логика обслуживание USB-модемов стандартным способом в Linux (всех многих сотен уже, наверное, моделей) тоже очень проста.
Просто я нигде не встречал, чтобы кто-то это внятно и простыми словами обозначил.
... и тогда (когда нет внятно) каждый пользователь, индивидуально, купивши какой-попало модем (а их модели постоянно обновляются) начинает уродоваться сам, ... и если ему повезёт, начинает описывать в Интернет "как подключить модем ХХХ".

А выглядит это в общем виде примерно так:

1. USB-модемы стали строить как многофункциональные USB устройства (ZeroCD + модем), первоначально устройство видится с VID:PID как инсталляционный CD, для использования его в качестве модема нужно переключить (переинициализировать) его на другие VID:PID, одновременно и тот и другой набор VID:PID не может присутствовать;

2. Эта картина совершенно одинаковая что в Windows, что в Linux, что в любой другой ОС. Это очень важно, потому, что если производитель конкретного USB-модема "затачивает" его исключительно под Windows, то даже и в этом случае он делает переключение к модему, посылая определённую байтовую последовательность на определённую USB end-point устройства;

(Про написание модулей-драйверов под USB я уже затевал здесь тему модуль/драйвер USB устройства, но руки не дошли пока развить её до нормального описания... Но там есть ссылка на статью Разработка драйверов для USB-устройств под Linux, где хорошо и просто, "на пальцах" рассказана логика обмена USB, и что такое есть end-point:
Спецификация USB определеят endpoint (EP), как источник или приемник данных. Устройство может иметь до 32 EP: 16 на прием и 16 на передачу. Обращение к тому или иному endpoint'у происходит по его адресу.
Приведенного там описания "на пальцах" достаточно для понимания того, что происходит в модемах).

3. Раз аппаратное переключение устройства одинаково в любой ОС, то и вид байтовой последовательности, и EP куда её нужно засылать - всё это можно вытянуть из реализации Windows поддержки устройства, даже если производитель и не думал ни о каких других ОС. Как я понимаю, команда проекта usb_modeswitch именно так это и делает (совершенно невозможно представить каким бы другим способом это они могли делать). А раз так, то, в принципе, это может сделать каждый и сам.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 29 дек 2012, 14:49

Olej писал(а): А выглядит это в общем виде примерно так:
4. (продолжение)
После этого нужно найти модуль ядра, который поддерживает данный модем.
Я видел модемы, поддерживаемые только 3-мя модулями:
- option - это наиболее часто, в большинстве случаев (создаёт только устройства /dev/ttyUSB*);
- cdc-acm - это, как я предполагаю, для самых старых моделей, и последние изменения в код модуля датированы 2011г. (создаёт только устройства /dev/ttyACM*);
- qcaux - а это, похоже, поддержка из самых новых моделей (?) (создаёт и устройства /dev/ttyUSB* и /dev/ttyACM* одновременно);
P.S. в man usb_modeswitch упоминается модуль поддержки: usbserial.

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

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

Код: Выделить всё

bash-4.2$ modprobe -c | grep -i <VID> | grep <PID>
Для которого нет соответствующей строки:

Код: Выделить всё

bash-4.2$ cd /lib/modules/`uname -r`
bash-4.2$ cat modules.alias 
...
alias usb:v04D8p000Bd*dc*dsc*dp*ic*isc*ip* cdc_acm
alias usb:v0694pFF00d*dc*dsc*dp*ic*isc*ip* cdc_acm
alias usb:v03EBp0030d*dc*dsc*dp*ic*isc*ip* cdc_acm
alias usb:v04E7p6651d*dc*dsc*dp*ic02isc02ipFF* cdc_acm
alias usb:v0421p03CDd*dc*dsc*dp*ic02isc02ipFF* cdc_acm
alias usb:v0421p0335d*dc*dsc*dp*ic02isc02ipFF* cdc_acm
...
- где в строке (инициализации) после v записан VID, а после p записан PID.
Тогда можно попытаться подгрузить модуль вручкую:

Код: Выделить всё

# modprobe option
6. Даже если данная модель не поддерживается ещё модулем ядра, но для неё есть похожая более старая поддерживаемая модель (часто это тот же VID, но меньший номер PID), то и для такого модема, при некоторой изобретательности, можно создать подмену VID:PID так, чтобы система этого не заметила. А поскольку многие модели модемов со стороны интерфейса сильно похожи, то и это срабатывает достаточно часто.

7. К этому моменту возникают устройства /dev/ttyUSB* или/и /dev/ttyACM*
Теперь в большинстве случаев можно настроить подключение такого модема к провайдеру с помощью NetworkManager - множество примеров с картинками показывалось в этой теме раньше.

8. А что делать, если в настройках NetworkManager нет подходящей страны, провайдера в этой стране, нет каких-то дополнительных параметров? (в подавляющем большинстве случаев, если уж установка USB-модема произошла успешно, соединение с провайдером удаётся выполнить с помощью NetworkManager, но сообщается о моделях модемов, для которых так не получается сделать, см: viewtopic.php?f=5&t=1798&start=0#p4802).

В этом случае можно замечательно настроить соединение, используя классику - ручную настройку PPP: Подключение модемов напрямую через PPP при помощи скриптов.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 29 дек 2012, 15:51

Вот это место меня занимает:
Olej писал(а): 2. Эта картина совершенно одинаковая что в Windows, что в Linux, что в любой другой ОС. Это очень важно, потому, что если производитель конкретного USB-модема "затачивает" его исключительно под Windows, то даже и в этом случае он делает переключение к модему, посылая определённую байтовую последовательность на определённую USB end-point устройства;

(Про написание модулей-драйверов под USB я уже затевал здесь тему модуль/драйвер USB устройства, но руки не дошли пока развить её до нормального описания... Но там есть ссылка на статью Разработка драйверов для USB-устройств под Linux, где хорошо и просто, "на пальцах" рассказана логика обмена USB, и что такое есть end-point:
Из того же описания:
Endpoint No.0

EP0 имеет особое значение для USB. Это Control EP. Он должен быть в
каждом USB-устройстве. Этот EP использует token "setup", чтобы
сигнализировать, что данные, отправляемые после него, предназначены
для управления устройством.

Используя этот EP0, хост может передавать setup-пакет длиной 8 байт и
данные, которые следуют за этим пакетом. Во многих случаях может
хватать передачи только setup-пакета. Однако устройство может
использовать и передачу данных по EP0, например для смены прошивок
компонентов устройства, или получения расширенной информации об
устройстве.
Могу предположить, что именно на EP0 и направляется то переключающее сообщение, которое определяется в конфигурационных файлах (или опциях):

Код: Выделить всё

MessageContent="5553424312345678000000000000061b000000020000000000000000000000"
Или:

Код: Выделить всё

bash-4.2$ usb_modeswitch -h
...
 -m, --message-endpoint NUM    direct the message transfer there (optional)
 -M, --message-content <msg>   message to send (hex number as string)
...
А когда конструктора конкретного USB-модема для переключения закладывают другой EP, то тогда и появляется в конфигах (или в опциях см. выше):

Код: Выделить всё

MessageEndPoint = "0x01"
Но это нужно бы проверить.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 29 дек 2012, 17:55

Olej писал(а):Но это нужно бы проверить.
Это не совсем так:

Код: Выделить всё

bash-4.2$ man usb_modeswitch
...
       -m --message-endpoint NUM
                 A  specific  endpoint to use for data transfers. Only for testing purposes; usually endpoints are determined from
                 the device attributes
       -M --message-content STRING
                 A bulk message to send as a switching command. Provided as a hexadecimal string
...
Но каким это образом "обычно EP определяется из атрибутов устройства"? Что есть "атрибуты"?
Хотя понятно, что по типу передачи эта EP должна быть: bulk transfer.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 05 янв 2013, 15:10

dmitriev писал(а):Увы! Это не работает. Было бы слишком просто, чтобы никто не допер.
Вот ещё публикация относительно переключения из моды ZeroCD в модем командой eject - Запуск GSM модема ZTE MF180 (под брендом "Kcell Connect") в среде Debian Linux Squeeze
В модемах этой серии применяется технология "ZeroCD", суть которой заключается в том, что при подключении устройство сперва представляется как виртуальный "CD-диск", на котором находятся драйвера и сопутствующее программное обеспечение, а функционал модема становится доступен на втором этапе, когда виртуальному "CD-диску" отдаётся команда "извлечения" - контроллер устройства воспринимает это как сигнал для инициализации второго, основного, уровня функциональности, модема как такового.
В моём случае не понадобилось применения "usb_modeswitch" - оборудование отлично отработало "изъятие" виртуального "CD-диска" с помощью утилиты "eject", произвело смену режима с вещанием новых идентификаторов, которые корректно опозналось системой.
Итак, "извлекаем" виртуальный "CD-диск", пока в ручном режиме:
# eject /dev/sr1
Ну, а после "извлечения" он рисует правила для udev, что достаточно понятно, и мы сами умеем это делать... ;-)

ZTE MF180 - это достаточно капризная модель, которая часто упоминается.

Т.е. использование eject - это не так редко используемая практика, которая срабатывает...
Интересно, для как многих моделей модемов она срабатывает?
И ещё интересно (для проверок и эксперимнтов): а какая бы команда могла быть обратной eject, чтобы переключить обратно в режим ZeroCD?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 05 янв 2013, 15:15

dmitriev писал(а):Чтобы CD eject, его сперва нужно umount!

Код: Выделить всё

bash-4.2$ man eject
...
       There are four different methods of ejecting, depending on whether  the
       device  is a CD-ROM, SCSI device, removable floppy, or tape. By default
       eject tries all four methods in order until it succeeds.

       If the device is currently mounted, it is unmounted before ejecting.
(последняя фраза)

tundra37
Писатель
Сообщения: 149
Зарегистрирован: 03 мар 2012, 19:26
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение tundra37 » 09 фев 2013, 23:07

Немного не в тему. А с WiFi-свистками нет инфы про "потроха" их настройки в Линукс?

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Olej » 10 фев 2013, 17:06

tundra37 писал(а):Немного не в тему. А с WiFi-свистками нет инфы про "потроха" их настройки в Линукс?
1. делайте новую отдельную тему ... разберёмся ;-)
2. ... начиная с указания (URL) описания конкретных устройств, которые подключаете
3. ... и далее - проблемы, в чём там сложность?

Роман
Интересующийся
Сообщения: 2
Зарегистрирован: 08 мар 2013, 18:24
Контактная информация:

Re: Установка и настройка USB-модемов

Непрочитанное сообщение Роман » 08 мар 2013, 18:33

Доброго времени всем! Подскажите пож-та сталкивался ли кто с подключением USB модема связной (оператор Мегафон) на MEEGO? А то купил нетбук для инета, а подключить модем никак не могу.
P.S. Если возможно поподробнее, а то я с этой системой первый раз общаюсь.

Ответить

Вернуться в «Железо для Linux»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 6 гостей