Ключевые слова:gprs, mobile, linux, bluetooth, ppp, (найти похожие документы)
From: Alex Ott <ott@altlinux.ru.>
Date: Mon, 12 Mar 2005 18:21:07 +0000 (UTC)
Subject: Как быстро настроить Internet over GPRS на Linux + Siemens S55 + Bluetooth
Все началось с того, что дома у меня плохая телефонная линия, которую не
видит мой модем серии Eline на 57.6kbit (кроме модема ее не видели еще
несколько моделей телефонов). Кабель в квартиру мне тоже не светил, поэтому
было решено попытать счастья со связью через мобильный телефон. В рамках
планового апгрейда телефона, был закуплен Siemens S55 -- в качестве решающих
факторов было наличие голубого зуба (bluetooth), irda, j2me, ну и конечно
поддержки GPRS. Оператором сотовой связи является Beeline.
Со стороны компьютера для общения с телефоном использовался Bluetooth USB
Adapter Tekram TM-300. В качестве операционной системы используется
ALTLinux Master 2.2, который раз в неделю обновляется из Sisyphus (поскольку
я являюсь одним из разработчиков данного дистрибутива). Использовалось ядро
Linux 2.4.22 (сборка 2.4.22-std-up-alt13).
Сначала я приступил к настройке bluetooth на Linux. Для работы с ним, в
систему были установлены пакеты libbluez 2.4, bluez-sdp 1.5, bluez-pan 1.1,
bluez-hciemu 1.0, bluez-utils 2.3. После изучения доступной документации,
началась настройка:
1. В /etc/modules.conf было добавлены строки, которые подключают модули
поддержки bluetooth и
alias net-pf-31 bluez
alias tty-ldisc-15 hci_uart
alias bt-proto-0 l2cap
alias bt-proto-2 sco
alias bt-proto-3 rfcomm
alias bt-proto-5 bnep
2. Были внесены изменения в /etc/bluetooth/hcid.conf, чтобы общение по
bluetooth шифровалось, а также была указана программа, которая по запросу
выдавала pin-код телефону. Это была директива pin_helper в разделе
options и она стала выглядеть следующим образом:
pin_helper /etc/bluetooth/bluepin;
3. Был создан сам файл /etc/bluetooth/bluepin следующего содержания:
#/bin/sh
echo "PIN:00"
4. Затем было протестирована работа USB Bluetooth адаптера. С помощью
утилиты hciconfig, был получен список bluetooth устройств (в моем случае
это был hci0).
5. Затем было произведено сканирование окружающей среды на предмет наличия
bluetooth устройств:
root@flash:/\>hcitool scan
Scanning ...
00:01:E3:70:E0:AF OttAlex
это и был мой телефон.
6. Теперь надо было убедиться в том, что телефон поддерживает dial-up
networking, что было и сделано с помощью команды:
root@flash:/\>sdptool search DUN
Inquiring ...
Searching for DUN on 00:01:E3:70:E0:AF ...
Service Name: Dial-up networking
Service RecHandle: 0x11103
Service Class ID List:
"Dialup Networking" (0x1103)
"Generic Networking" (0x1201)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 1
Language Base Attr List:
code_ISO639: 0x656e
encoding: 0x6a
base_offset: 0x100
Profile Descriptor List:
"Dialup Networking" (0x1103)
Version: 0x0100
Аналогичным образом можно получить информацию о том, какие сервисы
поддерживает телефон с помощью команды sdptool browse
7. И протестируем подключение к телефону с помощью l2ping
root@flash:/\>l2ping 00:01:E3:70:E0:AF
Ping: 00:01:E3:70:E0:AF from 00:0A:94:00:03:EC (data size 20) ...
0 bytes from 00:01:E3:70:E0:AF id 200 time 36.57ms
0 bytes from 00:01:E3:70:E0:AF id 201 time 31.55ms
.............
5 sent, 5 received, 0% loss
8. Теперь можно подключиться к телефону. Это делается через rfcomm. Для
этого используется команда вида:
root@flash:/\>rfcomm bind 0 00:01:E3:70:E0:AF 1
которая заставляет подключить устройство 0 к bluetooth устройству
00:01:E3:70:E0:AF к первому каналу.
Можно проверить подключение с помощью команды rfcomm show.
В том случае, если у вас нет файлов устройств /dev/rfcomm*, то вам
необходимо их создать с помощью команды вида:
mknod /dev/rfcomm0 c 216 0
у меня они уже были созданы при установке системы.
10. Проверяем работу подключения с помощью minicom. Запускаем его,
настраиваем на работу с /dev/rfcomm0 вместо /dev/modem и пробуем набрать
команду:
ATDT+79031234567
вместо 1234567 я указал свой номер, и телефон начал звонить показывая, что я
вызываю себя :-)
11. Теперь приступаем к настройке pppd.
Создаем файл /etc/ppp/peers/gprs следующего содержания
/dev/rfcomm0 57600
connect '/usr/sbin/chat -v -f /etc/ppp/chat/gprs'
noauth
defaultroute
lock
debug
novjccomp
nopcomp
noaccomp
nodeflate
novj
nobsdcomp
default-asyncmap
ipcp-accept-local
ipcp-accept-remote
usepeerdns
user beeline
nodetach
При этом отключается всякое сжатие, как указано в рекомендациях сервисной
службы beeline, и не происходит отключение от управляющего терминала, так
что pppd можно остановить с помощью Ctrl-C
В файл /etc/ppp/chat/gprs записываем команды /usr/sbin/chat:
TIMEOUT 5
ECHO ON
ABORT '\nBUSY\r'
ABORT '\nERROR\r'
ABORT '\nNO ANSWER\r'
ABORT '\nNO CARRIER\r'
ABORT '\nNO DIALTONE\r'
ABORT '\nRINGING\r\n\r\nRINGING\r'
'' \rAT
TIMEOUT 12
OK ATH
OK ATE1
OK AT+CGDCONT=1,"IP","internet.beeline.ru"
OK ATD*99***1#
CONNECT
И в файл /etc/ppp/pap-secrets добавляем строку:
beeline ppp0 "beeline"
и все, можно пробовать подключиться к интернету с помощью команды
pppd call gprs
запущенной из под пользователя root
12. Дополнительная настройка
в каталоги /etc/ppp/ip-up.d и /etc/ppp/ip-down.d можно поместить скрипты,
которые будут запускаться при поднятии и закрытии соединения. У меня это
команды, которые запускают и останавливают fetchmail.
Для поддержки только DUN модули sco и bnep не нужны
модуль rfcomm надо собрать с поддержкой rfcomm tty, иначе
по крайней мере у меня rfcomm не работает.
А нельзя ли разработать какой то deb пакет (в окнах есть же программы от провайдеров), а то у меня чтото ни как не получается выход. Комп с телефоном соединяется даже делает попытку выхода в интернет, но обрывает: "Нет подписки на услуги связи". Хотя в windowse интернет есть. Runtu+Nokia6151+Bluetooth.