Форум проекта PuppyRus Linux

Общие вопросы => Архив раздела => Вопросы по аппаратной части (железо). Архив => Общие и технические вопросы => Сетевые адаптеры, Wi-Fi, модемы и др. => Тема начата: DdShurick от 17 Январь 2013, 10:12:08

Название: Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 17 Январь 2013, 10:12:08
 Пакет autorun3Gmodem (http://yadi.sk/d/iRC1YZf51tc5N) содержит скрипт запуска модема /lib/udev/wvdial.sh (вариант не окончательный, нужна доработка), скрипт /usr/bin/balanceGUI (графическая оболочка для формирования USSD-запроса), бинарник /usr/bin/ussd (отправляет запрос и расшифровывает ответ) и правила udev для модемов /lib/udev/rules.d/10-Huawei-Datacard.rules, /lib/udev/rules.d/10-ZTE-Datacard.rules.
 Для использования других модемов нужно написать соответствующие правила. Пример для ZTE MF100:
Код
#ZTE MF100
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v19D2p0031*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="00", ATTRS{bInterfaceProtocol}=="ff", SYMLINK="ttyUSB_utps_diag"
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v19D2p0031*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="01", ATTRS{bInterfaceProtocol}=="ff", SYMLINK="ttyUSB_utps_pcui"
SUBSYSTEMS=="usb", ATTRS{modalias}=="usb:v19D2p0031*", KERNEL=="ttyUSB*", ATTRS{bInterfaceNumber}=="02", ATTRS{bInterfaceProtocol}=="ff", SYMLINK="ttyUSB_utps_modem", SYMLINK+="modem", RUN+="wvdial.sh"
Здесь ATTRS{modalias} содержит v19D2 и p0031 (vendor и product, можно посмотреть lsusb)
ATTRS{bInterfaceNumber} - номер интерфейса, например ttyUSB0
SYMLINK - для совместимости с MobilePartner и для определения управляющего порта в balanceGUI..
RUN+ добавляется к строке порта модема (для ZTE ttyUSB2)
 Подробную информацию можне получить командой
Код
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSB0) 
Так же опрашиваются USB1, USB2 ....
Для других модемов поребуется так же доработать balanceGUI, добавить названия модемов, выводимые командой ATI.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: rodin.s от 17 Январь 2013, 12:41:24
Не хотелось бы вмешиваться в разработку PuppyRus и давать какие-то рекомендации, но я пробовал несколько абсолютно разных 3G-модемов на сборках от Wary-5.1.2 до Precise-5.4.3 и все модемы, кроме одного, определились и работали. Я не знаю механизмов определения модемов в Puppy, но не думаю, что там есть правила udev для всех этих модемов. Я пробовал MF100, E1550, Cricket A600, какой-то Verizone, забыл модель - CDMA и UMTS+EDGE+GPRS в одном и какой-то Spirit-CDMA, также не знаю модели. Тот, который не сработал - белый квадратный ZTE, который подключался к USB через кабель, но я пробовал его на Wary-5.1.2, возможно на последних сборках он бы и сработал. Проблема Линукс в том, что здесь драйвера и приложения разделены. Драйвера пишут одни люди, а пользовательские приложения - другие. В Windows всё идёт одним комплектом от разработчика. Например, мне нужно было принудительно загнать этот Verizone в GPRS-EDGE-режим. Мне пришлось идти в Windows, устанавливать программу и там есть окошко, которое это переключает. После этого в Puppy он прекрасно работает, а вот найти команду для Линукс, чтобы это сделать я не смог.
Мне кажется, писать отдельное правило для каждого модема на этой планете - не очень хорошая идея, ведь уже есть usb-modeswitch, в котором уже есть список модемов.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 17 Январь 2013, 21:05:30
Мне кажется, писать отдельное правило для каждого модема на этой планете - не очень хорошая идея, ведь уже есть usb-modeswitch, в котором уже есть список модемов.
Если бы всё было так просто. Во первых модем определяется не как одно устройство, а как несколько (в windows кстати тоже) и требуется определить именно модем, а не вход для AT-команд (кстати wvdialconf неправильно определяет модем ZTE путая именно этот вход с модемом, он USB1 а модем USB2, помогает линк /dev/modem). Во вторых, модем может быть переключен в режим "только модем", тогда usb_modeswich не нужен, да и определяется модем в таком случае по другому (product другой и количество устройств модет отличаться) Разрулить это всё может только udev (ИМХО). Поэтому придётся писать и проверять. Написать правила "чисто теоретически" на основе usb_modeswich можно, но где гарантия их работоспособности?
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: rodin.s от 17 Январь 2013, 22:31:48
Сейчас быстро просмотрел udev-rules для Precise. Несколько я понял, здесь правила написаны для трёх модемов: двух из них нет в списке usb-modeswitch, а третий - это модем Барри. Моих модемов (Huawei E1550 и Cricket A600) в правилах нет, но ведь они определяются. Е1550 в режиме "только модем" (правда давно его так не использовал) вообще не запускает механизм usb-modeswitch, просто определяется ядром (в dmesg) без всяких особых правил, а pupdial потом находит нужное устройство для дозвона.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 18 Январь 2013, 11:02:09
а pupdial потом находит нужное устройство для дозвона.
Бегло просмотрел скрипт pupdial и сопутствующиe ему modemtest. и modemprobe. И вы считаете что это изящнее правил udev? К тому же udev подключает модем прописанный в правилах автоматически без предварительной настройки, чего я собственно и добиваюсь ради удобства "блондинов и блондинок".
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: shelezyaka от 18 Январь 2013, 16:57:38
К тому же udev подключает модем прописанный в правилах автоматически без предварительной настройки, чего я собственно и добиваюсь ради удобства "блондинов и блондинок".
DdShurick , вот на Украине два оператора Интертелеком и Пиплнет (в моей местности их преимущественно используют,конечно есть и другие ) используют одно и то же оборудование, т.е. модемы.
Номер дозвона один и тот же  "  #777 " , а вот строки пароля и логина у них разные.Причём модемы безкарточные,и в прошивках нигде не записаны эти данные ,их нужно вводить ручками.
И как в таком случае получить автоматизацию подключения , предварительно не настроенного модема ?
Стоит ли заморачиваться.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 18 Январь 2013, 20:26:13
Стоит ли заморачиваться.
Моё дело - предложить, ваше - отказаться. У меня работает.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: rodin.s от 18 Январь 2013, 20:33:41
Проблема в том, что если операционная система будет поддерживать только те модемы, которые прописаны в правилах, то это ограничивает её применение, а pupdial Puppy у меня работает и модемы определяет и кого волнует изящность.
Сделайте какой-нибудь udevRulesMaker, который бы создавал такое правило для конкретного модема пользователя, если пользователь захочет автоматического подключения к сети при подключении модема. 
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 21 Январь 2013, 01:07:13
Номер дозвона один и тот же  "  #777 " , а вот строки пароля и логина у них разные.
Разные для каждого пользователя или провайдера?
Причём модемы безкарточные,и в прошивках нигде не записаны эти данные ,их нужно вводить ручками.
Что говорит "modem-stats -c AT+COPS?" ?
И как в таком случае получить автоматизацию подключения , предварительно не настроенного модема ?
Зависит от ответа на первый вопрос.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: shelezyaka от 21 Январь 2013, 02:55:02
Номер дозвона один и тот же  "  #777 " , а вот строки пароля и логина у них разные.
Разные для каждого пользователя или провайдера?
Для любых номеров Интертелекома  - логин  - IT   , пароль  - IT .
Для Пиплнета , логин  -   92хххххххх@people.net.ua (где 92ххххххх - номер телефона) , пароль по умолчанию изначально - 000000 , далее меняется и держится у них на сервере.
Cтандарт связи CDMA 2000 , ussd запросы не поддерживаются.
Причём модемы безкарточные,и в прошивках нигде не записаны эти данные ,их нужно вводить ручками.
Что говорит "modem-stats -c AT+COPS?" ?
Пустая строка....
P.S. Но на это ориентироваться нечего , у меня модем особый.
Модемная часть USB0,а управление USB2.
По USB2 выдаёт -  "+ZCONV :7  RSSI :90,75  "
rodin.s посмотри пожалуйста  у себя как отзывается , у тебя модем "нормальный"
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 21 Январь 2013, 10:26:02
Для Пиплнета , логин  -   92хххххххх@people.net.ua (где 92ххххххх - номер телефона) , пароль по умолчанию изначально - 000000 , далее меняется и держится у них на сервере.
Да, вот это без предварительной настройки никак не получится.
Cтандарт связи CDMA 2000 , ussd запросы не поддерживаются.
ussd не поддерживается это плохо
Но на это ориентироваться нечего , у меня модем особый.
Модемная часть USB0,а управление USB2.
У меня Huawei 150 определяется точно так же, так что никакой не особенный. Из-за этого и пришлось использовать udev, не получается отличить модем от управления.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: rodin.s от 21 Январь 2013, 13:07:06
Код
modem-stats -c AT+COPS? /dev/ttyACM0
на CDMA-модеме выдаёт ошибку.
Скорее всего - это GSM-команда и на CDMA не работает. Вообще, какие-то команды работают, а какие-то - нет. Например, можно посмотреть уровень сигнала при помощи AT+CSQ.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: shelezyaka от 22 Январь 2013, 01:21:36
Например, можно посмотреть уровень сигнала при помощи AT+CSQ.
Как обычно , делаем одно а получается другое. :D
Кто использует conky , добавьте в скрипт строку :
Код
Уровень сигнала  ${color1} ${exec (expr $(expr $(echo $(modem-stats -c AT+CSQ /dev/ttyUSB2) | grep -o '[0-9]*' | head -n 1) \* 2) \- 113)}$color  Db
и получите уровень сигнала в децибелах.Вместо /dev/ttyUSB2 укажите свой порт управления.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 27 Январь 2013, 19:39:17
 Просьба дать вывод следующей команды:
