Показаны сообщения с ярлыком Asus wl-500gP. Показать все сообщения
Показаны сообщения с ярлыком Asus wl-500gP. Показать все сообщения

воскресенье, 31 января 2010 г.

Настройка раздачи интернета через bluetooth и не только.

Захотелось мне использовать свой телефон SE k750i в качестве пульта управления. Чтобы можно было слушать радио на роутере и рулить этим процессом не включая ББ. Ну это пока в будущем, а на данный момент я настроил доступ к роутеру и в инет с телефона с помощью bluetooth.
О том, как я это сделал и посвящена эта заметка.

В наличии у меня был телефон SE k750i и два брелка (Gembird BTD-002 и Defender (модель не знаю)).

Оба брелка, до этого работали в ББ и прекрасно справлялись со своей работой. Лично мне было интересно, заработают ли они в моем роутере (Asus wl-500gP). Сразу скажу, что оба брелка заработали.

При настройке я пользовался Gembird'ом, а потом поставил Defender. Gembird же вернулся на свое место в ББ. Прежде, чем перейти к подробному описанию всего процесса, ещё несколько фотографий брелка:

Ну а теперь к делу.
Но прежде, не большое, но важное замечание. Судя по сообщениям с форума wl500g.info роутер не любит работать с USB 1.1 устройствами через USB-HUB 2.0. Поэтому рекомендуется USB 1.1 брелки подключать непосредственно в роутер, либо через USB-HUB 1.1. Ну или можно поискать USB 2.0 брелок, вполне возможно, что он заработает через USB-HUB 2.0, но гарантировать это я не буду, потому как не проверял.
Лично у меня таких проблем не возникло, потому как мой роутер проапгрейжен по полной программе: ОЗУ: 128 Мб плюс 2+2 USB-порта и ещё COM-порт в запасе. Кроме того, роутер прошит прошивкой от энтузиастов на данный момент времени 1.9.2.7-d-r740 хотя есть свежие прошивки.

1. Для работы будет использоваться комплект утилит bluez. Но как выяснилось  не все версии bluez одинаково полезны. Нужно ставить именно те, что указываю я:
bluez-hcidump_1.40-1_mipsel.ipk
bluez-libs_3.17-1_mipsel.ipk
bluez-utils_3.17-1_mipsel.ipk
dbus_1.1.1-3_mipsel.ipk

Их можно найти на форуме  wl500g.info
Находим указанные версии утилит и скачиваем их например в /opt/temp
Если другие версии этих утилит ещё не ставились, то ставим их так:
ipkg install /opt/temp/dbus_1.1.1-3_mipsel.ipk
ipkg install /opt/temp/bluez-libs_3.17-1_mipsel.ipk
ipkg install /opt/temp/bluez-utils_3.17-1_mipsel.ipk
ipkg install /opt/temp/bluez-hcidump_1.40-1_mipsel.ipk

 Если же, Вы уже пытались ставить другие(свежие) версии, то указываем ключ для установки более старых версий программ:
ipkg install -force-downgrade /opt/temp/dbus_1.1.1-3_mipsel.ipk
ipkg install -force-downgrade /opt/temp/bluez-libs_3.17-1_mipsel.ipk
ipkg install -force-downgrade /opt/temp/bluez-utils_3.17-1_mipsel.ipk
ipkg install -force-downgrade /opt/temp/bluez-hcidump_1.40-1_mipsel.ipk


2. Исправляем конфигурационные файлы, в качестве пользователя для запуска указываем admin:
/opt/etc/dbus-1/system.conf 
<!-- Run as special user -->
<user>admin</user>

 

/opt/etc/dbus-1/system.d/bluetooth.conf 
  <policy user="admin"> 

/opt/etc/bluetooth/hcid.conf  приводим к следующему виду:
## HCI daemon configuration file.
#

# HCId options
options {

  # Automatically initialize new devices
  autoinit yes;

  # Security Manager mode
  # none - Security manager disabled
  # auto - Use local PIN for incoming connections
  # user - Always ask user for a PIN
  #
  security auto;

  # Pairing mode
  # none - Pairing disabled
  # multi - Allow pairing with already paired devices
  # once - Pair once and deny successive attempts
  pairing multi;

  # Default PIN code for incoming connections
  passkey "456789";

}

# Default settings for HCI devices
device {

  # Local device name
  # %d - device id
  # %h - host name
  name "BlueZ (%h)";

  # Local device class
  class 0x000100;

  # Default packet type
  #pkt_type DH1,DM1,HV1;

  # Inquiry and Page scan
  iscan enable; pscan enable;

  # 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,master;

  # Default link policy
  # none - no specific policy
  # rswitch - allow role switch
  # hold - allow hold mode
  # sniff - allow sniff mode
  # park - allow park mode
  lp rswitch,hold,sniff,park;
}

 т.е. меняется:
   security auto; - чтобы можно подключаться при помощи ПИНа.
   passkey "456789"; - указываем сам ПИН.
   name "BlueZ (%h)"; - указываем имя, под которым будет виден наш роутер в bluetooth сети. Можно указать своё имя.
 class 0x000100; - Я не менял, но мне попадалась рекомендация установить значение 0x020100 - «Класс службы: Сеть» и «Класс устройства: Компьютер, без категории». Но у меня и со значением по умолчанию всё работает.
  lm accept,master; - добавляем ",master" если не было.

3. Скачиваем дополнительные модули. Модули нужно брать для своей прошивки. Лично я взял со странички с прошивкой от энтузиастов версию для своей прошивки modules-1.9.2.7-d-r740.tgz
Распаковываем все или только нужные модули.
Лично я распаковал все модули в каталог: /opt/lib/modules в результате у меня появился каталог 2.4.37.6 содержаший все доступные модули для моей прошивки.
Если нет желания/возможности распаковать все модули, то можно взять только нужные, а именно:
bluez.o
bnep.o
crc32.o
hci_usb.o
l2cap.o
rfcomm.o
sco.o

 

Создаем скрипт-загрузчик модулей /opt/etc/bluetooth/loadmodules следующего содержания:
#!/bin/sh

modprobe crc32
modprobe bluez
modprobe hci_usb
modprobe l2cap
#modprobe rfcomm  этот модуль мне не нужен
modprobe bnep
#modprobe sco модуль для передачи звука через bluetooth мне тоже пока не нужен

 
Модули, которые мне не нужны я закомментарил. Если Вы распаковали модули в место отличное от /opt/lib/modules, то нужно указать полные пути к загружаемым модулям.

Вызов скрипта-загрузчика вставляем в post-mount:
. . . 
# грузим модули для работы с bluetooth
/opt/etc/bluetooth/loadmodules
. . .

После изменения post-mount, не забываем сделать
flashfs save && flashfs commit && flashfs enable
Чтобы изменения в post-mount не потерялись после перегрузки. 

4. Приводим в порядок файл запуска DBus - /opt/etc/init.d/S20dbus
Во-первых он должен быть исполняемым. Во-вторых убираем (или комментируем) из него проверку существования пользователя messagebus. И в-третьих меняем пользователя, под которым будет работать демон DBus. Вот содержимое моего скрипта запуска DBus:
#!/bin/sh
#OPTWARE_TARGET=ddwrt
# -*- coding: utf-8 -*-
# Debian init.d script for D-BUS
# Copyright Вc 2003 Colin Walters <walters@debian.org>

PATH=/sbin:/bin:/usr/bin:/usr/sbin:/opt/bin:/opt/sbin

set -e

DAEMON=/opt/bin/dbus-daemon
NAME=dbus
DAEMONUSER=admin
PIDDIR=/opt/var/run/dbus
PIDFILE=$PIDDIR/pid
DESC="system message bus"

test -x $DAEMON || exit 0

# Source defaults file; edit that file to configure this script.
ENABLED=1
PARAMS=""
if [ -e /opt/etc/default/dbus ]; then
   . /opt/etc/default/dbus
fi

test "$ENABLED" != "0" || exit 0

start_it_up()
{
   if [ ! -d $PIDDIR ]; then
     mkdir -p $PIDDIR
     chown $DAEMONUSER $PIDDIR
     chgrp $DAEMONUSER $PIDDIR
   fi
   if [ -e $PIDFILE ]; then
     echo "$DESC already started; not starting."
   else
     echo -n "Starting $DESC: "
     ${DAEMON} --system $PARAMS
     echo "$NAME."
   fi
}

shut_it_down()
{
   echo -n "Stopping $DESC: "
   if [ -e $PIDFILE ]; then
     kill `cat $PIDFILE`
   else
     killall ${DAEMON}
   fi
   echo "$NAME."
   rm -f $PIDFILE
}

case "$1" in
   start)
     start_it_up
     ;;
   stop)
     shut_it_down
     ;;
   restart|force-reload)
     shut_it_down
     sleep 1
     start_it_up
     ;;
   *)
     echo "Usage: /opt/etc/init.d/$NAME {start|stop|restart|force-reload}" >&2
     exit 1
     ;;
esac

exit 0

Файл конфигурации DBus, лежащий по пути /opt/etc/default/dbus я не менял. 

5. Приводим в порядок файл запуска демона hci /opt/etc/init.d/bluetooth
Во-первых переименовываем его в S40bluetooth и делаем исполняемым. Во-вторых добавляем в переменную PATH пути для /opt/bin и /opt/sbin. А в-третьих можно добавить вариант работы скрипта для режима restart. После этих доработок, мой скрипт выглядит так:
#!/bin/sh

#
# Start/stop the Bluetooth daemons
#

set -e

PATH=/sbin:/bin:/usr/sbin:/usr/bin:/opt/sbin:/opt/bin
NAME=bluetooth
DESC="Bluetooth subsystem"

DAEMON_NAME=hcid
HID2HCI_NAME=hid2hci

DAEMON_EXEC="`which $DAEMON_NAME || true`"
HID2HCI_EXEC="`which $HID2HCI_NAME || true`"

DAEMON_ENABLE=true
HID2HCI_ENABLE=false

DAEMON_CONFIG="/opt/etc/bluetooth/hcid.conf"

[ -e /etc/default/bluetooth ] && . /etc/default/bluetooth

case "$1" in
   start)
     echo -n "Starting $DESC:"
     if $DAEMON_ENABLE && [ -x "$DAEMON_EXEC" ] && [ -f "$DAEMON_CONFIG" ] ; then
        $DAEMON_EXEC -s -f $DAEMON_CONFIG
        echo -n " $DAEMON_NAME"
     fi
     if $HID2HCI_ENABLE && [ -x "$HID2HCI_EXEC" ] ; then
        $HID2HCI_EXEC --tohci > /dev/null 2>&1 || true
        echo -n " $HID2HCI_NAME"
     fi
     echo "."
     ;;
   stop)
     echo -n "Stopping $DESC:"
     killall $DAEMON_NAME > /dev/null 2>&1 || true
     echo -n " $DAEMON_NAME"
     echo "."
     ;;
   restart)
     echo -n "Stopping $DESC:"
     killall $DAEMON_NAME > /dev/null 2>&1 || true
     echo -n " $DAEMON_NAME"
     echo "."

     echo -n "Starting $DESC:"
     if $DAEMON_ENABLE && [ -x "$DAEMON_EXEC" ] && [ -f "$DAEMON_CONFIG" ] ; then
       $DAEMON_EXEC -s -f $DAEMON_CONFIG
       echo -n " $DAEMON_NAME"
     fi
     if $HID2HCI_ENABLE && [ -x "$HID2HCI_EXEC" ] ; then
       $HID2HCI_EXEC --tohci > /dev/null 2>&1 || true
       echo -n " $HID2HCI_NAME"
     fi
     echo "."
     ;;
   *)
     N=/etc/init.d/$NAME
     echo "Usage: $N {start|stop|restart}" >&2
     exit 1
     ;;
