среда, 22 октября 2008 г.

Заставляем работать software модем на ноутбуке с Linux


Есть ноутбук (если точнее, Fujitsu-Siemens Esprimo U9200) и Linux (если точнее, Mandriva 2009.0), у ноутбука есть встроенный модем (по сообщениям винды Motorola SM56), который автоматически при установке мандривы не обнаруживается. Прикручиваем руками.
Т.к. модем у нас софтверный, то понятно, что для его работы нужна некая софтина. Называтся эта софтина slmodemd. В случае мандривы устанавливатеся так:
# urpmi slmodem
Если в вашем дистрибутиве такого пакета нет, то можно поискать тут.
В простом случае для ее работы достаточно поправить код страны в файле /etc/sysconfig/slmodemd:
SLMODEMD_COUNTRY=RUSSIA
на случай, если вы заблудились вдали от родины, то список допустимых стран покажет команда:
$ slmodemd --countrylist
и запустить демон командой:
# /etc/init.d/slmodemd start
Критерий успеха - появление в каталоге /dev файла ttySL0 (это и будет порт модема для программы дозвона).
Но у меня так просто не заработало. У меня понадобилось включить у модема режим ALSA. Пишем в /etc/sysconfig/slmodemd:
SLMODEMD_MODULE=snd-intel8x0m
а потом (как это не удивительно) надо править скрипт /etc/init.d/slmodemd Причина в том, что в режиме ALSA устройством модема является не умолчательное /dev/slamr0, а устройство, полученное от системы asound. Там другое пространство имен. Нужное имя (из двух цифр) ищем командой:
$ cat /proc/asound/pcm | grep -i modem
Видим что-то типа:
00-06: Si3054 Modem : Si3054 Modem : capture 1
заменяем черточки в номере (первое поле) запятыми - и получаем устройство hw:0,6
Так и пишем в /etc/init.d/slmodem:
SLMODEMD_FULLDEVICE=hw:0,6
(это строчка в ветке if [ "$SLMODEMD_MODULE" = snd_intel8x0m ] - как раз наш случай).
На всякий случай, если slmodemd предполагается запускать не через скрипт /etc/init.d , а из какого-то своего скрипта, то все много короче. Строка вызова такая:
# slmodemd -c RUSSIA -a hw:0,6
(кажется, работоспособен и более простой синтаксис -a modem:0)
Модем часто теряет несущую сразу после соединения. Если для дозвона используется wvdial, то одолеть проблему можно, добавив в /etc/wvdial.conf строку:
Carrier Check = no
(при использовании гольного pppd проблема не наблюдается).
P.S. после этого модем завелся, но связаться с провайдером пока удается только на протоколах V.22bis и ниже. Если кому-то интересны такие скорости, то команда выбора протокола в этом случае такая: at+ms=122
Полный список доступных протоколов можно получить командой at+ms=? (протоколы выводятся в виде цифровых кодов, для их перевода в более принятую V.XX-нотацию, можно заглянуть в файл modem/modem_defs.h в исходниках slmodem - в нем искать описание enum DP_ID. Неплохую справку по АТ-командам, поддерживаемым slmodem, можно найти, почитав файл modem/modem_at.c - надо сказать, что перечень их довольно сильно отличается от официальной документации производителя модема - ежели вам все-таки не хватает списка от Motorola, читайте его тут).

Комментариев нет: