/ lenovo

Installation, Firmware Upgrade, and Setup of a Sierra Wireless Card on a Lenovo X1 from Linux

lenovo | x1 | opensuse | linux | tumbleweed | systemd | modemmanager | firmware

Adding a WWAN to your laptop may seem like a waste of time, money, and effort. WiFi is just about everywhere and most "smartphones" have hotspot capabilities built into them these days, however, sometimes a modem is just easier, makes more sense for you, or you simply want it (my case)! This post will cover the setup for a wireless modem on a 4th generation X1 Carbon running GNU/Linux (OpenSUSE Tumbleweed). The card I wanted to break into many little pieces but now love is a "Sierra Wireless EM7455". This post is the culmination of days of frustration and it's my hope that someone with a similar set of problems stumbles upon these ramblings and doesn't have to go through the same ordeal.

If you've found this post and are simply wanting to know how to install new firmware from Linux for a Sierra Wireless WWAN device, skip to the bottom of the post.

Pre-Work

I assume you have a WWAN card, if you need to purchase one you can get them from wherever. I picked mine up from Amazon but their all over the place. Just make sure you get one that is specifically compatible with system you're installing it into. Lenovo uses a hardware whitelist for radios making it next to impossible to use anything else. Before purchasing the part I made sure it was compaible using the Lenovo site as my source of truth.

The first thing to do is to install the wireless card, which if you're reading this post I assume you've done this. If you've not physically installed the WWAN card, review the service guide.

Once the WWAN card is installed and before powering the system back on, insert a SIM card into the back of the laptop.

add-sim-card

Before we dig into the system, power on the system and enter the BIOS. Once in the BIOS make sure that the WWAN device is detected and enabled. After the modem is confirmed to be enabled, save any BIOS modifications made and exit. With the system booted, and all the confidence of a high school graduate, Let's begin!

Basic software install

Assuming NetworkManager is being used, the WWAN card may already be detected. If it's not detected install ModemManager.

openSUSE
# zypper in libqmi-tools ModemManager

Verify the packages are installed.

# rpm -qa | grep -i -e modem -e libqmi
ModemManager-shell-completion-1.6.12-2.2.x86_64
libKF5ModemManagerQt6-5.47.0-1.1.x86_64
libqmi-glib5-1.20.0-2.2.x86_64
ModemManager-lang-1.6.12-2.2.noarch
libqmi-tools-1.20.0-2.2.x86_64
ModemManager-1.6.12-2.2.x86_64
Ubuntu
apt install modemmanager libqmi-utils

Verify the packages are installed.

# dpkg -l | grep -i -e modem -e libqmi
ii  libmm-glib0:amd64                   1.6.4-1ubuntu0.16.04.1                     amd64        D-Bus service for managing modems - shared libraries
ii  libqmi-glib5:amd64                  1.16.2-1ubuntu0.16.04.1                    amd64        Support library to use the Qualcomm MSM Interface (QMI) protocol
ii  libqmi-proxy                        1.16.2-1ubuntu0.16.04.1                    amd64        Proxy to communicate with QMI ports
ii  libqmi-utils                        1.16.2-1ubuntu0.16.04.1                    amd64        Utilities to use the QMI protocol from the command line
ii  modemmanager                        1.6.4-1ubuntu0.16.04.1                     amd64        D-Bus service for managing modems

With the required packages installed, make sure ModemManager is started.

systemctl start ModemManager

Verify the service is started.

systemctl status ModemManager

