Programming, electronics, lifestyle
Ранее я писал статью про восстановление модема Huawei E352. В этой я постараюсь разобраться как он отображается в системе и как им можно управлять.
Рассмотрим ещё раз вывод устройств в папке /dev
:
> ls -l /dev/
...
drwxr-xr-x 2 root root 80 Jan 22 08:40 bsg
...
crw------- 1 root root 180, 176 Jan 22 08:40 cdc-wdm0
lrwxrwxrwx 1 root root 3 Jan 22 08:40 cdrom -> sr0
...
brw-rw---- 1 root disk 8, 0 Jan 22 08:40 sda
drwxr-xr-x 4 root root 80 Jan 22 08:40 serial
...
crw-rw---- 1 root disk 21, 0 Jan 22 08:40 sg0
crw-rw---- 1 root cdrom 21, 1 Jan 22 08:40 sg1
...
brw-rw---- 1 root cdrom 11, 0 Jan 22 08:40 sr0
...
crw-rw---- 1 root dialout 188, 0 Jan 22 08:40 ttyUSB0
crw-rw---- 1 root dialout 188, 1 Jan 22 08:40 ttyUSB1
crw-rw---- 1 root dialout 188, 2 Jan 22 08:40 ttyUSB2
...
Первое это – bsg
или Block SCSI Generic, это директория в которой находятся файлы 0:0:0:0
и 1:0:0:0
. Для того, чтобы разобраться больше сделаем вывод dmesg
:
usb 1-1.1.3: new high-speed USB device number 39 using dwc_otg
usb 1-1.1.3: New USB device found, idVendor=12d1, idProduct=1506, bcdDevice= 1.02
usb 1-1.1.3: New USB device strings: Mfr=3, Product=2, SerialNumber=0
usb 1-1.1.3: Product: HUAWEI Mobile
usb 1-1.1.3: Manufacturer: HUAWEI
option 1-1.1.3:1.0: GSM modem (1-port) converter detected
usb 1-1.1.3: GSM modem (1-port) converter now attached to ttyUSB0
huawei_cdc_ncm 1-1.1.3:1.1: MAC-Address: 58:2c:80:13:92:63
huawei_cdc_ncm 1-1.1.3:1.1: setting rx_max = 16384
huawei_cdc_ncm 1-1.1.3:1.1: setting tx_max = 16384
huawei_cdc_ncm 1-1.1.3:1.1: NDP will be placed at end of frame for this device.
huawei_cdc_ncm 1-1.1.3:1.1: cdc-wdm0: USB WDM device
huawei_cdc_ncm 1-1.1.3:1.1 wwan0: register 'huawei_cdc_ncm' at usb-3f980000.usb-1.1.3, Huawei CDC NCM device, 58:2c:80:13:92:63
option 1-1.1.3:1.2: GSM modem (1-port) converter detected
usb 1-1.1.3: GSM modem (1-port) converter now attached to ttyUSB1
option 1-1.1.3:1.3: GSM modem (1-port) converter detected
usb 1-1.1.3: GSM modem (1-port) converter now attached to ttyUSB2
usb-storage 1-1.1.3:1.4: USB Mass Storage device detected
scsi host0: usb-storage 1-1.1.3:1.4
usb-storage 1-1.1.3:1.5: USB Mass Storage device detected
scsi host1: usb-storage 1-1.1.3:1.5
scsi 0:0:0:0: CD-ROM HUAWEI Mass Storage 2.31 PQ: 0 ANSI: 2
scsi 1:0:0:0: Direct-Access HUAWEI SD Storage 2.31 PQ: 0 ANSI: 2
sd 1:0:0:0: Attached scsi generic sg0 type 0
sr 0:0:0:0: [sr0] scsi-1 drive
sr 0:0:0:0: Attached scsi CD-ROM sr0
sr 0:0:0:0: Attached scsi generic sg1 type 5
sd 1:0:0:0: [sda] Attached SCSI removable disk
Раз уж начали с /dev/bsg
, сначала закончим с ним. Как видно из вывода:
/dev/bsg/0:0:0:0
(/dev/sg1
) – CD-ROM (Mass Storage), смонтировано в блочное устройство: sr0
(cdrom
)/dev/bsg/1:0:0:0
(/dev/sg0
) – Direct-Access (SD Storage), смонтировано в блочное устройство: sda
Тоже самое можно получить через lsscsi
:
> sudo lsscsi
[0:0:0:0] cd/dvd HUAWEI Mass Storage 2.31 /dev/sr0
[1:0:0:0] disk HUAWEI SD Storage 2.31 /dev/sda
> sudo fdisk -l /dev/sr0
Disk /dev/sr0: 128 MiB, 134217728 bytes, 65536 sectors
Disk model: Mass Storage
Units: sectors of 1 * 2048 = 2048 bytes
Sector size (logical/physical): 2048 bytes / 2048 bytes
I/O size (minimum/optimal): 2048 bytes / 2048 bytes
> sudo fdisk -l /dev/sda
fdisk: cannot open /dev/sda: No medium found
MicroSD карта памяти не вставлена, поэтому ожидаемо получили No medium found
.
Идём дальше, рассмотрим другие USB устройства на этом порту.
> lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=dwc_otg/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 3, If 0, Class=Hub, Driver=hub/3p, 480M
|__ Port 1: Dev 4, If 0, Class=Vendor Specific Class, Driver=lan78xx, 480M
|__ Port 2: Dev 51, If 3, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 51, If 1, Class=Vendor Specific Class, Driver=huawei_cdc_ncm, 480M
|__ Port 2: Dev 51, If 4, Class=Mass Storage, Driver=usb-storage, 480M
|__ Port 2: Dev 51, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 51, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 2: Dev 51, If 5, Class=Mass Storage, Driver=usb-storage, 480M
Как видно из вывода dmesg
на USB устройстве 1-1.1.3:1.1
драйвером huawei_cdc_ncm
(source code) создано два устройства /dev/cdc-wdm0
и сетевой интерфейс wwan0
.
> sudo file /dev/cdc-wdm0
/dev/cdc-wdm0: character special (180/176)
> sudo cat /dev/cdc-wdm0
^STIN: 0, 0, 0
^STIN: 99, 0, 0
^SIMST:1,0
^RSSI: 31
^MODE: 5,4
^RSSI: 26
^ERRRPT:3,7
^SIMST:3,0
^SRVST: 1
^ERRRPT:1,2
^SIMST:4,0
/dev/cdc-wdm0
это часть USB WDM device
или CDC-WMC Device Management, по идеи это должен быть интерфейс команд и прерыванию QMI
протокола, однако при проверки этого интерфейса утилитами qmicli
, mmcli
оказалось что это не так, либо он уже перехвачен.
Очень советую прочитать материал Qualcomm Gobi devices on Linux.
Как вывод и проделанных тестов и вывода dmesg
– это разновидность NCM
в протоколе USB. Вообще чтобы лучше понимать по каким протоколам и как может раздаваться интернет, советую изучить, следующие два материала:
Ну и остались несколько сериал устройсв:
/dev/ttyUSB0
– выводит буквально пару значений начинающихся со знака ^
, а также отвечает на AT-команды/dev/ttyUSB1
– ничего не выводит и не отвечает/dev/ttyUSB2
– выводит тоже самое что и /dev/cdc-wdm0
, а также отвечает на AT-командыДля того, чтобы разобраться в них я сделал несколько AT комманд, которые показывают в каких режимах работает модем:
AT^SETPORT?
^SETPORT:A1,A2;1,16,3,2,A1,A2
OK
AT^SETPORT=?
^SETPORT:A1: CDROM
^SETPORT:A2: SD
^SETPORT:A: BLUE TOOTH
^SETPORT:B: FINGER PRINT
^SETPORT:D: MMS
^SETPORT:E: PC VOICE
^SETPORT:1: MODEM
^SETPORT:2: PCUI
^SETPORT:3: DIAG
^SETPORT:4: PCSC
^SETPORT:5: GPS
^SETPORT:6: GPS CONTROL
^SETPORT:16: NCM
OK
AT^GETPORTMODE
^GETPORTMODE: TYPE: WCDMA: huawei,MDM:0,NDIS:1,DIAG:2,PCUI:3,CDROM:4,SD:5
OK
Вывод немного странный, однако судя из него у меня на модеме включены MODEM
, PCUI
, DIAG
, NCM
. Из которых MODEM
, PCUI
, DIAG
скорее всего и являются tty-устройствами. Собственно, думаю можно попробовать по одному поотключать PCUI
, DIAG
.
Другие AT команды:
Как вариант подключения к модему по serial-порту, можно использовать pppd
и обертку над ним wvdial
: