Installation, Firmware Upgrade, and Setup of a Sierra Wireless Card on a Lenovo X1 from Linux
The card I wanted to break into many little pieces but now love is an "Sierra Wireless EM7455". 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.
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.
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.
Then choose a provider or add in a custom one.
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
- Install new firmware
- Reset the card
- Restart the ModemManager service
- Restart the NetworkManager service
- Validate the card
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.
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".
With the provider selected proceed to download the 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.