Jun
16
Bluetooth-модем для GPRS в ОС Linux | 16 June 2007, 17:00

Bluetooth – оно только с виду просто синяя лампочка мигает ;), а на самом деле тут сеть проложена… БЕСПРОВОДНАЯ!

Термины:

  • HCI(Host Controller Interface) – интерфейс хост-контроллера, низкоуровневый интрефейс доступа к аппаратно-програмным средствам Bluetooth, включает в себя набор команд управления радиосвязью, передачи данных, состоянии канала и т.п.
  • L2CAP(Logical Link Control and Adaptation Protocol) – протокол управления и адаптации логической связью, является связующим звеном между низкоуровневым HCI и протоколами верхнего уровня(такими как RFCOMM, TSC BIN). Отсюда(имхо) – команда l2ping, осуществляющая пинг bluetooth-устройства
  • RFCOMM – протокол, обеспечивающий эмуляцию последовательного порта (COM + RS232C) через L2CAP, через него уже работают сервисы более высокого уровня, такие как OBEX, DUN, A2DP и т.п.

Итак, имеется:

  • коммуникатор Eten m500+ с операционной системой Windows Mobile 5.0
  • ОС на компутере OpenSuse 10.2
  • компутер с блютус-донглом или встроенным блютус

Особенностью ситуации является то что Bluetooth-профиль Dial-up Networking(DUN) в WM5 а именно он используется телефоном для того чтобы работать как Bluetooth-модем. И ОС нестандартная ;)

В статье была показана настройка коммуникатора для работы с интернетом через GPRS, в этой же я хочу показать как это можно использовать для получения доступа в интернет из ОС Linux.

1. Установка Bluetooth-стека

Должен быть установлен Bluez – Bluetooth-стек для Linux. По умолчанию в OpenSuse 10.2 он уже установлен. Скачать его можно с официального сайта проекта http://www.bluez.org/download.html (исходники) или поставить из rpm. Будут нужны следующие пакеты:

  • bluez-libs
  • bluez-utils
  • bluez-firmware
  • bluez-hcidump

После того как стек установлен можно переходить непосредственно к настройке, включаем блютус-адаптер и вперед.

[singlepic id=21 mode=watermark float=center]

2. Настройка Bluetooth-стека Bluez и обнаружение коммуникатора

Начнем с настройка демона hci. Для этого необходимо отредактировать файл
/etc/bluetooth/hcid.conf:

# kate /etc/bluetooth/hcid.conf

Меняем в этом файле в разделе Default link mode:

# Default link mode

# none – no specific policy

# accept – always accept incoming connections

# master – become master on incoming connections,

# deny role switch on outgoing connections

lm accept;

последнюю строку на

lm accept, master

[singlepic id=22 w=500 mode=watermark float=center]

Это необходимо для того, чтобы наше устройство становилось главным при Bluetooth-соединении.

Теперь можно установить дефолтный пароль на соединение, например “1234″.

[singlepic id=23 w=500 mode=watermark float=center]

При попытке коннекта от устройств можно встретить и запрос пароля.

[singlepic id=30 mode=watermark float=center]

Посмотрим на характеристики блютус-адаптера набрав

# hciconfig -a     #просмотр информациио блютусе на ПК

и поищем наш коммуникатор ;)

# hcitool scan     #ищем блютус-девайсы вокруг

В результате выполнения команд можно увидеть примерно такое

[singlepic id=31 w=500 mode=watermark float=center]

Итак, после сканирования стал известен MAC-адрес и название коммуникатора. Теперь проверим, что он пингуется, набрав:

# l2ping 00:0e:f6:00:80:e9

и видим:

[singlepic id=32 w=500 mode=watermark float=center]

Так как пинг проходит успешно, то переходим к следующему пункту. :)

3.Соединение коммуникатора и ПК

Воспользовавшись KBluetooth(в среде KDE) также можно искать устройства, просмотреть их можно, например, в Konqueror.