● ModemManager.service - Modem Manager
   Loaded: loaded (/usr/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-07-17 15:12:09 CDT; 6h ago
 Main PID: 3590 (ModemManager)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/ModemManager.service
           ├─3590 /usr/sbin/ModemManager
           └─3596 /usr/lib/mbim-proxy

Jul 17 20:16:07 cloudnull-x1 ModemManager[3590]: [/dev/cdc-wdm0] Read max control message size from descriptors file: 4096
Jul 17 20:16:20 cloudnull-x1 ModemManager[3590]: [/dev/cdc-wdm0] channel destroyed
Jul 17 20:16:25 cloudnull-x1 ModemManager[3590]: <info>  Creating modem with plugin 'Sierra' and '5' ports
Jul 17 20:16:25 cloudnull-x1 ModemManager[3590]: <info>  Modem for device at '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2' successfully created
Jul 17 20:16:25 cloudnull-x1 ModemManager[3590]: opening device...
Jul 17 20:16:25 cloudnull-x1 ModemManager[3590]: [/dev/cdc-wdm0] Read max control message size from descriptors file: 4096
Jul 17 20:16:26 cloudnull-x1 ModemManager[3590]: <info>  Modem: state changed (unknown -> disabled)
Jul 17 20:52:57 cloudnull-x1 ModemManager[3590]: <info>  Couldn't check support for device at '/sys/devices/pci0000:00/0000:00:14.0/usb2/2-4/2-4.1/2-4.1.3': not supported by any plugin

With the basic packages installed and services started, add a broadband network connection. For me, this will be done within NetworkManager. This process within NetworkManager is super simple. Add a connection, select broadband.

add-mobile-broadband

Then choose a provider or add in a custom one.

add-mobile-broadband-provider

Follow the rest of the steps based on the provider, and voila! Everything is setup and is supposed to be working...

Everything is supposed to just work!

Once the broadband connection is added try and connect. If it works you're done! High five someone and go purchase a lottery ticket. If it sits and spins making you feel like connecting to a mobile broadband provider is a lost cause, you're not alone; keep reading.

Enter the Firmware

Because why would anything ever be easy, most Sierra Wireless cards allowed to be used in an X1 Carbon come from the Sierra Wireless factory with broken firmware. If the card was not installed by the folks at the Lenovo factory, it's likely got broken the firmware and there's no amount of sifting through logs or poking things in sysfs that will make the WWAN work. However, with a bit of typie-typie we can make it go.

Here's everything needed, in six simple steps:

Download new firmware

Before trying to download anything, STOP. In order to download the firmware from Sierra Wireless you MUST signup for an account to "the source" and you MUST be logged in. Head over to the registration page before going any further.

sierra-wireless-sign-up

Once an account has been created, verified (check your email), and you've logged into to the account go to the Sierra Wireless Firmware Download page and select your provider, in most cases this will be "Generic".

sierra-wireless-download

With the provider selected proceed to download the firmware.

sierra-wireless-download-generic-firmware

Once the firmware has been downloaded, extract it into a temporary folder.

# mkdir -p /tmp/firmware

### THE LOCATION AND NAME OF THIS FILE MAY BE DIFFERENT ON YOUR SYSTEM DO NOT JUST COPY AND PASTE THIS
# mv ~/Downloads/SWI9X30C_02.24.05.06_Generic_002.026_000.zip /tmp/firmware/

# cd /tmp/firmware/

### SEE THE ABOVE NOTICE
# unzip SWI9X30C_02.24.05.06_Generic_002.026_000.zip 
Archive:  SWI9X30C_02.24.05.06_Generic_002.026_000.zip
  inflating: SWI9X30C_02.24.05.06.cwe  
  inflating: SWI9X30C_02.24.05.06_GENERIC_002.026_000.nvu  

# ls
SWI9X30C_02.24.05.06.cwe  SWI9X30C_02.24.05.06_GENERIC_002.026_000.nvu  SWI9X30C_02.24.05.06_Generic_002.026_000.zip

Install new firmware

Now that the firmware is downloaded and ready to be installed, let's gather a couple pieces of information from the system before continuing.

The first thing to check is to see if the modem is "Hardware Blocked". To do this use the rfkill command to list all of the radio devices.

# rfkill list all
0: tpacpi_bluetooth_sw: Bluetooth
        Soft blocked: no
        Hard blocked: no
1: tpacpi_wwan_sw: Wireless WAN
        Soft blocked: no
        Hard blocked: yes
2: phy0: Wireless LAN
        Soft blocked: no
        Hard blocked: no
5: hci0: Bluetooth
        Soft blocked: no
        Hard blocked: no

The ID number for my "Wireless WAN" is 1. This ID number is used in the following unblock command.

# rfkill unblock 1

Now list the modem details.

# mmcli -L 

Found 1 modems:
        /org/freedesktop/ModemManager1/Modem/2 [Sierra] MBIM [1199:9079]

Note the last number in the path, this is the ID number of the modem. Show the detailed information from the modem and write down the "primary port".

# mmcli -m 2

/org/freedesktop/ModemManager1/Modem/2 (device id 'XXXXXX')
  -------------------------
  Hardware |   manufacturer: 'Sierra'
           |          model: 'MBIM [1199:9079]'
           |       revision: 'SWI9X30C_02.24.05.06'
           |      supported: 'gsm-umts, lte'
           |        current: 'gsm-umts, lte'
           |   equipment id: 'XXXXXX'
  -------------------------
  System   |         device: '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2'
           |        drivers: 'cdc_mbim, qcserial'
           |         plugin: 'Sierra'
           |   primary port: 'cdc-wdm0'
           |          ports: 'ttyUSB0 (qcdm), ttyUSB2 (at), cdc-wdm0 (mbim), wwp0s20f0u2i12 (net)'
  -------------------------
  Numbers  |           own : 'unknown'
  -------------------------
  Status   |           lock: 'none'
           | unlock retries: 'sim-pin2 (10)'
           |          state: 'disabled'
           |    power state: 'low'
           |    access tech: 'unknown'
           | signal quality: '0' (cached)
  -------------------------
  Modes    |      supported: 'allowed: 3g, 4g; preferred: none'
           |        current: 'allowed: 3g, 4g; preferred: none'
  -------------------------
  Bands    |      supported: 'unknown'
           |        current: 'unknown'
  -------------------------
  IP       |      supported: 'ipv4, ipv6, ipv4v6'
  -------------------------
  3GPP     |           imei: 'XXXXXX'
           |  enabled locks: 'fixed-dialing'
           |    operator id: 'unknown'
           |  operator name: 'unknown'
           |   subscription: 'unknown'
           |   registration: 'unknown'
  -------------------------
  SIM      |           path: '/org/freedesktop/ModemManager1/SIM/2'

  -------------------------
  Bearers  |          paths: 'none'

In my case the primary port is "cdc-wdm0" and the device can be verified like so.

# stat /dev/cdc-wdm0
  File: /dev/cdc-wdm0
  Size: 0               Blocks: 0          IO Block: 4096   character special file
Device: 6h/6d   Inode: 292638      Links: 1     Device type: b4,b0
Access: (0600/crw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2018-07-17 20:16:06.336059487 -0500
Modify: 2018-07-17 20:16:06.336059487 -0500
Change: 2018-07-17 20:16:06.336059487 -0500
 Birth: -

Armed with the required information, stop the ModemManager service.

systemctl stop ModemManager

Install the new firmware using the primary port information as the value of the --tty flag and the specific file path for both the cwe and nvu files (this will take some time).

# qmi-firmware-update -u --tty=/dev/cdc-wdm0 --device-open-mbim /tmp/firmware/SWI9X30C_02.24.05.06.cwe /tmp/firmware/SWI9X30C_02.24.05.06_GENERIC_002.026_000.nvu

loading device information before the update...
setting firmware preference:
  firmware version: '02.24.05.06'
  config version:   '002.026_000'
  carrier:          'GENERIC'
rebooting in download mode...
download mode detected
downloading cwe image: SWI9X30C_02.24.05.06.cwe (64.4 MB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 73.75s (873.7 kB/s)
downloading cwe image: SWI9X30C_02.24.05.06_GENERIC_002.026_000.nvu (3.9 kB)...
finalizing download... (may take more than one minute, be patient)
successfully downloaded in 0.05s (72.2 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: 1103158
      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.24.05.06 r7040 CARMD-EV-FRMWR2 2017/05/19 06:23:09
   new running firmware details:
      Model: EM7455
      Boot version: SWI9X30C_02.24.05.06
      AMSS version: SWI9X30C_02.24.05.06
      SKU ID: 1103158
      Carrier ID: 1
      Config version: 002.026_000
   new 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'

   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

Reset the card

Using the same primary port, "cdc-wdm0", reset the device.

# qmicli -p -d /dev/cdc-wdm0 --device-open-mbim --dms-set-operating-mode=reset

[/dev/cdc-wdm0] Operating mode set successfully

Restart the ModemManager service

Now that the firmware has been installed, start ModemManager.

# systemctl restart ModemManager

Validate the service is running.

# systemctl status ModemManager

● ModemManager.service - Modem Manager
   Loaded: loaded (/usr/lib/systemd/system/ModemManager.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2018-07-17 22:20:27 CDT; 927ms ago
 Main PID: 18601 (ModemManager)
    Tasks: 4 (limit: 4915)
   CGroup: /system.slice/ModemManager.service
           └─18601 /usr/sbin/ModemManager

Jul 17 22:20:27 cloudnull-x1 systemd[1]: Starting Modem Manager...
Jul 17 22:20:27 cloudnull-x1 ModemManager[18601]: <info>  ModemManager (version 1.6.12) starting in system bus...
Jul 17 22:20:27 cloudnull-x1 systemd[1]: Started Modem Manager.

Restart the NetworkManager service

With ModemManager restarted, restart NetworkManager.

# systemctl restart NetworkManager

Validate the service is running.

# systemctl status NetworkManager
● NetworkManager.service - Network Manager
   Loaded: loaded (/usr/lib/systemd/system/NetworkManager.service; enabled; vendor preset: disabled)
  Drop-In: /usr/lib/systemd/system/NetworkManager.service.d
           └─NetworkManager-ovs.conf
   Active: active (running) since Tue 2018-07-17 22:21:33 CDT; 2s ago
     Docs: man:NetworkManager(8)
 Main PID: 18716 (NetworkManager)
    Tasks: 5 (limit: 4915)
   CGroup: /system.slice/NetworkManager.service
           ├─18716 /usr/sbin/NetworkManager --no-daemon
           └─18768 /sbin/dhclient -d -q -sf /usr/lib/nm-dhcp-helper -pf /var/run/dhclient-eth0.pid -lf /var/lib/NetworkManager/dhclient-3c27eeb3-ae4d-4de0-97bf-c1b23f4064e9-eth0.lease -cf /var/lib/NetworkManager/d>

Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3613] device (eth0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'assume')
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3675] device (eth0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'assume')
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3682] device (eth0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'assume')
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3688] manager: NetworkManager state is now CONNECTED_LOCAL
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3707] manager: NetworkManager state is now CONNECTED_SITE
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3709] policy: set 'HomeEthernet' (eth0) as default for IPv4 routing and DNS
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.3711] policy: set 'HomeEthernet' (eth0) as default for IPv6 routing and DNS
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: nisdomainname: you must be root to change the domain name
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.5470] device (eth0): Activation: successful, device activated.
Jul 17 22:21:34 cloudnull-x1 NetworkManager[18716]: <info>  [1531884094.9001] manager: NetworkManager state is now CONNECTED_GLOBAL

