A 3G modem with GPS support built into some IBM/Lenovo ThinkPad laptops.
See also https://www.thinkwiki.org/wiki/Qualcomm_Gobi_2000
You can verify the ID with lsusb
, on mine it's 05c6:9204
. Take note of it, it's going to be important later.
Install gobi-loader
from the AUR or whatever package manager your distro uses. It should have the necessary udev rules to load the necessary firmware at boot.
gobi-firmware
from the repos, it likely has the wrong firmware. Instead, install it manually as described below.
all of this could easily be a PKGBUILD
Next, obtain a copy of 7xwc48ww.exe, unpack it with innoextract
and msitools
, and copy the necessary files in the correct place.
innoextract 7xwc48ww.exe -I app/Driver/GobiInstaller.msi msiextract -C GobiInstaller app/Driver/GobiInstaller.msi cd GobiInstaller/Images/Lenovo sudo mkdir -p /lib/firmware/gobi sudo cp 6/* /lib/firmware/gobi sudo cp UMTS/* /lib/firmware/gobi
This copies the generic ones, refer to this table if you have a carrier in the list.
Now you can reboot. If successful, the ID in lsusb
should change to 05c6:9205
, and you should have 3 devices starting with /dev/ttyUSB
instead of only one. You should now be able to use it with ModemManager.
Create these two files, and make the script executable.
#!/bin/sh stty -F $1 speed 9600 echo "\$GPS_START" > $1
SUBSYSTEM=="tty", ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9205", SYMLINK+="gobi%n" GOTO="gobigps" GOTO="gobigps_end" LABEL="gobigps" ATTRS{bInterfaceNumber}=="02", SYMLINK+="modem" ATTRS{bInterfaceNumber}=="03", SYMLINK+="gps", RUN+="/etc/udev/enable_gps $devnode" LABEL="gobigps_end"
sudo chmod +x /etc/udev/enable_gps
You should now be able to see NMEA data out of /dev/gps
. If it doesn't, try with another set of firmware. Then, you can use gpsd and sync time with ntp.
GPSD_OPTIONS="-n" DEVICES="/dev/gps"
sudo systemctl enable gpsd sudo systemctl start gpsd cgps -s
use geoclue to get google maps working?
Start gpsd, then add something like this to your chrony.conf:
refclock SHM 0 delay 0.0 refid NMEA
sudo systemctl enable chronyd sudo systemctl start chronyd watch -n1 chronyc sources