[singlepic id=33 w=500 mode=watermark float=center]

Как известно, для реализации обмена между Bluetooth-устройствами используется последовательный протокол передачи данных, реализованный через виртуальные COM-порты устройств. В тонкости углубляться не буду, но главное – на устройстве каждый сервис(будь то A2DP, передача файлов или что-нить еще) работает через отдельный COM-порт, закрепленный за ним в настройках стека. Количество портов может варьироватся, их номера для одинаковых сервисов на разных устройствах, в общем случае, различны. Кликнув на устройство в окне Konquerora можно просмотреть доступные сервисы. Для сравнения я рассматриваю два случая – мой коммуникатор на WM5 и обычный телефон SonyEricsson K750i.

Просмотр сервисов для коммуникатора на WM5

[singlepic id=34 w=500 mode=watermark float=center]

Как видно, сервисов доступно достаточно много. Однако, DUN-профиль среди них отсутствует.

Примечание: для просмотра сервисов телефона можно воспользоваться командой sdptool browse, но с данным коммуникатором сервисы не были обнаружены по неизвестной причине.

Но в данном случае нас будет интерсовать созданный на коммуникаторе COM-порт для входящих подключений(в режиме “server”, т.е. ведущий). При его создании(которое описано в предыдущей статье) ему был присвоен номер #9. Итак для пеализации мечты об интернете нужно всего лишь соединить коммуникатор и ПК через этот порт, а потом звонить на коммуникатор, считая что на нем работает модем. Ну, попробуем. ;) Попытка кликнуть на COM9 привела к появлению вот такого сообщения.

[singlepic id=36 w=500 mode=watermark float=center]

Компутер предлагает соединиться соединить наш COM-порт #9 и показывает строку выполнения команды, если ее рассмотреть подробно то будут видны такие как:

‘Open rfcomm0….channel = 4′

rfcomm0 – устройство /dev/rfcommX – радиоинтерфейс блютус, обеспечивает работу через протокол RFCOMM;

4 – номер COM-порта со стороны компутера, его надо запомнить.

Просмотр сервисов для телефона SonyEricsson K750i

[singlepic id=35 w=500 mode=watermark float=center]

А тут DUN-профиль уже есть =) Поэтому запоминаем именно его номер COM-порта. ;) Это можно сделать способом, аналогичным показанному в примере для коммуникатора.

[singlepic id=37 mode=watermark float=center]

А можно с помощью команды:

# sdptool browse

[singlepic id=20 w=500 mode=watermark float=center]

Как видно из скриншотов, DUN-профилю телефона соотвествует COM-порта номер 1.Дальнейшие действия идентичны для этих устройств, поэтому привожу их с учетом номера порта для коммуникатора. Теперь, зная номер виртуального COM-порта на компе, на который цепляется созданный нами на КПК COM-порт, настраиваем соединение между ними .

Для начала проверяем есть ли другие rfcomm:

# ls/dev/rfcomm*

/bin/ls: /dev/rfcomm*:Нет такого файла или каталога

Так как ничего не найдено, то регистрируем новый rfcomm с первым сводбодным номером – т.е. “0″, номер канала подставляем 4, это полученное ранее число. И проверяем канал на работоспособность(вторая команда).

# rfcomm bind rfcomm0 00:0e:f6:00:80:e9 4

# rfcomm show rfcomm0

rfcomm0: 00:0e:f6:00:80:e9 channel 4 clean

Слово clean, в выводе результатов команды, показывает что порт свободен :)

[singlepic id=38 w=500 mode=watermark float=center]

Осталось отредактировать параметры соединения по COM-порту, чтобы он автоматически соединялся с нужными параметрами, для этого отредактируем конфиг
/etc/bluetooth/rfcomm.conf:

# kate /etc/bluetooth/rfcomm.conf

В конфигурационном файле исправляем:

