configuration – Help with implementing usb_modeswitch – Ask Ubuntu

gist og image Новости

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

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

apt-get install linux-source linux-headers-$(uname -r) openssl unzip dos2unix patchcd /usr/srctar xvfj linux-source-2.6.35.tar.bz2cd linux-source-2.6.35make oldconfig && make preparemake modules_prepare

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

Утилита usb_modeswitch необходима для автоматического переключения устройства из режима ZeroCD (на котором драйвера для Windows) в режим модема. Если запустить lsusb, то увидим устройство в режиме ZeroCD:

Bus 001 Device 003: ID 198f:bccd Beceem Communications Inc.

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

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


Распаковываем скачанный архив:

tar xvfz Sprint4GDeveloperPack-1.1.tar.gz
cd Sprint4GDeveloperPack-1.1

Собираем:./install.sh

Скрипт задаст ряд вопросов по поводу расположения директорий, главное указать правильную директорию с исходниками ядра. В моем случае это /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

Если все прошло удачно — на модеме должен загореться красный светодиод. Также стоит глянуть вывод 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

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

unzip CSCM_v1.1.6.0_source.zip
cd CSCM

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

Тут есть одна непонятная вещь, над которой тоже пришлось долго «плясать с бубном».

Ранее, при сборке модуля ядра, мы уже скопировали конфиг устройства (файл macxvi.cfg), поставляемый провайдером. Такой же файлик есть и в архиве Sprint’а, но с ним модем ведет себя странно (не работают светодиоды, поиск БС происходит очень долго и т.д.).

В общем, в /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 10CenterFrequencyMHz 3416 3426 3436 3446 3516 3526 3536 3546

Подключение


Запускаем демон:

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 CINR0 01:01:00:00:02:00:17:00 0x05 3416.000 10.000 -70 261 01:01:00:00:02:00:17:20 0x05 3426.000 10.

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

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

=============== Received Message Start (2022/09/24 18:03:10.622) ===========u32State = Network Entry completedService flow response received (Type = 6 – Subtype = 1 – Length = 8476)Service Flow Add Indication:Type = 13Direction = UplinkConnection ID = 10039Virtual CID = 4Service flow ID = 513Max sustained rate = 512 kbpsTraffic priority = 0=============== Received Message End (type=6 sub-type=1) ===============Device status indication: Layer 2 connected

=============== Received Message Start (2022/09/24 18:03:10.682) ===========u32State = Network Entry completedService flow response received (Type = 6 – Subtype = 1 – Length = 8476)Service Flow Add Indication:Type = 13Direction = DownlinkConnection ID = 10040Virtual CID = 5Service flow ID = 512Max sustained rate = 2680 kbpsTraffic priority = 0================Link status = LINKUP ACHIEVEDЗдесь видны параметры скорости даунлинка/аплинка (2680/512 kbps — ограничение провайдера).

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

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

После того, как все будет правильно настроено — демон можно запустить в фоне:

wimaxd -c /etc/wimaxd.conf

и занести в стартовые скрипты системы.


Клиентскую часть тоже можно автоматизировать, в документации есть пример скрипта на Python. Но я не силен в программировании на Python, поэтому оставляю это за рамками статьи.

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

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

ping ftp.mgts.by— ftp.mgts.by ping statistics —177 packets transmitted, 177 received, 0% packet loss, time 176214msrtt min/avg/max/mdev = 42.551/59.213/71.809/8.631 msРаботает все хорошо, проблем замечено не было. Скорость — максимальная, ограниченная провайдером. Субъективно, пинг стал меньше и ровнее, чем под Windows.

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

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

Help with implementing usb_modeswitch

I have same problems with my modem on 12.04. All you have to do are the following things:

First install USB_modeswitch on your computer. Try to download it from Software Center or Synaptic package manager. Also check for libusb in synaptic.

Now check whether you have /etc/mod_switch.conf or /etc/mod_switch.d file. Don’t worry about their content, just check whether they are on your system or not. If /etc/mod_switch.conf is not present then you can create it manually.

Now check the file in /usr/share/usb_modswitch you will find a tar file in it which contain some information about your device. Look for your device file in the tar file, you will get it there.

