yukiwiki

Yuki's knowledge base and other stuff

User Tools

Site Tools


gobi2000

Install a Qualcomm Gobi 2000 on a Thinkpad on Linux

A 3G modem with GPS support built into some IBM/Lenovo ThinkPad laptops.

Most carriers turned 3G off already or are going to do so in 2025, so the modem part is going to be useless unless you somehow managed to make your own 3G transmitter. The GPS part should still work, so these instructions should still apply for the foreseeable future, as long as the GPS satellites are still in orbit.

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 software and firmware

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.

Do not install gobi-firmware from the repos, it likely has the wrong firmware. Instead, install it manually as described below.

FIXME 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.

Make the GPS work

Create these two files, and make the script executable.

/etc/udev/enable_gps
#!/bin/sh
stty -F $1 speed 9600
echo "\$GPS_START" > $1
/etc/udev/rules.d/60-gps.rules
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.

Location

/etc/default/gpsd
GPSD_OPTIONS="-n"
DEVICES="/dev/gps"
sudo systemctl enable gpsd
sudo systemctl start gpsd
cgps -s

FIXME use geoclue to get google maps working?

Time

If you're trying to sync time with ntp or chrony, be aware this GPS does not support PPS signals, so while it can be roughly accurate to within a second, it's definitely not going to be more accurate as using NTP servers on the Internet.

Start gpsd, then add something like this to your chrony.conf:

/etc/chrony.conf
refclock SHM 0 delay 0.0 refid NMEA
sudo systemctl enable chronyd
sudo systemctl start chronyd
watch -n1 chronyc sources
gobi2000.txt · Last modified: 2025/03/07 17:15 by Yuki