Struggling to get Panasonic Toughbook with EM7355 GPS working with ubuntu

Hey all, I have been banging my head on this for the better part of a week and have made no progress. Any help would be awesome, and I request that you dumb it down a bit as my cmd line skills aren’t quite amazing.

As the title says I’ve got a Panasonic Toughbook CF-20. The unit came used and it has an EM7355 (confirmed by looking at the chip). I purchased the unit based off a youtube video for similar use case (radio digital, mapping, etc.) The author of the youtube video also posted a short how-to on his blog (link) that I followed.

My CF-20 is running Ubuntu 22.04. The EM7355 is on firmware revision SWI9X15C_05.05.58.01 (at least according to mmcli -m 0).

I am able to see the unit in mmcli, and I can see it in lsusb, however lsusb is showing the model as EM7305, rather than the correct EM7355. However, mmcli is reporting it as the correct unit. To add confusion, the system information app is showing the unit as EM 7305, and I’m unable to download any firmware via the ubuntu apps or fwupdmgr.

I’m totally new to this level of “not working”. I downloaded the firmware for EM7355 from Sierra, however I’m unable to figure a way to get them flashed as when I click them they do nothing, and I’ve struggled to find out how to flash from a specific file in ubuntu.

Anything that anyone can do to walk me through this would be awesome!

You can install the gobidriver and use the old sdk to download fw

Sorry for the delay, been a busy few days. I downloaded the linked, but I’m at a complete loss how to install the gobidriver and the FW from there. Is there a doc that walks you through this somewhere?

You can see here for the section about “Device Drivers”,-d-,0/

If you want my personal non-Sierra-official suggestion to this, don’t even attempt to install any Gobi driver or SDK, you’ll completely lose integration with ModemManager+NetworkManager.

You can install firmware for a EM7355 using the qmi-firmware-update tool that comes with libqmi:

  • Download the firmware you want (either a single .spk or a pair of .cwe and .nvu).
  • Stop ModemManager with sudo systemctl stop ModemManager.
  • Run the firmware update program with sudo qmi-firmware-update -p -w /dev/cdc-wdm0 --update FILE1.cwe FILE2.nvu
  • Once flashed, start ModemManager again with sudo systemctl start ModemManager.

Note that there’s no support for any Sierra Wireless modem in the LVFS via fwupd. Others manufacturers like Quectel, Foxconn or Telit already have support, or are working on that. I don’t know about Sierra, but doing an integration re-using the qmi-firmware-update logic wouldn’t be that difficult.

Also note, the fact that lsusb tells you it’s a EM7305 instead of a EM7355 could be because they just use the same vid:pid (don’t even know that, just wondering), and the USB descriptors just report the same string in both. The “real” module type is the one reported in your mmcli output.

And anyway, you’re not saying how the modem is “not working” for you. You said it’s found by ModemManager as per your mmcli test, so what’s the actual problem? How are you trying to connect it? You should setup the connection via NetworkManager, e.g.:

$ nmcli c add type gsm con-name wwan apn <operator_apn>
$ nmcli r wwan on

See Configure Cellular Connections | Ubuntu

1 Like

Is that really a simpler solution for a non-tech-savvy user than using the qmi-firmware-update tool that is already shipped in Ubuntu and works fine with all QMI based Sierra modules (it’s actually only for Sierra modules)?

I know it’s unofficial as it was never backed by Sierra directly, but I’ve really not seen one single module getting bricked using this tool since it was released more than 5 years ago, and it’s currently been used in multiple systems in production environments (just the ones I know of: cars, airplanes, routers, lots of IoT setups…).

1 Like

Thanks for providing the information, for my the device is on wdm3 so I updated that after it failed the first time, and I got a “error: couldn’t open QMI device: Transaction timed out”.

I had to run the command with --ignore-version-errors because I was being told there was a version mismatch, which is odd since I downloaded the .cew and .nvu files direct from Sierra.

I attempted to run the commands at the bottom of your post, however nothing seemed to have happened. I tried to run mmcli -m 0 --enable but I’m getting a “modem in unknown state” error.

I’ve been following the instructions another user put together here. (as previously posted above)

Previously, when I did a --location-get via mmcli, I got no lat or long, I had also tried xgps, and nothing, and the gpsmon -n and also nothing.

Now I’ve made a worse situation somehow, as I’m unable to get even as far as I was previously.

Try a clean boot, and try without any other driver manually installed. Not sure if you did any of that in your system.

What exact error did you get?

Can you post the full mmcli -m a output? It’s a bit hard to guess without all the info.

Just running --location-get does nothing, you also need commands to enable the GNSS engine in the modem, e.g.:

$ sudo mmcli -m a --enable
$ sudo mmcli -m a --location-enable-gps-raw --location-enable-gps-nmea

There are also commands to enable A-GPS.

You first need to make ModemManager properly recognize your modem, then we can continue debugging that further.

Try a clean boot, and try without any other driver manually installed. Not sure if you did any of that in your system.

Do you mean reboot, or reinstall linux? Sorry I’m not familiar with the term clean boot and google wasn’t much help.

What exact error did you get?

So, I restarted again and somehow got it to run via the same cmd (keyboard up, so it wasn’t a mistype)

It took a number of retries but it appears to have taken, now, I ran mmcli -m 0 and here is the output

  General |           path: /org/freedesktop/ModemManager1/Modem/0
  System  |         device: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2
          |        drivers: cdc_mbim
          |         plugin: sierra
          |   primary port: cdc-wdm3
          |          ports: cdc-wdm3 (mbim), wwan0 (net)
  Status  | signal quality: 0% (cached)
  Modes   |      supported: allowed: any; preferred: none
          |        current: allowed: any; preferred: none

However, upon running sudo mmcli -m 0 --enable I get the following error:

error: couldn't enable the modem: 'GDBus.Error:org.freedesktop.ModemManager1.Error.Core.WrongState: modem in unknown state'

So, instead I tried running your command as such:

nmcli c add type gsm con-name wwan apn wholesale

I got the following

Warning: There are 2 other connections with the name 'wwan'. Reference the connection by its uuid 'ed627876-63fd-489a-a37e-6528fbb0ea4f'
Connection 'wwan' (ed627876-63fd-489a-a37e-6528fbb0ea4f) successfully added.

So after, again I tried to run sudo mmcli -m 0 --enable and got the same error as above. It didn’t seem to matter if I used -m 0 or -m a

May have spoken a little too soon, I restarted again after posting this and ran the enable command and was successful, I was able to pull a more detailed -m 0 command and it dumped the following

  General  |              path: /org/freedesktop/ModemManager1/Modem/0
           |         device id: [redacted]
  Hardware |      manufacturer: Sierra Wireless, Incorporated
           |             model: EM7355
           | firmware revision: SWI9X15C_05.05.63.01
           |      h/w revision: EM7355
           |         supported: gsm-umts, lte
           |                    cdma-evdo, lte
           |                    lte
           |                    cdma-evdo, gsm-umts, lte
           |           current: cdma-evdo, gsm-umts, lte
           |      equipment id: [redacted]
  System   |            device: /sys/devices/pci0000:00/0000:00:14.0/usb1/1-2
           |           drivers: cdc_mbim
           |            plugin: sierra
           |      primary port: cdc-wdm4
           |             ports: cdc-wdm4 (mbim), wwan0 (net)
  Status   |    unlock retries: sim-pin2 (3)
           |             state: enabled
           |       power state: on
           |    signal quality: 0% (cached)
  Modes    |         supported: allowed: 2g; preferred: none
           |                    allowed: 3g; preferred: none
           |                    allowed: 2g, 3g; preferred: 3g
           |                    allowed: 2g, 3g; preferred: 2g
           |                    allowed: 2g, 4g; preferred: 4g
           |                    allowed: 2g, 4g; preferred: 2g
           |                    allowed: 3g, 4g; preferred: 4g
           |                    allowed: 3g, 4g; preferred: 3g
           |                    allowed: 2g, 3g, 4g; preferred: 4g
           |                    allowed: 2g, 3g, 4g; preferred: 3g
           |                    allowed: 2g, 3g, 4g; preferred: 2g
           |           current: allowed: 2g, 3g, 4g; preferred: 4g
  Bands    |         supported: utran-1, utran-4, utran-5, utran-8, utran-2, eutran-2, 
           |                    eutran-4, eutran-5, eutran-13, eutran-17, eutran-25, cdma-bc0, 
           |                    cdma-bc1, cdma-bc10
           |           current: utran-1, utran-4, utran-5, utran-8, utran-2, eutran-2, 
           |                    eutran-4, eutran-5, eutran-13, eutran-17, eutran-25, cdma-bc0, 
           |                    cdma-bc1, cdma-bc10
  IP       |         supported: ipv4, ipv6, ipv4v6
  3GPP     |              imei: [redacted]
           |     enabled locks: fixed-dialing
           |      registration: idle
  SIM      |  primary sim path: /org/freedesktop/ModemManager1/SIM/0

I redacted certain fields for obvious reasons.

running the following commands were all successful, but resulted in the same results I was previously getting, here it is again though so you can see.

commands I ran in sequence

$ sudo mmcli -m 0 --enable
$ sudo mmcli -m 0 --location-enable-gps-raw --location-enable-gps-nmea
$ sudo mmcli -m 0 --location-get -J | jq '.modem.location.gps'


  "altitude": "--",
  "latitude": "--",
  "longitude": "--",
  "nmea": [
  "utc": "--"

That’s actually perfect from my point of view. The GNSS engine is enabled, and you receive NMEA traces. Once your $GPGGA trace reports good values, you’ll see latitude, longitude and altitude reports as well. You didn’t enable any kind of A-GPS, so your device will definitely need time to get an initial fixed position; make sure it has a good view of the sky!

Ok, so after waiting patiently for 5-10 minutes it did register an long/lat like I was expecting. This is awesome as it at least means that the device is working. However, I’m experiencing an odd bug now where ubuntu is giving me a “network connection error” popup that is quite annoying. I’ll have to see if I can track that down.

Is there a way to set this gps device up so it’s a little bit faster? What I’m really hoping to do is run mapping software locally, and use the gps to position me on the map, thus not having to rely on network connections when I’m out of range with my vehicle.

I’m also not sure why the NM7355 isn’t registering as a ttyUSB device, as it seems elsewhere that it should? Is there some sort of beginners guide that is written about this stuff anywhere? I’m starting to think that flashing linux on this device wasn’t the best of ideas for my use case but at this point I’m just interested in learning more of how to use it.

This is a firmware configurable thing. And some Windows driver installs will disable the serial functions. Run

qmicli -p -d /dev/cdc-wdm4 --dms-swi-get-usb-composition

to see your current setting. And optionally --dms-swi-set-usb-composition=xx to change it.

1 Like