четверг, 25 марта 2010 г.

Yota или аспекты настройки wimax в Ubuntu 9.10 на samsung nc10


Возникали у меня один раз некоторые трудности при запуске встроенного wimax модема от небезызвестной компании Yota™ на моем уютном нетбуке Samsung NC10 в ОС Ubuntu 9.10. Было это относительно давно, но инструкцию я на всякий случай сохранил.

Начал я за здравие по следующей инструкции. Цитирую полезное:

Установка.

Берем нужную библиотеку libusb (советую libusb 1.0.0 ибо она сама стабильная)
Ставим ее:

~$ tar xvjf libusb-1.0.0.tar.bz2
~$ cd libusb-1.0.0
~/libusb-1.0.0$ ./configure
~/libusb-1.0.0$ make
~/libusb-1.0.0$ sudo make install


Далее берем сами дрова. Берем их тут. (Опять же, из соображений стабильности лучше брать версию 0.1.0).
Ставим:

~$ tar zxvf madwimax-0.1.0.tar.gz
~$ cd madwimax-0.1.0
~/madwimax-0.1.0$ ./configure
~/madwimax-0.1.0$ make
~/madwimax-0.1.0$ sudo make install


По идее тут уже можно и запустить, что мы сейчас и попробуем:
~$ sudo /usr/local/madwimax/sbin/madwimax


Если пошла связь, то поздравляю, и переходим к пункту "окончательная допилка".

Однако, как показывает практика, очень часто люди сталкиваются с ошибкой
error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory


Устранение возможных ошибок и допилка.

Тогда выполняем следующую команду:

~$ ldd /usr/local/madwimax/sbin/madwimax
linux-gate.so.1 => (0xb7fc7000)
libusb-1.0.so.0 => not found
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f83000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e24000)
/lib/ld-linux.so.2 (0xb7fad000)


Видим, что драйвера wimax библиотеку libusb не видят. Поэтому делаем следующее:
Редактируем файл /etc/ld.so.conf.
Он должен состоять только из одной строчки
include /etc/ld.so.conf.d/*.conf

Дописываем перед этой строчкой еще одну, чтобы выглядело так:
/usr/local/lib
include /etc/ld.so.conf.d/*.conf


Затем обновляем это дело:

~$ sudo ldconfig

И вновь смотрим как будут вести себя дрова:

~$ ldd /usr/local/madwimax/sbin/madwimax
linux-gate.so.1 => (0xb8008000)
libusb-1.0.so.0 => /usr/local/lib/libusb-1.0.so.0 (0xb7fd0000)
libpthread.so.0 => /lib/tls/i686/cmov/libpthread.so.0 (0xb7f83000)
libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7e24000)
librt.so.1 => /lib/tls/i686/cmov/librt.so.1 (0xb7e4f000)
/lib/ld-linux.so.2 (0xb7fad000)


И видим, что все дрова видят. Теперь еще раз пробуем запускать:
~$ sudo /usr/local/madwimax/sbin/madwimax


Окончательная допилка.

Спасибо за это комьюнити Yota в жж.

После удачного запуска драйвера появится интерфейс wimax0 (или что-то в этом духе, это так и так отобразится при запуске дров: Allocated tap interface: wimax0 ), ну а терминал будет недоступен. Поэтому в следующем терминале останется сделать еще чуть-чуть:
~$ sudo ifconfig wimax0 up
~$ sudo dhclient wimax0


И теперь можно пользоваться интернетом. Правда есть один баг (цитирую):
Сегодня при тестировании обнаружил, что если после подключения некоторое время нет траффика, соединение обрывается и почему-то не восстанавливается. Помогает только перезапуск драйвера. Это, очевидно, баг, с ним будем бороться. Пока же можно просто что-нибудь все время пинговать, чтобы был траффик и соединение не обрывалось.

Ну, думаю, пинговать тот же ya.ru особого труда ни для кого сложности не составит.

Ну и на сладкое.

А теперь мой случай.

Однако на моем нетбуке эти дрова повели себя совершенно по-другому и выдали мне ошибку:
Could not find/open device

Весь вчерашний вечер я ломал себе мозг, что с этим делать. Перелопатил некоторое количество документации. И вот, наконец нашел решение.

Смотрим следующее. Команда lsusb отображает все USB устройства. Наш встроенный модем, как бы это не было парадоксально, к ним так же относится. Поэтому выполняем:
~$: lsusb
Bus 005 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 003 Device 002: ID 0a5c:2101 Broadcom Corp. A-Link BlueUsbA2 Bluetooth
Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 004: ID 0ac8:c326 Z-Star Microelectronics Corp.
Bus 001 Device 003: ID 04e8:6731 Samsung Electronics Co., Ltd
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub


Число 6731 в ID нам еще очень пригодится.
Далее займемся быдлокодингом.
Строчку

{ 0x04e8, 0x6731 },

вставим в файле ~/madwimax-0.1.0/src/wimax.c в массив
static usb_device_id_t wimax_dev_ids[] = {

Т.е. выглядеть это будет так:
Где-то в дебрях wimax.c:
/* list of all known devices */
static usb_device_id_t wimax_dev_ids[] = {
{ 0x04e8, 0x6761 },
{ 0x04e9, 0x6761 },
{ 0x04e8, 0x6731 },//это и есть ID встроенного модема
};

Ну а далее заново собираем madwimax.
Затем, на всякий случай правим файл /etc/udev/rules.d/z60_madwimax.rules чтобы выглядело так:

# udev rules file for madwimax supported devices
SUBSYSTEM!="usb|usb_device", GOTO="madwimax_rules_end"
ACTION!="add", GOTO="madwimax_rules_end"

ATTRS{idVendor}=="04e8", ATTRS{idProduct}=="6731", ATTR{bInterfaceNumber}=="01", RUN+="/bin/sh -c '/bin/echo -n $kernel > /sys/$devpath/driver/unbind'"
ATTRS{idVendor}=="04e9", ATTRS{idProduct}=="6731", ATTR{bInterfaceNumber}=="01", RUN+="/bin/sh -c '/bin/echo -n $kernel > /sys/$devpath/driver/unbind'"
ATTR{idVendor}=="04e8", ATTR{idProduct}=="6731", RUN+="/usr/local/madwimax/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"
ATTR{idVendor}=="04e9", ATTR{idProduct}=="6731", RUN+="/usr/local/madwimax/sbin/madwimax -qd --exact-device=$attr{busnum}/$attr{devnum}"

LABEL="madwimax_rules_end"


Т.е. меняем 6761 на 6731 и раскоментируем все строчки.
После этого у меня модем заскакал, как сивый мерин.

1 комментарий:

  1. Установил Ubuntu 10.04. Madwimax добавлен в этой версии в репозитарий. Установил пакет Madwimax. Пробую в терминале набрать Sudo Madwimax, мне выдает Could not find/open device
    Уже перебробовал, никак не получается завести модем (тоже встроенный на NC10). Может на 10.04 надо как-то по-другому действовать?

    ОтветитьУдалить