esac

exit 0



Чтобы работал этот скрипт нужно поставить утилиту which. Для этого делаем:
ipkg install which 
  

Можно отредактировать файл конфигурации hci, который лежит в /opt/etc/default/bluetooth. Что не запускалась служба HID можно изменить значение HID2HCI_ENABLE=false
 
6. Создаем скрипт для запуска службы pand, которая будет принимать запросы от bluetooth устройств и поднимать связь с ними. Скрипт я назвал /opt/etc/init.d/S85mybt 
#!/bin/sh

NAME="MyBluetooth"

start() {
   echo "Starting $NAME... "
   /opt/bin/pand --listen --master --role NAP --devup /opt/etc/bluetooth/dev-up --devdown /opt/etc/bluetooth/dev-down
}

stop() {
   echo "Shutting down $NAME... "
   killall pand
}

case "$1" in
   start)
     start
     ;;
   stop)
     stop
     ;;
   restart)
     stop
     sleep 1
     start
     ;;
   *)
     echo "Usage: $0 (start|stop|restart)"
     exit 1
     ;;
esac
exit
0


Не забываем сделать его исполняемым.
Создаем скрипт который будет отрабатываться при поднятии соединения с bluetooth устройством /opt/etc/bluetooth/dev-up
#!/bin/sh

# $1 = имени интерфеса и равен bnep0 или точнее bnepx
# $2 = MAC подключающегося устройства
/usr/bin/logger -t $(basename $0) "started [$@]"

# файл, с разрешенными MAC
FILTER_MAC=/opt/etc/bluetooth/filter_mac
TESTS_MAC=$2

# проверяем наличие файла с разрешенными MAC
if [ -e $FILTER_MAC ]
then
   REZ="`cat $FILTER_MAC | grep -i $TESTS_MAC`"
   if [ -n "$REZ" ]
   then
   # разрешенный MAC, пускаем его в нашу сеть
   # /usr/bin/logger -t $(basename $0) "Good MAC [$@]"
     ifconfig $1 0.0.0.0
     brctl addif br0 $1
   else
     /usr/bin/logger -t $(basename $0) "The attention, forbidden MAC [$@]"
   fi
else
   # /usr/bin/logger -t $(basename $0) "Don't test MAC [$@]"
   ifconfig $1 0.0.0.0
   brctl addif br0 $1
fi

Делаем его исполняемым.

Создаем скрипт, который будет выполняться после разрыва соединения /opt/etc/bluetooth/dev-down 
#!/bin/sh
# $1 = имени интерфеса и равен bnep0 или точнее bnepx

/usr/bin/logger -t $(basename $0) "stoped [$@]"

Делаем его исполняемым. 

В принципе этот скрипт не особо нужен, поскольку ни чего полезного он не делает.
 

Можно ограничить доступ в вашу локальную сеть по MAC'у устройства с которого пытаются подключиться. Для этого нужно создать файл /opt/etc/bluetooth/filter_mac и заполнить его значениями MAC ваших устройств. Например так:
00:1B:59:53:4A:2C 
00:1B:59:53:7A:1C
Подсмотреть MAC, подключающегося устройства можно в System Log.
Там будут появляться строки примерно такого вида

19:04:17 31-01-2010 (notice|user|dev-up) dev-up: started [bnep0 00:1B:59:53:4A:2C]

Если же, ограничивать доступ по MAC Вы не собираетесь, то файл filter_mac создавать не нужно, а если уже создали, то удалите его.