rfcomm0 {

# Automatically bind the device at startup

bind no;

меняем последнюю строку на:

bind yes;

а ниже указываем также BD-адрес нашего телефона.

Примечание BD-адрес, это вот что:

# Bluetooth address of the device

device 00:0e:f6:00:80:e9

и меняем номер канала(на 4)

# RFCOMM channel for the connection

channel 4;

Вот что получилось :)

[singlepic id=39 w=500 mode=watermark float=center]

Теперь каждый раз при запуске Bluetooth будет происходить автоматическая привязка к Bluetooth ПК( через к rfcomm0) к порту нашего мобильного телефона.

4. Настройка модема

Ну чтож, осталось сделать финальный шаг – настроить параметры которые будем посылать модему на коммуникаторе!

Настраиваем демон pppd, чтобы его можно было запускать простому пользователю – установливаем бит SUID:

# chmod u+s /usr/sbin/pppd

# ls -l /usr/sbin/pppd

-rwsr-xr-x 1 root dialout 291796 2006-04-23 06:38 /usr/sbin/pppd

В консоли установленный бит SUID показан как смена фона у файла и аттрибут s при выводе команды ls.

[singlepic id=24 w=500 mode=watermark float=center]

Осталось настроить звонилку ;)

В качестве звонилки я решила использовать старую, простую консольную программу
wvdial.
[singlepic id=25 w=500 mode=watermark float=center]

Скачать ее сборку 1.53 под мандриву + библиотеку для работы с ней можно у меня на сайте в разделе Downloads, или вот здесь:

wvdial-1.53 wvdial-1.53-25447cl.i386.rpm
libwvstreams libwvstreams3.7-3.70-3mdk.i586.rpm

Установку выполняем традиционно с помощью команды rpm или через YaST.

# rpm -Uhv libwvstreams3.7-3.70-3mdk.i586.rpm

# rpm -Uhv wvdial-1.53-25447cl.i386.rpm

Настройки программы находятся в файле /etc/wvdial.conf, впишем туда параметры GPRS.

# kate /etc/wvdial.conf

ВНИМАНИЕ!!! При первом открытии все параметры закомментированы(в начале значок “#”),
поэтому их надо обязательно не забыть раскомментировать!!! ;) Примерный вид для Питерского МТС будет такой:

[Dialer Defaults]

Modem = /dev/rfcomm0    #наш COM-порт

Baud = 115200    #скорость

Init1 = AT+CGDCONT=1,”IP”,”internet.mts.ru”    #строка инициализации модема

#(последний параметр(APN) отличается для различных операторов)

Phone = *99#     #куда звонить(может отличатся для различных операторов)

Username = mts     #логин(может отличатся для различных операторов)

Password = mts     #пароль(может отличатся для различных операторов)

Ask Password = 0

Dial Command = ATDT

Stupid Mode = 1

Compuserve = 0

Force Address =

Idle Seconds = 300

DialMessage1 =

DialMessage2 =

ISDN = 0

Auto DNS = 1

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

[singlepic id=26 w=500 mode=watermark float=center]

Теперь нужно так изменить права запуска wvdial, чтобы его можно было использовать простому пользователю. Для этого можно использовать несколько способов, я предлагаю простую установку бита SUID:

# chmod u+s /usr/bin/wvdial

[singlepic id=27 w=500 mode=watermark float=center]

Запускаем wvdial…

$ wvdial

… и смотрим как происходит коннект :))) …

[singlepic id=28 w=500 mode=watermark float=center]

.. и наслаждаемся интернетом :)))
А вот они – Пинги ;)
[singlepic id=29 w=500 mode=watermark float=center]

При написании статьи были использованы следующие источники:

16 June 2007, 17:00  
Рубрика: html-марание, softoкопательство  |  
Метки:   |  

Листинги патчей ;)


Хотите пропатчить? ;)

Вы должны быть залогинены что бы оставить патч.


  karina ©
2007-2010