Linux поддержка 4g модемов

Настройка 4G WiMAX-модема на чипе Beceem в Linux

Недавно в инете появился Sprint 4G Depelopment Pack, содержащий исходники драйверов и API для модемов на чипсете Beceem, а также документацию и различные тестовые утилиты.

К сожалению, поставляемая документация местами не соотвествует, описывает прежнюю версию драйверов и многое пришлось додумывать по ходу. В частности, там заявлено ядро версии от 2.6.9 и выше. На самом же деле, требуется ядро минимум 2.6.29 т.к. используются некоторые функции USB Core API, которых нет в прежних ядрах. В этом был первый долгий затык — попытка установить на CentOS 5.5.

Необходимые требования для сборки и корректной работы:
— Ядро Linux версии не ниже 2.6.29
— Административный доступ с правами root
— Пакеты linux-source, kernel-headers, openssl 0.9.8, С-compiler, usb-modeswitch и др.

В этой статье описывается установка на Ubuntu-server-10.10 i386 с ядром 2.6.35.
Используется 4G-модем Huawei BM338 на чипсете Beceem BCSM250 от провайдера byfly (Белтелеком). Модем позиционируется как решение Mobile-WiMAX и работает на частоте 3,5 ГГц.

1. Подготовка ядра

Устанавливаем все необходимые пакеты:

apt-get install linux-source linux-headers-$(uname -r) openssl unzip dos2unix patch
cd /usr/src
tar xvfj linux-source-2.6.35.tar.bz2
cd linux-source-2.6.35
make oldconfig && make prepare
make modules_prepare

2. Установка и настройка usb-modeswitch

Утилита usb_modeswitch необходима для автоматического переключения устройства из режима ZeroCD (на котором драйвера для Windows) в режим модема. Если запустить lsusb, то увидим устройство в режиме ZeroCD:
Bus 001 Device 003: ID 198f:bccd Beceem Communications Inc.

Устанавливаем:
apt-get install usb-modeswitch
cat /etc/usb_modeswitch.d/198f\:bccd >> /etc/usb_modeswitch.conf

Редактируем файл /lib/udev/rules.d/40-usb_modeswitch.rules — можно удалять описания всех устройств, кроме Beceem. Должно остаться что-то вроде:

LABEL=»modeswitch_rules_begin»
# Beceem BCSM250
ATTRS==»198f», ATTRS==»bccd», RUN+=»usb_modeswitch ‘%b/%k'»
LABEL=»modeswitch_rules_end»

Перезапускаем udev:
service udev restart

Теперь, если снова вставить модем, вывод lsusb должен быть такой:
Bus 001 Device 003: ID 198f:0220 Beceem Communications Inc.
— 198f:bccd поменялся на 198f:0220

3. Установка модуля ядра и Beceem API Library

Распаковываем скачанный архив:
tar xvfz Sprint4GDeveloperPack-1.1.tar.gz
cd Sprint4GDeveloperPack-1.1

Скрипт задаст ряд вопросов по поводу расположения директорий, главное указать правильную директорию с исходниками ядра. В моем случае это /usr/src/linux-source-2.6.35

Скрипт соберет модуль ядра drxvi314.so, библиотеку libxvi020.so и копирует прошивку девайса в /lib/firmware. После чего выдаст ошибку — остальные компоненты будем собирать позже вручную. Нам еще потребуется конфиг устройства от провайдера, берем его из папки с установленной программой в винде (Program files/Wimax Connection Manager/Driver/Firmware/macxvi.cfg) и кладем в /lib/firmware. Теперь загружаем модуль ядра:
modprobe drxvi314

Читайте также:  Web vulnerability scanner kali linux

Если все прошло удачно — на модеме должен загореться красный светодиод. Также стоит глянуть вывод dmesg -c, там должно быть что-то типа
.
[ 6.240000]
[ 6.240035] register_networkdev:Beceem Network device name is eth1!
.
.
[ 7.197554] usbcore: registered new interface driver usbbcm
[ 7.197562] Initialised usbbcm

Для автозагрузки добавляем drxvi314 в /etc/modules
Поднимаем eth1:
ifconfig eth1 up

4. Установка Beceem Connection Manager и библиотек

unzip CSCM_v1.1.6.0_source.zip
cd CSCM

Т.к. в составе исходников не оказалось заголовочных файлов OpenSSL, качаем нужную версию с сайта:
wget http://www.openssl.org/source/openssl-0.9.8o.tar.gz
tar xvfz openssl-0.9.8o.tar.gz

