Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544

1. července 2020

Do rukou se mě dostal notebook Lenovo ThinkPad X1 Carbon. Funguje dobře bez nutnosti cokoli řešit, navíc jako notebook má relativně velké rozlišení obrazovky.

Notebook má procesor s dvěma jádry a s hyperthreading, takže pak jsou v systému vidět jako 4 CPU. Operační pamět je typu DDR3L, v mém modelu o celkové velikosti 16GB. Rozlišení LCD obrazovky je 2560x1440px.

Notebook ma jak je již standartem integrovanou WiFi kartu. A nemá DVD mechaniku, která je dneska zbytečná. Díky tomu je také notebook lehký a tenký.
Dále má: USB3, HDMI výstup, jack na společný mikrofon se sluchátky (samozřejmě i integrovaný mikrofona a reproduktory), Touchpad a trackpoint. Specifický konektor na připojení Ethernet vstupu, ale já když potřebuji, tak použiji USB Ethernet, který je přes USB3 rychlí. Notebook má i integrovanou kameru střední kvality.

Má i čtečku micro SD karet. Takže standardní velikost a mini bez externi čtečky nepřečtete. Jak je zvykem u Thinkpadů má svícení. Konkrétně zapínatelné podsvícení klávesnice. Klávesa CapsLosk a funkční klávesy: ztlumen zvuku, ztlumení mikrofonu a FnLock mají v sobě malou diodu, která singnalizuje stav.

Můj model má navíc i LTE modem, o kterém bude tento článek. Modem zároveň obsahuje GPS modul.

Celý výpis HW viz lshw Lenovo ThinkPad X1 Carbon. Kromě očekávaných komponent notebook z výroby obsahuje i LTE modem. Jednotlivé generace ThinkPadu X1 Carbon však mají instalován jiný typ modemu.
Dle informací na Internetu se ThinkPad X1 Carbon dodává s těmito modemy:

  • Fibocom L850-GL / Intel XMM7360 LTE modem
  • Sierra Wireless, Inc. Sierra Wireless EM7455

LTE modem EM7455

Zajímavostí je, že modem umožňuje změnit svoje USB ID, takže pak se v systému může hlásit jako jiné zařízení. Dle Internetu je identifikace modemu rozdílná dle typu značky notebooky (nejspíš to přednastavuje výrobce), ale vždy se jedná o stejný kus elektroniky. Montuje se například i do notebooku Dell. Modem se může identifikovat jako jedno zařízení z těchto tří možností:

  • Generic-Laptop
  • Dell: Dell Wireless 5811e Gobi(TM)4G LTE Mobile Broadband Card
  • Lenovo ThinkPad: Sierra Wireless, Inc. Sierra Wireless EM7455

Modem je vnitřně připojen po USB. Na ThinkPad X1 Carbon výpis lsusb hlásí:

Bus 001 Device 009: ID 1199:9079 Sierra Wireless, Inc. Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A
Dle dokumentace by tento modem by měl mít rychlost až 480Mbit/s, to ovšem také záleží na parametrech mobilní sítě.

Výpis informaci při bootu nebo připojení zařízení (dmesg):

[ 1216.502735] usb 1-2: USB disconnect, device number 2
[ 1216.502950] qcserial ttyUSB0: Qualcomm USB modem converter now disconnected from ttyUSB0
[ 1216.502981] qcserial 1-2:1.0: device disconnected
[ 1216.503078] qcserial ttyUSB1: Qualcomm USB modem converter now disconnected from ttyUSB1
[ 1216.503091] qcserial 1-2:1.2: device disconnected
[ 1216.503582] qcserial ttyUSB2: Qualcomm USB modem converter now disconnected from ttyUSB2
[ 1216.503592] qcserial 1-2:1.3: device disconnected
[ 1216.503675] cdc_mbim 1-2:1.12 wwp0s20f0u2i12: unregister 'cdc_mbim' usb-0000:00:14.0-2, CDC MBIM
[ 1224.113147] usb 1-2: new high-speed USB device number 6 using xhci_hcd
[ 1224.240134] usb 1-2: config 1 has an invalid interface number: 12 but max is 4
[ 1224.240148] usb 1-2: config 1 has an invalid interface number: 13 but max is 4
[ 1224.240152] usb 1-2: config 1 has an invalid interface number: 13 but max is 4
[ 1224.240156] usb 1-2: config 1 has no interface number 1
[ 1224.240158] usb 1-2: config 1 has no interface number 4
[ 1224.240739] usb 1-2: New USB device found, idVendor=1199, idProduct=9079, bcdDevice= 0.06
[ 1224.240745] usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1224.240750] usb 1-2: Product: Sierra Wireless EM7455 Qualcomm Snapdragon X7 LTE-A
[ 1224.240753] usb 1-2: Manufacturer: Sierra Wireless, Incorporated
[ 1224.240757] usb 1-2: SerialNumber: LF62957506021014
[ 1224.247935] qcserial 1-2:1.0: Qualcomm USB modem converter detected
[ 1224.248032] usb 1-2: Qualcomm USB modem converter now attached to ttyUSB0
[ 1224.248496] qcserial 1-2:1.2: Qualcomm USB modem converter detected
[ 1224.248597] usb 1-2: Qualcomm USB modem converter now attached to ttyUSB1
[ 1224.249076] qcserial 1-2:1.3: Qualcomm USB modem converter detected
[ 1224.249180] usb 1-2: Qualcomm USB modem converter now attached to ttyUSB2
[ 1224.271148] cdc_mbim 1-2:1.12: cdc-wdm0: USB WDM device
[ 1224.271366] cdc_mbim 1-2:1.12 wwan0: register 'cdc_mbim' at usb-0000:00:14.0-2, CDC MBIM, 6a:7d:82:89:28:28
[ 1224.332605] cdc_mbim 1-2:1.12 wwp0s20f0u2i12: renamed from wwan0

Kromě toho modem obsahuje i GPS, kterou jsem však já zatím nezprovoňoval.

LTE modemy

Dnešní modemy jsou moderní pokročila zařízení, která umí mnohem víc a lépe než staré kusy. Ale i tak je stále možno snimi komunikovat pomocí tzv. AT příkazů. AT příkazy jsou způsob jak řídit a konfigurovat modemy případně i jiná zařízení, která komunikuji po sériové lince.

I modem EM7455 umožňuje konfiguraci pomocí AT příkazů a tak je možno vyčítat a upravovat jeho konfiguraci. Ovšem jako moderní zařízení umožňuje i další způsoby a je potřeba se v tom vyznat, aby člověk věděl co dělá. A i proto vznikl tento článek s návodem jak na moderní LTE modem.

Moderní modemy včetně modemu EM7455 umožňují komunikovat pomocí protokolu QMI nebo MBIM K této komunikaci v Linuxu slouží nástroje mbimcli qmicli, které je potřeba nainstalovat. V distribuci Mageia balíček urpmi libqmi-utils.

Slajdy z přednášky QMI, MBIM moderní modemy v Linuxu - doporučuji přečíst! Jsou tam vizuálně znázorněny jednotlivé technologie a znárodněny vrstvy a jak mezi sebou komunikují.

První komunikace s modemy

V jakém stavu je modem zjistíte příkazem:

qmicli -d /dev/cdc-wdm0 --dms-swi-get-usb-composition
[/dev/cdc-wdm0] Successfully retrieved USB compositions:
            USB composition 6: DM, NMEA, AT, QMI
        [*] USB composition 8: DM, NMEA, AT, MBIM
            USB composition 9: MBIM
Jak vidno modem muže být také ve stavu kdy bude komunikovat jenom v módu MBIM.

Možnosti, které obsahují "DM, NMEA, AT," znamenají, že zároveň modem vytvoří tři virtuální USB sériové linky pro komunikaci: diagnostika, GPS a AT příkazy.

/dev/ttyUSB0 - Diagnotics Monitoring (DM) port
/dev/ttyUSB1 = GPS NMEA port
/dev/ttyUSB2 - AT commands

Zařízení modemu v systému představuje tento soubor: /dev/cdc-wdm0

Komunikace pomocí QMI se mě nepodařilo zprovoznit, takže pro další použití já používám MBIM. Používám stav včetně sériových linet pro GPS a AT příkazy.
Přepínání mezi těmito stavy se dělá příkazem:

qmicli -d /dev/cdc-wdm0 --dms-swi-set-usb-composition=6
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=reset
A po restartu modemu, již komunikuje jiným způsobem a (ne)jsou vidět v systému výše zmíněné sériové porty.

Podrobné informace o modemu zjistíte příkazem:

mbimcli -d /dev/cdc-wdm0 --query-device-caps --verbose

Před upgradem firmwaru vypadal výpis informací takto:

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Sent message (translated)...
<<<<<< Header:
<<<<<<   length      = 48
<<<<<<   type        = command (0x00000003)
<<<<<<   transaction = 2
<<<<<< Fragment header:
<<<<<<   total   = 1
<<<<<<   current = 0
<<<<<< Contents:
<<<<<<   service = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
<<<<<<   cid     = 'device-caps' (0x00000001)
<<<<<<   type    = 'query' (0x00000000)

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Received message...
>>>>>> RAW:
>>>>>>   length = 196
>>>>>>   data   = 03:00:00:80:C4:00:00:00:02:00:00:00:01:00:00:00:00:00:00:00:A2:89:CC:33:BC:BB:8B:4F:B6:B0:13:3E:C2:AA:E6:DF:01:00:00:00:00:00:00:00:94:00:00:00:03:00:00:00:01:00:00:00:01:00:00:00:02:00:00:00:3C:00:00:00:03:00:00:00:01:00:00:00:08:00:00:00:00:00:00:00:00:00:00:00:40:00:00:00:1E:00:00:00:60:00:00:00:28:00:00:00:88:00:00:00:0C:00:00:00:30:00:31:00:34:00:35:00:38:00:32:00:30:00:30:00:31:00:38:00:33:00:39:00:39:00:31:00:30:00:00:00:53:00:57:00:49:00:39:00:58:00:33:00:30:00:43:00:5F:00:30:00:32:00:2E:00:32:00:34:00:2E:00:30:00:35:00:2E:00:30:00:36:00:45:00:4D:00:37:00:34:00:35:00:35:00

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Received message (translated)...
>>>>>> Header:
>>>>>>   length      = 196
>>>>>>   type        = command-done (0x80000003)
>>>>>>   transaction = 2
>>>>>> Fragment header:
>>>>>>   total   = 1
>>>>>>   current = 0
>>>>>> Contents:
>>>>>>   status error = 'None' (0x00000000)
>>>>>>   service      = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
>>>>>>   cid          = 'device-caps' (0x00000001)
>>>>>> Fields:
>>>>>>   DeviceType = 'remote'
>>>>>>   CellularClass = 'gsm'
>>>>>>   VoiceClass = 'no-voice'
>>>>>>   SimClass = 'removable'
>>>>>>   DataClass = 'umts, hsdpa, hsupa, lte'
>>>>>>   SmsCaps = 'pdu-receive, pdu-send'
>>>>>>   ControlCaps = 'reg-manual'
>>>>>>   MaxSessions = '8'
>>>>>>   CustomDataClass = '(null)'
>>>>>>   DeviceId = '014582001839910'
>>>>>>   FirmwareInfo = 'SWI9X30C_02.24.05.06'
>>>>>>   HardwareInfo = 'EM7455'

[/dev/cdc-wdm0] Device capabilities retrieved:
Device type: 'remote'
Cellular class: 'gsm'
Voice class: 'no-voice'
SIM class: 'removable'
Data class: 'umts, hsdpa, hsupa, lte'
SMS caps: 'pdu-receive, pdu-send'
Ctrl caps: 'reg-manual'
Max sessions: '8'
Custom data class: 'unknown'
Device ID: '014582001839910'
Firmware info: 'SWI9X30C_02.24.05.06'
Hardware info: 'EM7455'
[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Sent message...
<<<<<< RAW:
<<<<<<   length = 12
<<<<<<   data   = 02:00:00:00:0C:00:00:00:03:00:00:00

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Sent message (translated)...
<<<<<< Header:
<<<<<<   length      = 12
<<<<<<   type        = close (0x00000002)
<<<<<<   transaction = 3

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] Received message...
>>>>>> RAW:
>>>>>>   length = 16
>>>>>>   data   = 02:00:00:80:10:00:00:00:03:00:00:00:00:00:00:00

[24 kvě 2020, 16:58:42] [Debug] [/dev/cdc-wdm0] channel destroyed
[24 kvě 2020, 16:58:42] [Debug] Device closed

Upgade firmware

Dle Internetu ze začátku byly modemy se starým firmwarem, který byl problematický, proto byl nutný upgrade firmwaru. Já u všech zařízeních firmware rovnou aktualizuji, takže i tady jsem rovnou provedl update firmwaru.
Vycházel jsem z zde: návodu ThinkPad EM7455 flash firmware.

V modemu může být nahráno několik verzí firmwaru. Výpis informací, jaký firmware je nahrán v modemu a jaký firmware se používá, se dá provést příkazy:

    qmicli -p -d /dev/cdc-wdm0 --dms-get-firmware-preference
    qmicli -p -d /dev/cdc-wdm0 --dms-list-stored-images

Flash firmwaru

Adresa, kde je ke stažení firmware pro LTE modem EM7455

Přesuneme se do adresáře s daty firmwaru a flash firmwaru provedete následujícím příkazem:

qmi-firmware-update -d 1199 -u *.cwe *.nvu

Výpis průběhu falshování:

[root@FreeTux SWI9X30C_02.33.03.00_Sierra_001.023_000]#  qmi-firmware-update -d 1199 -u *.cwe *.nvu
loading device information before the update...
setting firmware preference:
firmware version: '02.33.03.00'
config version:   '001.023_000'
carrier:          'SIERRA'
rebooting in download mode...
download mode detected
downloading cwe image: SWI9X30C_02.33.03.00.cwe (64,4 MB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 73,60s (875,4 kB/s)
downloading cwe image: SWI9X30C_02.33.03.00_SIERRA_001.023_000.nvu (3,4 kB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 0,05s (63,4 kB/s)
rebooting in normal mode...
normal mode detected

------------------------------------------------------------------------
NOTE: in order to validate which is the firmware running in the
module, the program will wait for a complete boot; this process
may take some time and several retries.
------------------------------------------------------------------------

waiting some time for the device to boot...
loading device information after the update (1/12)...

------------------------------------------------------------------------

original firmware revision was:
SWI9X30C_02.24.05.06 r7040 CARMD-EV-FRMWR2 2017/05/19 06:23:09
original running firmware details:
Model: EM7455
Boot version: SWI9X30C_02.24.05.06
AMSS version: SWI9X30C_02.24.05.06
SKU ID: 1102782
Carrier ID: 1
Config version: 002.026_000
original firmware preference details:
image 'modem': unique id '002.026_000', build id '02.24.05.06_GENERIC'
image 'pri': unique id '002.026_000', build id '02.24.05.06_GENERIC'

new firmware revision is:
SWI9X30C_02.33.03.00 r8209 CARMD-EV-FRMWR2 2019/08/28 20:59:30
new running firmware details:
Model: EM7455
Boot version: SWI9X30C_02.33.03.00
AMSS version: SWI9X30C_02.33.03.00
SKU ID: 1102782
Carrier ID: 182
Config version: 001.023_000
new firmware preference details:
image 'modem': unique id '001.023_000', build id '02.33.03.00_SIERRA'
image 'pri': unique id '001.023_000', build id '02.33.03.00_SIERRA'

NOTE: this device supports stored image management
with qmicli operations:
--dms-list-stored-images
--dms-select-stored-image
--dms-delete-stored-image

NOTE: this device supports firmware preference management
with qmicli operations:
--dms-get-firmware-preference
--dms-set-firmware-preference

------------------------------------------------------------------------

firmware update operation finished successfully
==========================

Výpis informací irmware po upgradu:

[13 čen 2020, 10:19:29] [Debug] opening device...
[13 čen 2020, 10:19:29] [Debug] [/dev/cdc-wdm0] Queried max control message size: 4096
[13 čen 2020, 10:19:29] [Debug] [/dev/cdc-wdm0] Sent message...
<<<<<< RAW:
<<<<<<   length = 16
<<<<<<   data   = 01:00:00:00:10:00:00:00:01:00:00:00:00:10:00:00

[13 čen 2020, 10:19:29] [Debug] [/dev/cdc-wdm0] Sent message (translated)...
<<<<<< Header:
<<<<<<   length      = 16
<<<<<<   type        = open (0x00000001)
<<<<<<   transaction = 1
<<<<<< Contents:
<<<<<<   max control transfer = 4096

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Received message...
>>>>>> RAW:
>>>>>>   length = 16
>>>>>>   data   = 01:00:00:80:10:00:00:00:01:00:00:00:00:00:00:00

[13 čen 2020, 10:19:32] [Debug] MBIM Device at '/dev/cdc-wdm0' ready
[13 čen 2020, 10:19:32] [Debug] Asynchronously querying device capabilities...
[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Sent message...
<<<<<< RAW:
<<<<<<   length = 48
<<<<<<   data   = 03:00:00:00:30:00:00:00:02:00:00:00:01:00:00:00:00:00:00:00:A2:89:CC:33:BC:BB:8B:4F:B6:B0:13:3E:C2:AA:E6:DF:01:00:00:00:00:00:00:00:00:00:00:00

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Sent message (translated)...
<<<<<< Header:
<<<<<<   length      = 48
<<<<<<   type        = command (0x00000003)
<<<<<<   transaction = 2
<<<<<< Fragment header:
<<<<<<   total   = 1
<<<<<<   current = 0
<<<<<< Contents:
<<<<<<   service = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
<<<<<<   cid     = 'device-caps' (0x00000001)
<<<<<<   type    = 'query' (0x00000000)

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Received message...
>>>>>> RAW:
>>>>>>   length = 196
>>>>>>   data   = 03:00:00:80:C4:00:00:00:02:00:00:00:01:00:00:00:00:00:00:00:A2:89:CC:33:BC:BB:8B:4F:B6:B0:13:3E:C2:AA:E6:DF:01:00:00:00:00:00:00:00:94:00:00:00:03:00:00:00:01:00:00:00:01:00:00:00:02:00:00:00:3C:00:00:00:03:00:00:00:01:00:00:00:08:00:00:00:00:00:00:00:00:00:00:00:40:00:00:00:1E:00:00:00:60:00:00:00:28:00:00:00:88:00:00:00:0C:00:00:00:30:00:31:00:34:00:35:00:38:00:32:00:30:00:30:00:31:00:38:00:33:00:39:00:39:00:31:00:30:00:00:00:53:00:57:00:49:00:39:00:58:00:33:00:30:00:43:00:5F:00:30:00:32:00:2E:00:33:00:33:00:2E:00:30:00:33:00:2E:00:30:00:30:00:45:00:4D:00:37:00:34:00:35:00:35:00

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Received message (translated)...
>>>>>> Header:
>>>>>>   length      = 196
>>>>>>   type        = command-done (0x80000003)
>>>>>>   transaction = 2
>>>>>> Fragment header:
>>>>>>   total   = 1
>>>>>>   current = 0
>>>>>> Contents:
>>>>>>   status error = 'None' (0x00000000)
>>>>>>   service      = 'basic-connect' (a289cc33-bcbb-8b4f-b6b0-133ec2aae6df)
>>>>>>   cid          = 'device-caps' (0x00000001)
>>>>>> Fields:
>>>>>>   DeviceType = 'remote'
>>>>>>   CellularClass = 'gsm'
>>>>>>   VoiceClass = 'no-voice'
>>>>>>   SimClass = 'removable'
>>>>>>   DataClass = 'umts, hsdpa, hsupa, lte'
>>>>>>   SmsCaps = 'pdu-receive, pdu-send'
>>>>>>   ControlCaps = 'reg-manual'
>>>>>>   MaxSessions = '8'
>>>>>>   CustomDataClass = '(null)'
>>>>>>   DeviceId = '014582001839910'
>>>>>>   FirmwareInfo = 'SWI9X30C_02.33.03.00'
>>>>>>   HardwareInfo = 'EM7455'

[/dev/cdc-wdm0] Device capabilities retrieved:
              Device type: 'remote'
           Cellular class: 'gsm'
              Voice class: 'no-voice'
                SIM class: 'removable'
               Data class: 'umts, hsdpa, hsupa, lte'
                 SMS caps: 'pdu-receive, pdu-send'
                Ctrl caps: 'reg-manual'
             Max sessions: '8'
        Custom data class: 'unknown'
                Device ID: '014582001839910'
            Firmware info: 'SWI9X30C_02.33.03.00'
            Hardware info: 'EM7455'
[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Sent message...
<<<<<< RAW:
<<<<<<   length = 12
<<<<<<   data   = 02:00:00:00:0C:00:00:00:03:00:00:00

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Sent message (translated)...
<<<<<< Header:
<<<<<<   length      = 12
<<<<<<   type        = close (0x00000002)
<<<<<<   transaction = 3

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] Received message...
>>>>>> RAW:
>>>>>>   length = 16
>>>>>>   data   = 02:00:00:80:10:00:00:00:03:00:00:00:00:00:00:00

[13 čen 2020, 10:19:32] [Debug] [/dev/cdc-wdm0] channel destroyed
[13 čen 2020, 10:19:32] [Debug] Device closed

Volba firmwaru

Výběr použitého firmwaru, se dá provést příkazem např:

qmicli -d /dev/cdc-wdm0 --dms-select-stored-image=modem3,pri1
Zálěží pod jakým číslem je firmware v modemu uložen. Firmware jde i z modemu mazat viz dokumentace v odkazech.

PIN

Z konzole je možno i zadávat a nastavovat PIN SIM karty atd. Osobně jsem to však nezkoušel. Příkaz pro získávání stavu PINu:

qmicli -d /dev/cdc-wdm0 --dms-uim-get-pin-status

Nastavení systému pro funkční modem EM7544

To že zařízení může být v několika módech a můžete se s ním komunikovat různými utilitami a má různé komunikační periferie ( sériová linka a AT příkazy vs zařízení) a různé komunikační protokoly, mě velmi mátlo. Nyní už máte přehled o tom co modem umožňuje.
AT příkazy pro zprovoznění vůbec není třeba používat. Pouze je třeba mít zařízení v módu MBIM a k tomu danou utilitu.
Další problém bylo, že ač Mageia používá network applet na pozadí běžel i network manager, který modem používal a tak modem blokoval nebo komunikace sním mě velmi pomalou odezvu. Takže network manager jsem deaktivoval a najednou se pokusy se zprovozněním měli rychlou odezvu.

Protože pro komunikaci s modem nepoužívám proxy, tak je potřeba volat ulility bez tohoto parametru -p!

EM7544 online

Tento návod popisuje nastavení, když modem komunikuje protokolem MBIM. Proto jsem nastavil modem do tohoto módu (v tomto případě mód č 8). A toto nastavení zůstane i po restartu modemu nebo notebooku.

Stav jestli je modem ON nebo OFF zjistíte příkazem:

qmicli -p -d /dev/cdc-wdm0 --dms-get-operating-mode
Po změně většiny nastavení je potřeba podem restartovat(reset běhu). Příkazy na změnu stavu modemu a reset:
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=offline
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=online
qmicli -d /dev/cdc-wdm0 --dms-set-operating-mode=reset

Modem je potřeba přepnout do módu online - což dělá konfigurační/připojovací skript pak automaticky. Ale je problém, že po restartu modemu/notebooku při pokusu o změnu na stav online modem vypisuje error hlášku:

couldn't set operating mode: QMI protocol error (60):
EM7455 je potreba poslat specialni prikaz FCC_AUTH
Pro je potřeb zadat příkaz:
qmicli  -d /dev/cdc-wdm0  --dms-set-fcc-authentication
Toto je potřeba provést po po každém rebootu notebooku restartu modemu před připojením do mobilní sítě!

Nastavení připojení

Já mám zatím mobilní Internet od Vodafone, proto nastavuji přihlašovací údaje viz níže. Vytvořil jsem konfigurační soubor /etc/qmi-network.conf a do něj zapsal:

APN=internet
Samozřejmě je možnost tam zapsat i další konfigurační volby například uživatele a jeho heslo.

Jak spouštět připojení do LTE sítě a jak konfigurovat zařízení a síť je mnoho možností a jde to dělat i ručně. Já jsem jsem však po mnoha pokusech zakotvil existujícího skript, který volá existující nástroje a nastavuje IP konfiguraci sítě z přijatých dat od operátora včetně nastavené DNS. Používám upravený fork skriptu, který modem EM7455 připojí k LTE a nakonfiguruje síť.

Skript vlastně volá

mbim-network /dev/cdc-wdm0 start
Stav připojení můžete zjistit příkazem:
mbim-network /dev/cdc-wdm0 status
Následně skript získá informace o spojení a jak nastavit sít včetně IP. Tyto informace dostane modem od operátora po navázání spojení. Ručně můžete tyto informace vyčíst příkazem a tejný příkaz volá i připravený skript:
mbimcli -d /dev/cdc-wdm0 --query-ip-configuration --no-open=11 --no-close
Tyto data pro nastavení sítě skript vyparsuje a nastaví IP adresy síťového rozhraní a DNS servery. A mobilní Internet najednou začne fungovat. Uživatel už může spouštět vše jen pomocí příkazu:
lte_start
Pro vypnutí mobilní internetu je příkaz:
lte_stop
Tyto skripty jsou v daném GIT repozitáři podadresáři ./usr/local/bin/.

AT příkazy

Připojit se na sériovou konzoli modemu lze následujícím příkazem:

screen /dev/ttyUSB2 115200

Pomocí AT příkazů můžete upravovat parametry modemu, resetovat modem, upravovat jeho identifikaci jakožto USB zařízení atd..
Zadávání příkazů pak může vypadat například takto:

ATE1
AT!ENTERCND="A710"
AT!CUSTOM?
AT!CUSTOM="FASTENUMEN",2
AT!CUSTOM="FASTENUMEN",0
AT!PCOFFEN?
AT!PCOFFEN=2
AT!RESET
Pro konfiguraci, připojení k sítí a zprovoznění mobilního Internetu však AT příkazy nejsou potřeba, Podrobnosti jak na na AT příkazy a jaké příkazy jsou možné viz odkazy na konci článku.

QMI

Tuto komunikaci jsem úspěšně nerozběhal, proto se o ní podrobně nerozepisuji. Pro QMI existují obdobné utility a to: qmi-network, qmicli atd...

rfkill

Jako každy notebook i ThinkPad X1 Carbon umožňuje softwarově vypínat periferie. K romu slouží nástroj rfkill

Následujícím příkazem vypíšete dostupná zařízení a vypnete zařízení č. 1.

rfkill list all
rfkill unblock 1

Network manager

Chvíli jsem zkoušel i NetwokManager. K němu existuje konzolová utilita mmcli.
Použít se dají například takovéto příkazy:

mmcli -L
mmcli -m 0

systemctl status ModemManager
systemctl status NetworkManager

mmcli -m 0 --simple-connect="apn=internet"

# fuguje az po spusteni network manageru
mmcli -m 0 --create-bearer="apn=internet"

mmcli -m 0 --simple-disconnect

mmcli -m 0 -b 0 -c

vypis
mmcli -m 0 -b 0
O jejich funkčnosti se však nebudu rozepisovat viz dokumentace.

Dle logu atd se zdá, že i pomocí něho se dá připojit ovšem i tak je pak potřeba nakonfigurovat síťové rozhraní.
Zobrazení výpis logu:

journalctl --follow -u ModemManager -u NetworkManager
Dokázal jsem se tak dostat do stavu, že v logu bylo vidět že spojení je online a jaké hodnoty IP mám ručně natavit síťi.
kvě 30 20:01:15 FreeTux ModemManager[6279]: Address: 10.183.56.65/30
kvě 30 20:01:15 FreeTux ModemManager[6279]: Gateway: 10.183.56.66
kvě 30 20:01:15 FreeTux ModemManager[6279]: DNS #1: 217.77.165.211
kvě 30 20:01:15 FreeTux ModemManager[6279]: DNS #2: 217.77.165.81
kvě 30 20:01:15 FreeTux ModemManager[6279]: MTU: 1500

NetwokManager podporuje i GPS. Viz následující příkazy:

mmcli -m 1 --location-status
mmcli -m 1 --location-enable-gps-nmea
Více opět viz dokumentace.

Zdá se, že Network Manager podporuje QMI i MBIM. Více jsem se tím však nezabýval a podrobnosti viz dokumentace!

Jak vypnout NetworkManager v distribuci Mageia.

Další

Na notebooku Thinkpad X1 carbon mě zatím pozlobila poze jedna věc: při přehravání videa se objevovalo problikavani obrazu. Pomohlo upravit nastavení kompositoru. V KDE nastavení jsem změnil vykreslování z opengl na xrandr .

Odkazy

Skriptu, který modem EM7455 připojí k Internetu
Slajdy: QMI, MBIM moderní modemy v Linuxu
návodu ThinkPad EM7455 flash firmware.
Stažení firmware pro LTE modem EM7455

Zdroje

Github repozitář a informace o nastavení modemu Sierra
mbimcli
mbim-network
how-to-set-up-a-simple-data-connection-over-the-mbim-interface-using-libmbim-and-driver-cdc-mbim-in-linux
AT příkazy a modem EM7455

Další zajímavé odkazy

3g-4g-modems raspberry-pi-sierra-wireless-mc7304-modem-qmi-interface-setup
Skript swi_setusbcomp.pl, který komunikuje s binárně s modem
Skript pro ThinkPad X220, který nastavuje modem
Modem Sierra EM7455 a NetworkManager

Články na podobné téma

Operační systém GNU/Linux
Jak začít správně používat Docker
Příprava linuxového serveru pro běh webové aplikaci v jazyce Python
Jak řešit špatný výkon sdílených souborů u Dockeru
GitLab - nástroj na správu, verzování, CI/CD a vedení projektů
Instalace Linuxu na dedikovaný server HPE ProLiant DL320e
Jak provést zátěžový test webové aplikace
Proč používat filesystém JFS
Jak bootovat z 4TB disku s GTP pomocí UEFI
Jak nainstalovat operační systém Magei Linux bez DVD mechaniky
Souborový systém Btrfs
Raspberry PI
Jak zprovoznit vzdálené přehrávání přes síť na televizi s DLNA
Upgrade Mandriva Linuxu za běhu
Poznámky ke GNU/Linux
WINE - spouštíme programy pro Windous pod Linuxem
Yocto Project: Build vlastního operačního sytému pro embedded zařízení
Lenovo ThinkPad X1 Carbon: zprovoznění LTE modemu EM7544
Docker a Cron
Virtualizace Proxmox