Validate the Card

# mmcli -L 

Found 1 modems:
        /org/freedesktop/ModemManager1/Modem/0 [Sierra] MBIM [1199:9079]

Again, note the last number in the path, which is the ID number of the modem. Show the detailed information from the modem and make sure the "Status" looks similar.

# mmcli -m 0

/org/freedesktop/ModemManager1/Modem/0 (device id 'XXXXXX')
  -------------------------
  Hardware |   manufacturer: 'Sierra'
           |          model: 'MBIM [1199:9079]'
           |       revision: 'SWI9X30C_02.24.05.06'
           |      supported: 'gsm-umts, lte'
           |        current: 'gsm-umts, lte'
           |   equipment id: 'XXXXXX'
  -------------------------
  System   |         device: '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2'
           |        drivers: 'cdc_mbim, qcserial'
           |         plugin: 'Sierra'
           |   primary port: 'cdc-wdm0'
           |          ports: 'ttyUSB0 (qcdm), ttyUSB2 (at), cdc-wdm0 (mbim), wwp0s20f0u2i12 (net)'
  -------------------------
  Numbers  |           own : 'unknown'
  -------------------------
  Status   |           lock: 'none'
           | unlock retries: 'sim-pin2 (10)'
           |          state: 'disabled'
           |    power state: 'low'
           |    access tech: 'unknown'
           | signal quality: '0' (cached)
  -------------------------
  Modes    |      supported: 'allowed: 3g, 4g; preferred: none'
           |        current: 'allowed: 3g, 4g; preferred: none'
  -------------------------
  Bands    |      supported: 'unknown'
           |        current: 'unknown'
  -------------------------
  IP       |      supported: 'ipv4, ipv6, ipv4v6'
  -------------------------
  3GPP     |           imei: 'XXXXXX'
           |  enabled locks: 'fixed-dialing'
           |    operator id: 'unknown'
           |  operator name: 'unknown'
           |   subscription: 'unknown'
           |   registration: 'unknown'
  -------------------------
  SIM      |           path: '/org/freedesktop/ModemManager1/SIM/2'

  -------------------------
  Bearers  |          paths: 'none'

Begin enjoying your modem

With the new firmware installed, return to the NetworkManager connection panel and connect to your Mobile Broadband Provider we setup earlier. Once enable the connection it should take about 60 seconds to establish the new connection to the mobile provider.

To see how things are going from within the system the ModemManager and NetworkManager unit files can be followed, the output on a successful connection will look something like so:

# journalctl --follow -u ModemManager -u NetworkManager

Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1248] modem["cdc-wdm0"]: modem state changed, 'connecting' --> 'connected' (reason: user-requested)
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1377] device (cdc-wdm0): state change: prepare -> config (reason 'none', sys-iface-state: 'managed')
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1387] device (cdc-wdm0): state change: config -> ip-config (reason 'none', sys-iface-state: 'managed')
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1406] modem-broadband[cdc-wdm0]: IPv4 static configuration:
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1407] modem-broadband[cdc-wdm0]:   address XXX.XXX.XXX.XXX/YY
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1408] modem-broadband[cdc-wdm0]:   gateway XXX.XXX.XXX.XXX
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1408] modem-broadband[cdc-wdm0]:   DNS XXX.XXX.XXX.XXX
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1408] modem-broadband[cdc-wdm0]:   DNS XXX.XXX.XXX.XXX
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1455] modem-broadband[cdc-wdm0]: IPv6 base configuration:
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1456] modem-broadband[cdc-wdm0]:   address XXX::YYY/64
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1457] modem-broadband[cdc-wdm0]:   gateway XXX::YYY
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1457] modem-broadband[cdc-wdm0]:   DNS XXX::YYY
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1457] modem-broadband[cdc-wdm0]:   DNS XXX::YYY
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1544] device (cdc-wdm0): state change: ip-config -> ip-check (reason 'none', sys-iface-state: 'managed')
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1578] device (cdc-wdm0): state change: ip-check -> secondaries (reason 'none', sys-iface-state: 'managed')
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.1582] device (cdc-wdm0): state change: secondaries -> activated (reason 'none', sys-iface-state: 'managed')
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: nisdomainname: you must be root to change the domain name
Jul 17 22:36:14 cloudnull-x1 NetworkManager[18716]: <info>  [1531884974.3413] device (cdc-wdm0): Activation: successful, device activated.

