Linux и интернет через GPRS: теория и практика
Прогресс не стоит на месте, и вот краем это
коснулось и меня — под Новый год появился у меня Alcatel 535.
Вполне удобная штуковина, кроме того, у него есть встроенный
GPRS-модем.
Который мне, как это и должно было быть, захотелось
попробовать использовать для доступа в internet. К тому же
надеяться, что к месту моего обитания проведут телефонную линию,
способную удовлетворить нынешние модемы — просто глупо.
Вот и вся предыстория.
Google знает много по теме настройки GPRS в
Linux-е. Даже и если телефончик подключается через инфракрасный
порт. Несколько из этих страничек даже на русском, но они являются
переводами с английского.
Итак, исходные данные:
— сотовый телефон Alcatel 535 (735);
— инфракрасный адаптер Tekram IRmate IR-210B, подключаемый к
последовательному порту компьютера; — собственно
сам компьютер; — с установленным Debian GNU/Linux
(или это еще был ALT Linux Master 2.2? — уже не помню. да и без
разницы это).
В процессе поиска чего и как, кроме Google, сильно
помогли Tux-мобильный, где собрано много информации о
мобильной жизни линуксоидов, и сайт Linux-irda, c которого скачивается последняя
версия пакета irda-tools.
Так как сам по себе GPRS — это такое же
удаленое соединение, как и при обычном dial-up, то основная
проблема, которая стояла передо мной — это настройка ИК-порта и
соединения с телефоном.
Общение с модемом телефончика возможно только
благодаря присутствию поддержки ядром протокола IrDA и пакету
irda-tools.
Поэтому необходимо в ядре включить следующие модули
(названия модулей приведу из ядра 2.6.7, так как поглядеть для ветки
2.4 представляется затруднительным):
—irda — собственно сам модуль протокола IrDA;
—ircomm_tty — модуль последовательного
терминального соединения IrCOMM; —ircomm —
протокол ик-соединения IrCOMM; —sir_dev —
ядро протокола работы с адаптерами ик-портов, подключаемых к
последовательному порту компьютера;
—tekram_sir — модуль управления адаптером ик-порта Tekram
IRmate IR-210B.
Компилируем соответственно ядро, чтобы данные
модули были доступны. Такие модули желательно не включать в ядро
статически, поскольку это вещи приходяще-уходящие, а
перекомпилировать каждый раз из-за этого ядро непрактично. Кстати,
так как у нас будет использоваться удаленое соединение, необходимо
так же включить Point-to-Point Protocol (ppp).
Осталось подготовить irda-tools. Можно использовать
дистрибутивный пакет, а можно скачать исходники новой версии и
собрать бинарный пакет самостоятельно. Собирается пакет без особых
проблем. Единственный момент, который тут надо упомянуть — это
то, что для ядер ветки 2.6 необходимо использовать irda-tools версии
0.9.16 и выше.
Теперь осталось только запустить и настроить irattach:
[root@host:~]# irattach /dev/ttyS1 -d tekram
-s
Включаем ик-порт на телефоне и кладем его рядом (на
расстоянии 5—50 см) с ик-адаптером. Через некоторое время (до 5
секунд) на адаптере начнет помаргивать зелеенький светодиод. Телефон
обнаружился. Это видно так:
[root@host:~]# cat /proc/net/irda/discovery IrLMP:
Discovery log:
nickname: ALCATEL OT535, hint: 0xb125,
saddr: 0xcce64403, daddr: 0x74d747e9
Если этого не произошло, значит какой-то этап не
сделан правильно. У меня такое было при переезде с ядра 2.4.18 на
2.6.3, когда, как оказалось позже, надо было обновить irda-tools,
пакет которого стал называться к этому времени irda-utils.
Казалось бы все — можно настраивать почти
обычное удаленое соединение (у меня подключение к BeeLine; МТС и
Мегафон настраиваются аналогично, по информации с сайта в
соответствующем разделе).
Файл /etc/ppp/chap-secrets: # Secrets for authentication using CHAP
# client server secret IP addresses
beeline * beeline *
/etc/ppp/peers/beeline:
connect "/usr/sbin/chat -e -v -f /etc/ppp/chat-beeline"
disconnect "/usr/sbin/chat -e -v -f
/etc/ppp/chat-disconnect-gprs"
ipparam beeline
user beeline
nodetach
noauth
/dev/ircomm0
# 38400
lock
noipdefault
defaultroute
usepeerdns
nocrtscts
local
novj
novjccomp
# nopcomp
# noaccomp
asyncmap 20a0000
escape ff
debug kdebug 255
/etc/ppp/chat-beeline:
ABORT BUSY
ABORT VOICE
ABORT DELAYED
ABORT 'NO ANSWER'
ABORT 'NO CARRIER'
ABORT 'NO DIALTONE'
ABORT 'NO DIAL TONE'
#SAY '\n+ resetting modem\n'
'' ATZ
OK-ATZ-OK 'ATF1'
#SAY '\n+ sending initials\n'
OK 'AT+CGATT=0'
#SAY '\n'
OK 'ATV1E1&D2&C1&K3S0=0S7=255'
#SAY '\n+ configuring APN\n'
OK 'AT+CGDCONT=1,"IP","internet.beeline.ru"'
OK 'AT+CGQREQ=1,0,0,0,0,0'
OK 'AT+CGQMIN=1,0,0,0,0,0'
#SAY '\n+ calling service\n'
TIMEOUT 60
OK 'ATDT*99***1#'
#SAY '\n+ waiting connection\n'
CONNECT ''
#SAY '\n+ starting connection\n\n'
/etc/ppp/chat-disconnect-gprs:
ABORT BUSY
ABORT ERROR
ABORT 'NO DIALTONE'
TIMEOUT 30
'' '+++\c'
#SAY '\n+ sending break\n'
'' 'ATH'
#SAY '\n+ dropping data connection\n'
OK-AT-OK ATZ
#OK 'AT+CGATT=0'
#SAY '\n+ disconnecting from GPRS\n'
OK-AT-OK '\c'
#SAY '\n+ disconnected\n'
Теоретически, этого достаточно, чтобы, при
включенном пакете GPRS-услуг на BeeLine, пользоваться
GPRS-интернетом.
[root@host:~]$ pppd call beeline
Однако, практика оказалась несколько не столь радужной.
Так уж получилось, что сотовые телефоны Alcatel 535
и 735 рассчитаны на работу с ик-адаптерами версии 2.0 (USB Tekram
IRmate IR-410 и аналогичными), а не 1.1 (который 210). И вот…
Соединение установилось, и заткнулось.
Как бы сильно того мне не хотелось, «что и как»
пришлось экспериментальным путем выяснять в Windows.
Там-то это оказалось просто: чтобы телефон
заработал нормально, необходимо, дважды кликнув по иконке
ик-адаптера в трее, на вкладке «Режимы» найти параметр «Ограничить
скорость ИК-соединения» и выставить его в 38,4 кбит/сек.
Где это указать в Linux? Недельный поиск в Google,
чтение документации по IrDA, просмотр исходников — ничего не
дало. Пока, однажды, на одном из форумов, посвященом мобильникам, не
был дан совет выполнить перед запуском irattach такую вот команду:
[root@host:~]# echo 38400 >
/proc/sys/net/irda/max_baud_rate
Посмотрев, что же там записано по умолчанию, я
немножко так удивился: стояло даже не 115,2 кбит/сек, а 16
Мбит/сек!!! Вот это я понимаю, вот это скорости!
Как бы то ни было, записав в эту переменную нужное
мне ограничение в 38400, случилось чудо! Все прекрасно заработало!
Вот с тех самых пор, с холодного зимнего 10-го
январьского вечера 2004 года и появился дома в Linux интернет.
А чтобы не набирать эту команду каждый раз при
загрузке, добавил ее скрипт /etc/init.d/irda в секцию start перед
вызовом irattach.
PS: Все вышеизложенное справедливо практически для
всех сотовых телефонов, за исключением той самой неполной
совместимости по версии протокола IrDA.
Автор: Genie
Источник: www.nixp.ru
|