и кладем заголовочные файлы в нужные места:
cp -R openssl-0.9.8o/include/openssl wpa_supplicant/openssl
cp -R openssl-0.9.8o/crypto crypto
cp -R openssl-0.9.8o/ssl ssl
cp -R openssl-0.9.8o/e_os2.h e_os2.h
cp -R openssl-0.9.8o/include/openssl BeceemEAPSupplicant/BeceemEngine/openssl
cp -R openssl-0.9.8o/crypto BeceemEAPSupplicant/crypto
cp -R openssl-0.9.8o/e_os2.h BeceemEAPSupplicant/e_os2.h
ln -s /lib/libssl.so.0.9.8 /lib/libssl.so
ln -s /lib/libcrypto.so.0.9.8 /lib/libcrypto.so

Конвертируем build.sh в UNIX-формат и собираем:
dos2unix build.sh
chmod +x build.sh
./build.sh pc_linux

В конце скрипта должно быть написано SUCCESS по всем компонентам.

Кладем библиотеки, демон и клиент в нужные места:
cp bin_pc_linux/bin/lib* /lib/
cp bin_pc_linux/bin/wimax* /usr/local/bin/

5. Конфигурирование демона wimaxd

Тут есть одна непонятная вещь, над которой тоже пришлось долго «плясать с бубном».
Ранее, при сборке модуля ядра, мы уже скопировали конфиг устройства (файл macxvi.cfg), поставляемый провайдером. Такой же файлик есть и в архиве Sprint’а, но с ним модем ведет себя странно (не работают светодиоды, поиск БС происходит очень долго и т.д.). Но при этом, демон wimaxd, наоборот, корректно работает именно с конфигом Sprint’а (с родным провайдерским конфигом были проблемы с TLS-аутентификацией).

В общем, в /lib/firmware/ должно быть 2 файла:
macxvi.cfg — конфиг провайдера, его использует модуль ядра.
macxvi-sprint.cfg — конфиг Sprint’а из архива (лежит в Sprint4GDeveloperPack-1.1/Rel_5.2.7.3P1_USB/Tools/config/CFG_files_for_VSG_testing/macxvi_VSG_2.6-3.5_FLASH_r37.cfg) — он нужен для демона wimaxd

Создаем конфиг wimaxd, например /etc/wimaxd.conf
После изучения документации, а также методом проб и ошибок получилось вот такое содержимое:

/etc/wimaxd.conf:
########################################################################
BandwidthMHz 10
CenterFrequencyMHz 3416 3426 3436 3446 3516 3526 3536 3546

AuthEnabled Yes
EAPMethod 4
UserIdentity ‘6816C0B1C045@wimax.beltel.by’

ValidateServerCert Yes
CACertPath ‘/usr/local/beceem/certs’
CACertFileName ‘/usr/local/beceem/certs/ca.pem’
TLSDeviceCertFileName ‘/usr/local/beceem/certs/cpecert.pem’
TLSDevicePrivateKeyFileName ‘/usr/local/beceem/certs/cpekey.pem’
InnerNAIChange Yes

#AuthLogLevel 4
#AuthLogFileName ‘/tmp/CM_Auth.log’

Немного пояснений.
Параметры BandwidthMHz и CenterFrequencyMHz взяты из настроек виндошной программы.
EAPMethod 4 — EAP-TLS
UserIdentity — логин. Первая часть логина до символа @ — это МАС-адрес устройства без двоеточий. Также взят из настроек виндошной программы.
CACertPath, CACertFileName, TLSDeviceCertFileName, TLSDevicePrivateKeyFileName — пути к файлам сертификатов и ключей. Их нужно взять из папки с установленной программой в винде (Program Files/Wimax Connection Manager/cert/) и положить в указанную конфигом директорию.
InnerNAIChange Yes — не знаю что это, но без этой опции ошибка аутентификации при подключении.
FirmwareFileName, ConfigFileName — пути к файлам прошивки и конфига от Sprint’a

Читайте также:  Программное обеспечение linux debian

6. Подключение

Запускаем демон:
wimaxd -D -c /etc/wimaxd.conf

Результатом правильной работы будет непрерывный вывод сообщения Link status = WAIT FOR PHY SYNC CMD — это значит, что демон готов принимать команды от клиента. Открываем другую консоль и запускам клиент:
wimaxc -i

Должно появится приглашение
Beceem CM Server Version 1.1.6.0
>

а в консоли демона сообщение
Client socket 00000006 lock Beceem API: SUCCESS (wait = 0 ms)
Client socket 00000006 unlock Beceem API: Success

Начинаем сканирование:
> search

Через секунд 30 клиент выдаст найденные BSIDs, что-то вроде такого:
Network search returned 4 base stations.
Idx BSID Pre Freq BW RSSI CINR
0 01:01:00:00:02:00:17:00 0x05 3416.000 10.000 -70 26
1 01:01:00:00:02:00:17:20 0x05 3426.000 10.000 -76 17
2 01:01:00:00:02:00:17:10 0x05 3436.000 10.000 -74 20
3 01:01:00:00:02:00:17:30 0x05 3446.000 10.000 -72 24

Подключаемся к той, у которой соотношение сигнал/шум максимальное, в данном случае 0
> connect 0

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

=============== Received Message Start (2010/09/24 18:03:10.622) ===========
u32State = Network Entry completed
Service flow response received (Type = 6 — Subtype = 1 — Length = 8476)
Service Flow Add Indication:
Type = 13
Direction = Uplink
Connection > Virtual CID = 4
Service flow > Max sustained rate = 512 kbps
Traffic priority = 0
=============== Received Message End (type=6 sub-type=1) ===============
Device status indication: Layer 2 connected

=============== Received Message Start (2010/09/24 18:03:10.682) ===========
u32State = Network Entry completed
Service flow response received (Type = 6 — Subtype = 1 — Length = 8476)
Service Flow Add Indication:
Type = 13
Direction = Downlink
Connection > Virtual CID = 5
Service flow > Max sustained rate = 2680 kbps
Traffic priority = 0
================
Link status = LINKUP ACHIEVED

Здесь видны параметры скорости даунлинка/аплинка (2680/512 kbps — ограничение провайдера).
Если соединение не установилось — нужно смотреть вывод ошибок в консоли демона и пытаться исправить. Также будет полезно включить опции AuthLog и просмотреть детальный лог. Вполне вероятно, для других провайдеров параметры аутентицикации будут совсем другие.

7. Финальные шаги

После того, как все будет правильно настроено — демон можно запустить в фоне:
wimaxd -c /etc/wimaxd.conf
и занести в стартовые скрипты системы.
Клиентскую часть тоже можно автоматизировать, в документации есть пример скрипта на Python. Но я не силен в программировании на Python, поэтому оставляю это за рамками статьи.

Осталось настроить PPPoE-соединение к провайдеру. Тут уже все стандартно — запускаем pppoeconf и отвечаем на вопросы. Обратите внимание, что интерфейс eth1 изначально не поднят, перед запуском PPPoE его нужно активировать (ifconfig eth1 up)

Читайте также:  Woe usb linux mint

Стартуем:
pon dsl-provider
… и вуаля! Проверяем, поднялся ли ppp0:
ifconfig ppp0

ping ftp.mgts.by
— ftp.mgts.by ping statistics —
177 packets transmitted, 177 received, 0% packet loss, time 176214ms
rtt min/avg/max/mdev = 42.551/59.213/71.809/8.631 ms

Работает все хорошо, проблем замечено не было. Скорость — максимальная, ограниченная провайдером. Субъективно, пинг стал меньше и ровнее, чем под Windows.

При подготовке статьи была использована документация из Sprint 4G Depelopment Pack.

P.S. Выражаю благодарность человеку под ником amod-cccp за предоставленный линк на этот пак (месяц назад искал какую-либо информацию — ничего не нашел).

Источник

[РЕШЕНО]4G модем в ArchLinux

В терминале пишет «Нет такого файла или каталога.»
Открыл файл через текстовый редактор, где обнаружил следующий скрипт:

Что я знаю:
В корне диска есть файл autorun.sh, он запускает файл install_linux. Тот должен работать с папкой Linux, которая расположена в корне Мегафоновского диска.

РЕШЕНИЕ:
Читайте статью в вики, вопросы по статейке можно задавать в этой теме.

Natrio
Прежде чем начинать препарировать всякие левые autorun.sh и install_linux, не мешало бы установить usb_modeswitch

vasek
http://forum.ubuntu.ru/index.php?PHPSESSID=ha6md057498gg505ogfe1uq576&topic=196758.0
здесь описаны мучения подключения для Megafon 4G Huawei e392.
Сам постоянно (так сложилось) пользуюсь подключением только через 3G модем (в разных системах), даже Arch устанавливал через 3G модем.
Понял одно и главное — лучшая настройка — это настройка ручками. И не нужны никакие Network ModemManager.
usb_modeswitch и WvDial никогда не использую. Перевожу в режим только модем с помощью putty. Дальнейшая ручная настройка через ppp, в разных системах немного отличается. Для Arch подробно описано в Wiki. Да и в интернете на эту тему написано не мало. Лучше пройти этот путь самому, чтобы понять смысл. Я на ZenW. настраивал несколько дней, там даже команда запуска оказалась другой.
PS — установив modem manager gui, даже посылаю sms и USSD запросы о смене тарифа, запросе баланса и т.п.

Да я примерно разбираю что к чему, это мой второй модем. Ручками настраивал, не заработало. За ссылку и информацию спасибо, почитаю.

Начинаем от печки:
lsusb — тут внимательно читаем вендор и продукт ид а так же смотрим как вообще откликнулся модем. и желательно вывод этой команды сюда

ls /dev/ttyU* — На случай если устройство все же определилось через usb_modeswitch или само умеет режим модема

ip link — некоторые модемы переставляются сетевыми картами так что не сочтите за труд проверить, и даже на всякий пожарный натравить dhcp клиент на интерфейс usb0 если таковой есть

Источник

Оцените статью
Adblock
detector