7. В принципе, после этого можно вставить USB-Bluetooth брелок в роутер и перегрузиться. После загрузки можно пытаться подключаться.

8. Не обязательно, но лучше сделать. Была замечена неприятная особенность. При подключении/отключении происходит временное подвисание локальной сети за роутером. Связано это с перенастройкой бриджа(br0) при включении/исключении интерфейса bnep0,bnep1,... в/из бридж(а), при котором происходит изменение MAC br0 на MAC bnep0. Поскольку изменить MAC bnep0 на MAC br0, перед включением в бридж неполучалось, то осталось сделать наоборот, т.е. при загрузке роутера менять MAC br0 на MAC bluetooth брелка. Изменить MAC br0 можно как минимум двумя способами:
 1 - Менять MAC при загрузке роутера, например в скрипте post-boot или pre-boot;
 2 - Поменять MAC для интерфейса vlan0 в nvram.
Я выбрал первый вариант.
Для этого в скрипт post-boot я добавил следующие строки:

ifconfig vlan0 down
ifconfig vlan0 hw ether 00:11:67:5В:A9:75 <- MAC брелка (поменять на свой)
ifconfig vlan0 up

И сделал
flashfs save && flashfs commit && flashfs enable 
чтобы сохранить изменения. 

Для реализации второго варианта по идее нужно выполнить такую команду:
nvram set et0macaddr=00:11:67:5В:A9:75  <- MAC брелка (поменять на свой)
Но этот вариант я не проверял.
 

Узнать MAC брелка, можно вызвав ifconfig после установления связи:
ifconfig
bnep0 Link encap:Ethernet HWaddr 00:11:67:5В:A9:75
<- это MAC брелка
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:110 errors:0 dropped:0 overruns:0 frame:0
TX packets:352 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:7393 (7.2 KiB) TX bytes:263934 (257.7 KiB)

. . . 
 

Из замеченых минусов первого варианта. На мой взгляд, роутер стал грузиться дольше. Но я считаю, что это не существенный минус, поскольку я перегружаю роутер очень редко. До настройки bluetooth он у меня работал без перегрузки месяца два, а то и больше.

Собственно, по настройке роутера - это всё.

Что касается телефона. То там всё просто, хотя может и не очевидно.

Напоминаю, что у меня телефон SE k750i.

После того, как телефон спарился и соединился с роутером, в 

Меню->Параметры->Связь->Передача данных->Уч.записи данных  
появилась запись "BlueZ (IG...)"
 


 Потом идем в Меню->Параметры->Связь->Парам. Интернет->Параметры Java
и создаем профиль BT
 В качестве записи данных (подключ. через) в этом профиле задаем "BlueZ (IG...)"


 После этого можно использовать инет например в Opere:
 На этом пока все!!!

понедельник, 5 октября 2009 г.

Железная прокачка роутера ASUS wl-500gP

На выходных, а точнее 5 октября 2009 года, с другом провели железный upgrate роутера. Поскольку, профессия и работа друга неразрывно связана с пайкой электронных компонент, я полностью доверился его знаниям, опыту и рукам. И не ошибся. Вся работа по отпайке и припайке микросхем и всего остального была сделана на высшем уровне. А сделано было следующие:
1. Перепаяна память. Было 32 Мб, а стало 128 Мб.
2. Припаян двойной USB-разъем и разведены 2 USB порта.
3. Распаяна колодка для COM-порта и консоли.