Код
udevadm info -a -p $(udevadm info -q path -n /dev/ttyUSBx) | grep '{bNumEndpoints}' 
где x=0, 1, 2 и если есть 3.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: shelezyaka от 28 Январь 2013, 20:32:39
Ответ на команду
ATTRS{bNumEndpoints}=="02"
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 28 Январь 2013, 21:36:50
 У меня модем ="03", остальные ="02". Думал по этому параметру определять порт модема, но видимо не судьба.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: RW011 от 05 Февраль 2013, 20:38:41
Dd Shurick-у.Очень интересная тема.Ранее для автозапуска модемов в Пуппи пользовался Моб.партнером.Подскажите,как запустить этот PFS-файл в Puppy-Precise.Что-то не могу разобраться.Спасибо.
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 05 Февраль 2013, 22:42:37
Подскажите,как запустить этот PFS-файл в Puppy-Precise.
Пакет предназначен для Richy, для других Puppy надо перепаковывать в .pet
Код
 unsquashfs autorun3Gmodem.pfs
dir2pet squashfs-root
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 01 Сентябрь 2013, 00:27:44
 Поднимаю тему.
Вместо "бюрократических" *-Datacard.rules теперь 99-modem.rules в две строчки. Спасибо "магам" за идею.
Код
ACTION=="add", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", KERNEL=="ttyUSB?|ttyACM?", RUN+="check3Gmodem %k"
ACTION=="remove", SUBSYSTEM=="tty", SUBSYSTEMS=="usb", KERNEL=="ttyUSB?|ttyACM?", RUN+="/bin/rm /dev/modem", RUN+="/bin/rm /dev/ttyUSB_utps_pcui"
Для создания ссылок скрипт /lib/udev/check3Gmodem
Код
#!/bin/sh
[ $1 ] || exit 1
[ -f /tmp/mdev ] && rm /tmp/mdev
/usr/sbin/modem-stats -c AT /dev/$1 && echo $1 >> /tmp/mdev #записываем какие порты откликнулись
/bin/grep $1 /tmp/mdev || exit 1
if [ $(/usr/bin/wc -l /tmp/mdev) = 1 ]; then #если порт один, например телефон в качестве модема.
ln -s $1 /dev/modem && exec /lib/udev/wvdial.sh
else #определяем управляющий порт и порт модема и создаём соответствующие ссылки
[ "$(/bin/grep -m 1 [BR] /dev/$1)" != "" ] && ln -s $1 /dev/ttyUSB_utps_pcui && ln -s $(/bin/grep -v $1 /tmp/mdev) /dev/modem && kill $(pidof grep) && exec /lib/udev/wvdial.sh
fi
Скрипт /lib/udev/wvdial.sh без изменений
Код
#!/bin/sh
export DISPLAY=:0
[ $(/bin/pidof wvdial) ] && exit
[ -f /etc/ppp/peers/wvdial -a -f /etc/ppp/peers/wvdial-pipe ] || /bin/ln -s /etc/ppp/wvdial* /etc/ppp/peers/
/bin/sleep 12 #время для работы usb_modeswitch
/usr/bin/wvdial 2>/tmp/wvdial.log &
/bin/sleep 12 #время для соединения
[ $(/bin/pidof wvdial) ] && exit
/usr/bin/leafpad /tmp/wvdial.log #при отсутствии соединения выводится лог
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: sfs от 01 Сентябрь 2013, 12:35:48
Исправил ошибку в check3Gmodem
Код
if [ $(/usr/bin/wc -l < /tmp/mdev) = 1 ]; then
Проверил в PRA. Автоподключается, но есть тонкости:
Соединение устанавливается через USB0, но в это же время идет  check3Gmodem на USB1
Потом процесс на USB1 убивает worker (посмотреть journalctl -f)
Соединение на USB0 рвется и медленно восстанавливается
Поэтому переделал запуск wvdial в /Startup

После ждущего режима (http://forum.puppyrus.org/index.php/topic,14543.0.html) USB правильно переопределяется и соединение восстанавливается
Но в процессе kworker что-то убивает и по итогу оставляет кучу своих процессов (смотреть ps ax)
Модуль под PRA в аттаче. В /etc/wvdial.conf надо вбить свой номер пароль и логин
Название: Re:Пишем udev.rules для autorun3Gmodem
Отправлено: DdShurick от 28 Январь 2014, 21:54:09
 Обновил autorun3Gmodem (https://cloud.mail.ru/public/999575b33c04/autorun3Gmodem.pfs).
Добавлено распознавание оператора командой AT+COPS?
Устранены "зависания" при определении модема.
 Требуется доработка wvdial.conf под региональных операторов и операторов союзных республик. Надеюсь на помощь.