To know which file you need, just run the command lsusb in your terminal to get the vendor id and product id respectively. In your file you will get the information like:

TargetVendor=  0x12d1
TargetProductList="140b,1506,150f"

MessageContent="55534243123456780000000000000011062000000100000000000000000000"

You will have you own TargetVendor, Targetid, TargetMessage content.

Now go to terminal and run gedit /etc/mod_switch.conf and write the following lines in it:

DefaultVendor=  0x19d2
DefaultProduct= 0x2000

TargetVendor=   0x19d2
TargetProduct=  0x0031

MessageContent="5553424312345678000000000000061e000000000000000000000000000000

Please make sure you put the right entry. Default vendor and product can be obtained from lsusb command. Target vendor, product and message content from the file I mentioned above. Save it and close the file.

Now open the terminal and run the following command:

sudo usb_modeswitch -c /etc/usb_modeswitch.conf 

How to automate usb_modeswitch?

The easiest way is to create an udev rule in /etc/udev/rules.d/70-usb-modeswitch.rules .

For example with a USB LTE stick from another vendor:

# own udev rule USB LTE 
# switch from mass storage mode to modem modem
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9bfe", RUN ="/usr/sbin/usb_modeswitch -v 1c9e -p 9bfe -M '55534243123456780000000000000606f50402527000000000000000000000'"
# load driver for modem mode
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", RUN ="/bin/bash -c 'modprobe option && echo 1c9e 9b01 > /sys/bus/usb-serial/drivers/option1/new_id'"
# rule for modemmanager (example /lib/udev/rules.d/77-mm-longcheer-port-types.rules)
ACTION!="add|change", GOTO="mm_longcheer_port_types_end"
SUBSYSTEM!="tty", GOTO="mm_longcheer_port_types_end"

SUBSYSTEMS=="usb", ATTRS{idVendor}=="1c9e", GOTO="mm_longcheer_vendorcheck"
GOTO="mm_longcheer_port_types_end"

LABEL="mm_longcheer_vendorcheck"
SUBSYSTEMS=="usb", ATTRS{bInterfaceNumber}=="?*", ENV{.MM_USBIFNUM}="$attr{bInterfaceNumber}"

ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", ENV{.MM_USBIFNUM}=="03", ENV{ID_MM_LONGCHEER_PORT_TYPE_MODEM}="1"
ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", ENV{.MM_USBIFNUM}=="00", ENV{ID_MM_LONGCHEER_PORT_TYPE_AUX}="1"
ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", ENV{.MM_USBIFNUM}=="01", ENV{ID_MM_LONGCHEER_PORT_TYPE_AUX}="1"
ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", ENV{.MM_USBIFNUM}=="02", ENV{ID_MM_LONGCHEER_PORT_TYPE_AUX}="1"
ATTRS{idVendor}=="1c9e", ATTRS{idProduct}=="9b01", ENV{ID_MM_LONGCHEER_TAGGED}="1"

GOTO="mm_longcheer_port_types_end"

After saving your rule do udevadm control --reload-rules.

see also this longer blog post https://bytefish.de/blog/huawei_e352s5/

In some newer kernels, certain devices (some Option, some Huawei, some ZTE as mentioned above)
get a special treatment in the usb-storage code to enable switching right away. You would not need
USB_ModeSwitch anymore for these specific devices; on the other hand you have no choice of accessing
the “CD-ROM” part of your device.

Old systems (e.g. centos 5 or xandros 6)

If you are running a not-quite-fresh system (with a kernel below 2.6.27), you may run into
incompatibilities between versions of “udev”, the device manager. If you get no indication
of the usb_modeswitch components doing anything at all (no log files), follow these steps:

Драйвер

Загрузить другой драйвер и отключить накопитель (как с этим работать?):

# Загрузить драйвер модема и detach накопитель
sudo modprobe usbserial vendor=0x12d1 product=0x1003
sudo usb_modeswitch -v 0x12d1 -p 0x1003 -d
#: OK, driver detached

Параметры запуска usb-modeswitch

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

Примеры запуска утилиты для ручного переключения режима USB девайса:

sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 -H
sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 -d
sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1001 -HR -M "55534243123456780000000000000011062000000100000000000000000000"
sudo usb_modeswitch -v 0x12d1 -p 0x1003 -V 0x12d1 -P 0x1001 -J
sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1001 -M 55534243123456780000000000000011060000000000000000000000000000
#: Error: can't use storage command in MessageContent with interface 0; interface class is 255, expected 8. Abort
sudo usb_modeswitch -v 0x12d1 -p 0x1003 -V 0x12d1 -P 0x1003 --target-class 0xff -c ./setup/vendors/configs/12d1:1003
sudo usb_modeswitch -v 12d1 -p 1003 -V 12d1 -P 1003 --target-class 0xff -J
#: No devices in default mode found. Nothing to do.
sudo usb_modeswitch -v 12d1 -p 1003 -H
#: Send old Huawei control message ...

Опции запуска:

-v ID    Искать девайс с указанным VendorId
-p ID    Искать девайс с указанным ProductId
-V ID    Переключить девайс в заданный VendorId
-P ID    Переключить девайс в заданный ProductId

-c FILE  Указать файл конфигурации с настройками переключения девайса и режима
--target-class 0xff  ??
-M       Передача какой-то управляющей команды, значение - константа (не разобрался с этим)
-H       Режим Huawei
-J       Режим Huawei new
-R       Перезагрузить USB устройство
-d       Отключить накопитель (Mass Storage)

Теория

Обычно USB модемы имеют 2 режима инициализации в OS – Mass Storage (виртуальный накопитель с драйверами) и GSM модем. Нам нужно указать OS правило – при инициализации,  переключать USB модем с определенным VendorId:ProductId в режим GSM modem.

Установка usb-modeswitch

Для одних USB модемов достаточно просто установить утилиту usb-modeswitch и usb-modeswitch-data, которая содержит правила и конфиги переключения режимов для большинства USB устройств. Примечательно, что в OS Raspbian Stretch эта утилита уже установлена.

sudo apt install usb-modeswitch usb-modeswitch-data

После установки usb-modeswitch и подключения USB модема, он может определиться правильно – как GSM modem:

dmesg -T | grep ttyUSB
[2022-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[2022-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1
[2022-05-25 02:42:14] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB2
[2022-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB3
[2022-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB4
[2022-05-25 02:42:22] usb 1-1.3: GSM modem (1-port) converter now attached to ttyUSB5

Также будут доступны по 3 интерфейса /dev/ttyUSB* на каждый модем:

ls -la /dev/ttyUSB*
crw-rw---- 1 root dialout 188, 0 май 25 02:45 /dev/ttyUSB0
crw-rw---- 1 root dialout 188, 1 май 25 02:42 /dev/ttyUSB1
crw-rw---- 1 root dialout 188, 2 май 25 14:48 /dev/ttyUSB2
crw-rw---- 1 root dialout 188, 3 май 25 13:56 /dev/ttyUSB3
crw-rw---- 1 root dialout 188, 4 май 25 02:42 /dev/ttyUSB4
crw-rw---- 1 root dialout 188, 5 май 25 14:48 /dev/ttyUSB5

Но, попадаются модемы с номерами vendor ID и product ID, для которых нужно прописывать правила переключения режима из Mass Storage в GSM modem.

dmesg -T | grep -Pi 'huawei|ttyUSB'
[2022-05-25 02:42:23] scsi 1:0:0:0: Direct-Access     HUAWEI   MMC Storage      2.31 PQ: 0 ANSI: 2
[2022-05-25 02:42:23] scsi 0:0:0:0: CD-ROM            HUAWEI   Mass Storage     2.31 PQ: 0 ANSI: 2
[2022-05-25 13:22:13] scsi 2:0:0:0: Direct-Access     HUAWEI   TF CARD Storage  2.31 PQ: 0 ANSI: 2

Файлы конфигурации usb-modeswitch

Основной файл конфигурации (активация утилиты, логирование):

sudo leafpad /etc/usb_modeswitch.conf

Архив /usr/share/usb_modeswitch/configPack.tar.gz не распакован! Так должно быть?

Оцените статью
Huawei Devices
Добавить комментарий