Настройка QMI в openWrt
Современные USB-модемы помимо стандартного способа подключения к сети через
последовательные порты (ttyUSBx) поддерживают QMI интерфейс.
Если вкратце, то стандартный способ подключения usb-модема имеет следующий вид:
Модем подключается в usb порт и создаётся набор последовательных портов, через которые можно настраивать модем с помощью AT-команд и подключаться к сети. Как правило, за создание набора последовательных портов (ttyUSBx) отвечает тот или иной драйвер из меню ядра:
USB Serial Converter support.
Для модемов, поддерживающих QMI интерфейс, такого драйвера не требуется. А нужен драйвер в ядре:
USB_NET_QMI_WWAN
или опция:
kmod-usb-net-qmi-wwan в openwrt.
Кроме этого нужно установить пакет:
uqmi.
Ну и теперь секция в конфигурационном файле /etc/config/network должна выглядеть как-то так:
config interface 'wwan0' option proto 'qmi' option device '/dev/cdc-wdm0' option modes 'umts' option username 'gdata' option password 'gdata' option apn 'internet' option ifname 'wwan0'
Вывод ifconfig после рестарта сети или перезагрузки устройства будет примерно такой:
# ifconfig wwan0 Link encap:Ethernet HWaddr 7E:0E:3B:46:6F:0D inet addr:10.209.197.186 Bcast:10.209.197.187 Mask:255.255.255.252 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:252 errors:0 dropped:0 overruns:0 frame:0 TX packets:252 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:21143 (20.6 KiB) TX bytes:24439 (23.8 KiB)
При этом не требуется прописывать dhcp настройки для этого типа интерфейса, поскольку движок openwrt подразумевает это по умолчанию. Вывод ps:
# ps 1798 root 1220 S udhcpc -p /var/run/udhcpc-wwan0.pid -s /lib/netifd/
Для получения дополнительной информации о соединении можно использовать утилиту uqmi
Уровень сигнала и тип соединения:
#uqmi -d /dev/cdc-wdm0 --get-signal-inf { "type": "wcdma", "rssi": -83, "ecio": 20 }
Название оператора:
# uqmi -d /dev/cdc-wdm0 --get-serving-system { "registration": "registered", "plmn_mcc": 250, "plmn_mnc": 2, "plmn_description": "MegaFon", "roaming": false }