Все операции производились в соответствии с руководством к действию.
Самые большие проблемы возникли с отпайкой старой памяти и распайкой колодки для COM-порта. Точнее это были не проблемы, а просто процедура отпайки заняла "очень" много времени. Я точно не засекал, ну наверно по минут 15 на микросхему. Причиной столь затянувшейся отпайки старых микросхем был тугоплавкий безсвинцовый припой, который использовался при пайке роутера.
При отпайке мы поступали следующим образом. Вначале, с помощью паяльника на ножки, с одной стороны микросхемы наносился обыкновенный припой, а потом эта сторона равномерно прогревалась феном при температуре 350 градусов. С одного края, микросхема поддевалась маленькой отверткой. Постепенно, без применения излишних усилий, вся сторона микросхемы отпаивалась и поднималась. Со второй стороной микросхемы поступали также, за исключением, того, что теперь микросхема поднималась не отверткой, а пинцетом.
Что касается колодки, то там очень долго пришлось греть отверстие для ПТВ-контакта, причем грели с двух сторон, с одной феном, с другой паяльником. С остальными контактами было попроще - хватило паяльника.

Все процедуры, по реализации данного апгрейта очень подробно священы на этом форуме.

Теперь фотографии.


 рис. 1. Планка DDR памяти на 512 Мб, послужившая донором и старые микросхемы памяти.
(при перепайке использованы микросхемы Hynix HY5DU121622CTP-D43. Планка б/у, куплена за 500р. Старые микросхемы имеют следующую маркировку: W9412G6CH-5.)



рис. 2. Плата роутера снизу.
(С нижней стороны запаян только резистор R43 в адресную линию A12.)



рис. 3. Этот самый резистор, только крупнее.
(22 Ом - взят с какой-то материнской платы. Немного крупнее, чем остальные, но встал нормально.) 



 
рис. 4. Плата роутера сверху, после всех модификаций.
(Здесь можно увидеть запаянную память (справа внизу), USB-разъем (сверху, между WAN и LAN разъемами), проводки идущие от USB-разъема к контролеру VIA VT6212L и колодку COM-порта и консоли (справа, над микросхемами памяти).)


 
рис. 5. Распаянная память.
(Конденсатор на 51 ногу не припаивали, вроде работает без ошибок, даже 300МГц.)


 
рис. 6. Распаянный USB-разъем.
(Разъем припаян снизу к самой плате и усиками к соседним WAN и LAN разъемам. Подтягивающие резисторы распаяны к ножкам USB-разъема. Питание взято от разъема питания роутера. Земля припаяна к соседнему WAN-разъему.)


 
рис. 7.  USB-контроллер, с подпаянными проводками.
(Эти проводки нужно бы закрепить клеем, чтобы не болтались.) 


 
рис. 8. Новый вид задней панели.
(Вырезано окошко под дополнительные USB-разъемы.) 




Кроме этого, был произведен upgrate световодов. На световоды был одет толстый, непрозрачный кембрик, с выпуском над световодом на 2-3 мм, так чтобы при сборке роутера кембрик упирался в плату роутера. Благодаря этому моду теперь роутер не сверкает как новогодняя елка.

Вот собственно и все.

четверг, 27 августа 2009 г.

Соединяет компоненты моей сети роутер Asus wl-500gP. Но на самом деле, это нечто большее, чем просто роутер. Фокус в том, что на него можно поставить практически настоящую Linux. А ещё, к нему можно подключать различные USB-устройства. Типа: флешки, винты, камеры, принтеры, звуковые карты, ...

Вообще, об этом роутере я узнал на благодаря форуму Олега. Почитав форум я решил, что это именно то, что мне нужно и с помощь него, я убъю побольше, чем два зайца. 

Итак, что делает сейчас этот роутер у меня:

  1. Предоставляет доступ в интернет моим компьютерам.
  2. Круглосуточно скачивает/раздает торренты.
  3. Работает исключительно тихо (точнее и роутер и модем - безшумны, шум издает ноутбучный винт, подключенный к роутеру. Конечно, если шумом можно назвать шум от современного ноутбучного винта).
  4. Благодаря роутера, я постепенно узнаю Linux.
  5. То, о чём сейчас я не вспомнил.

Дальнейшие заметки будут посвящены тому, как я добился указанной функциональности.

Несколько фоток, как это выглядит у меня: