Skip to content

Commit a4fad69

Browse files
committed
mjg59's gobi_loader-0.7 commit
1 parent 2d09445 commit a4fad69

File tree

4 files changed

+414
-0
lines changed

4 files changed

+414
-0
lines changed

60-gobi.rules

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
# udev rules for firmware loading on qualcomm gobi devices
2+
3+
ACTION=="add", SUBSYSTEM=="tty" KERNEL=="ttyUSB*" GOTO="gobi_rules"
4+
5+
GOTO="gobi_rules_end"
6+
7+
LABEL="gobi_rules"
8+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9211", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
9+
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="201d", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
10+
ATTRS{idVendor}=="04da", ATTRS{idProduct}=="250c", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
11+
ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8171", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
12+
ATTRS{idVendor}=="1410", ATTRS{idProduct}=="a008", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
13+
ATTRS{idVendor}=="0b05", ATTRS{idProduct}=="1774", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
14+
ATTRS{idVendor}=="19d2", ATTRS{idProduct}=="fff2", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
15+
ATTRS{idVendor}=="1557", ATTRS{idProduct}=="0a80", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
16+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9008", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
17+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9201", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
18+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9221", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
19+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9231", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
20+
ATTRS{idVendor}=="1f45", ATTRS{idProduct}=="0001", RUN+="gobi_loader $env{DEVNAME} /lib/firmware/gobi"
21+
ATTRS{idVendor}=="16d8", ATTRS{idProduct}=="8001", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
22+
ATTRS{idVendor}=="1199", ATTRS{idProduct}=="9000", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
23+
ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="241d", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
24+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9204", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
25+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9214", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
26+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9224", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
27+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9234", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
28+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9244", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
29+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9264", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
30+
ATTRS{idVendor}=="05c6", ATTRS{idProduct}=="9274", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
31+
ATTRS{idVendor}=="413c", ATTRS{idProduct}=="8185", RUN+="gobi_loader -2000 $env{DEVNAME} /lib/firmware/gobi"
32+
33+
LABEL="gobi_rules_end"

Makefile

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
VERSION = 0.7
2+
3+
gobi_loader: gobi_loader.c
4+
gcc -Wall gobi_loader.c -o gobi_loader
5+
6+
all: gobi_loader
7+
8+
install: gobi_loader
9+
install -D gobi_loader ${prefix}/lib/udev/gobi_loader
10+
install -D 60-gobi.rules ${prefix}/lib/udev/rules.d/60-gobi.rules
11+
mkdir -p ${prefix}/lib/firmware
12+
-udevadm control --reload-rules
13+
14+
uninstall:
15+
-rm $(prefix)/lib/udev/gobi_loader
16+
-rm $(prefix)/lib/udev/rules.d/60-gobi.rules
17+
18+
clean:
19+
-rm gobi_loader
20+
-rm *~
21+
22+
dist:
23+
mkdir gobi_loader-$(VERSION)
24+
cp gobi_loader.c README Makefile 60-gobi.rules gobi_loader-$(VERSION)
25+
tar zcf gobi_loader-$(VERSION).tar.gz gobi_loader-$(VERSION)
26+
rm -rf gobi_loader-$(VERSION)

README

+62
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
gobi_loader
2+
3+
gobi_loader is a firmware loader for Qualcomm Gobi USB chipsets. These devices
4+
appear in an uninitialised state when power is applied and require firmware
5+
to be loaded before they can be used as modems. gobi_loader adds a udev rule
6+
that will trigger loading of the firmware and make the modem usable.
7+
8+
Installing:
9+
10+
make; make install
11+
12+
You also need the qcserial driver. This is included in kernels 2.6.30 and
13+
later. Ensure that it has the IDs for your device. If not, add a line like
14+
15+
{USB_DEVICE(0x1234, 0x5678)},
16+
17+
to the id_table structure in drivers/usb/serial/qcserial.c and
18+
rebuilt. This device is the firmware loading device and is not usable
19+
as a modem. When loaded, qcserial should create a /dev/ttyUSB
20+
device. Check that /etc/udev/rules.d/60-gobi.rules has an entry for your device
21+
- if not, copy one of the existing lines and change the vendor and product IDs.
22+
Note that a device line is only needed for the firmware loading ID, not the
23+
modem ID.
24+
25+
Now you need the modem firmware. This can be obtained from a Windows
26+
install - alternatively it may be possible to download from your
27+
vendor's site and extracted with wine. You need the amss.mbn and
28+
apps.mbn files corresponding to your mobile provider. For Gobi 2000
29+
devices you also need UQCN.mbn. As yet, I don't have a good mapping
30+
between devices and the appropriate firmware, so you'll need to figure
31+
this out yourself. Remember that some mobile providers use CDMA and
32+
some use GSM - the CDMA firmware will typically be a smaller file than
33+
the GSM firmware (approximately 5MB for CDMA firmware, approximately
34+
9MB for GSM firmware). On my install, these files could be found in a
35+
QDLService/Packages directory.
36+
37+
Please don't ask me for firmware. It's copyright Qualcomm and I can't
38+
redistribute it.
39+
40+
Copy the appropriate firmware into /lib/firmware/gobi. Unload and
41+
reload the qcserial driver or reboot your machine. Assuming you
42+
installed the application and rules correctly, and assuming that
43+
qcserial and the rules file both contain your modem devices, your
44+
firmware will now load. The firmware loading device will now detach
45+
from your system and reattach with a different ID. If you had to add
46+
the firmware loading device to qcserial.c then you will probably also
47+
need to add the modem device. However, the modem device does not need
48+
to be added to the udev rules file.
49+
50+
A /dev/ttyUSB device will now exist for your modem. Recent versions of
51+
network-manager should automatically pick it up - older versions (and
52+
any other modem management software) may need more assistence.
53+
54+
Author:
55+
56+
This code was writte by Matthew Garrett <[email protected]> and is
57+
released under the terms of version 2 of the GNU General Public
58+
License. It is based on code written by Alexander Shumakovitch and
59+
contains crc generation code from the Linux kernel. Gobi 2000 support
60+
was provided by Anssi Hannula. The code was written by examining USB
61+
traffic dumps under Windows - the Qualcomm drivers or firmware have
62+
not been reverse engineered or disassembled in any way.

0 commit comments

Comments
 (0)