Additionally, the mmcli command will show a changed state of "connected" if everything is working.

# mmcli -m 0

/org/freedesktop/ModemManager1/Modem/0 (device id 'XXXXXX')
  -------------------------
  Hardware |   manufacturer: 'Sierra'
           |          model: 'MBIM [1199:9079]'
           |       revision: 'SWI9X30C_02.24.05.06'
           |      supported: 'gsm-umts, lte'
           |        current: 'gsm-umts, lte'
           |   equipment id: 'XXXXXX'
  -------------------------
  System   |         device: '/sys/devices/pci0000:00/0000:00:14.0/usb1/1-2'
           |        drivers: 'cdc_mbim, qcserial'
           |         plugin: 'Sierra'
           |   primary port: 'cdc-wdm0'
           |          ports: 'ttyUSB0 (qcdm), ttyUSB2 (at), cdc-wdm0 (mbim), wwp0s20f0u2i12 (net)'
  -------------------------
  Numbers  |           own : 'unknown'
  -------------------------
  Status   |           lock: 'none'
           | unlock retries: 'sim-pin2 (10)'
           |          state: 'connected'
           |    power state: 'on'
           |    access tech: 'lte'
           | signal quality: '12' (cached)
  -------------------------
  Modes    |      supported: 'allowed: 3g, 4g; preferred: none'
           |        current: 'allowed: 3g, 4g; preferred: none'
  -------------------------
  Bands    |      supported: 'unknown'
           |        current: 'unknown'
  -------------------------
  IP       |      supported: 'ipv4, ipv6, ipv4v6'
  -------------------------
  3GPP     |           imei: 'XXXXXX'
           |  enabled locks: 'fixed-dialing'
           |    operator id: 'unknown'
           |  operator name: 'unknown'
           |   subscription: 'unknown'
           |   registration: 'unknown'
  -------------------------
  SIM      |           path: '/org/freedesktop/ModemManager1/SIM/2'

  -------------------------
  Bearers  |          paths: 'none'

Pro-Tip

Now that everything is working it's time to celebrate, however, I do have a one tip to keeping everything working as expected. Since getting my modem functional I've had a few times where connecting after a reboot simply didn't work on the first attempt. The logs indicated that the modem was "busy". I'm not sure what was causing that state however restarting ModemManager fixed it. Anytime ModemManager is restarted it may take a few minutes for the modem to return to an online state. Use the mmcli tool and check the state of the device as needed.

That's all folks

I hope this post is helpful and leaves you with more hair than it did me. While the general mobile broadband support in Linux is great the documentation and debug output is SUPER suspect. It took me a while to get here, and I'm a little greyer because of it. However, now that my Sierra Wireless "EM7455" is functional it's been amazingly fast and stable; I'm going to use it just about every chance I get, business trips, working from the local coffee shops, sitting in the backyard, wherever! If you've liked this post or have questions reach out, hit me up on twitter, let me know what you think.


Kevin Carter

Kevin Carter

I'm me! Developer, Operator, Cloud Builder, Lover of Open Source, and hater of Nonsense (I know they're all related, leave me alone).

Read More