the Chromium logo

The Chromium Projects

Cellular modem FAQ

ChromeOS supports Gobi modems via Cromo, and various other modems via Modem Manager. ChromeOS only supports cellular modems that have a cdc_ether (or similar) network interface. This page documents what is useful to know if you wish to bring up new modems and/or GSM carriers.

How do I verify that a modem is seen by Modem Manager?

There are several modem tools that are part of the flimflam-testscripts package. This package is install on test builds. The tools can be found in /usr/local/lib/flimflam/test. The first step is to verify that ChromeOS can see the modem.



You should see something like:

/org/freedesktop/ModemManager/Modems/0 or /org/chromium/Cromo/Gobi/0

What if the modem is not seen by Modem Manager?

How do I get more information about a modem?

Enable the modem and use the mm-status command to get more information about the modem.


modem status

The output will look like:

Path: /org/freedesktop/ModemManager/Modems/0

Iface org.freedesktop.ModemManager.Modem

MasterDevice = /sys/devices/pci0000:00/0000:00:1d.0/usb2/2-1

UnlockRequired =

Enabled = 1

IpMethod = 0

Driver = option1

Device = ttyUSB0

Type = 2




Modem: MC760 SPRINT

Version: Q6085BDRAGONFLY_S122 [Dec 09 2008 18:00:00]



esn = 0x5B96D0FB



CDMA-1x state: 1

EVDO state: 1



Serving System band class: 2

Serving System band: B

Serving System id: 4106



Signal Quality: 100

How do I manually connect a modem?

You can use the mm-connect script to manually connect a modem to a 3G network. If you are using a GSM network you may need to edit mm-connect to add your carrier (APN, number, pin) to the dictionary of connect arguments. Connecting a modem though in most cases only establishes a PDP context between the modem and the carrier. You'll then need to run dhclient on the associated interface.

How do I fix flimflam to recognize my GSM carrier?

Flimflam uses the mobile-broadband-provider-info to find APNs. You can enter your own APN on the UI, or if you find that your APN is missing from the monbile broadband provider info database, file a but at

How do I manually connect via flimflam?

The advantage of using flimflam to connect is that you flimflam will take care of running dhcpcd for you. Using the flimflam scripts one can list the devices, and services. You should be able to verify that a cellular device is listed, and that there is a cellular service. To ask flimflam to connect via the cellular service issues the connect-service command (from /usr/local/lib/flimflam/test):

connect-service cell

There are still some issues in the support of the cdc_ether driver. If the connect-service call fails, try to disconnect, and reissue the connect call. In most cases this will succeed in connecting your 3G modem.

disconnect-service cell
connect-service cell

How do I debug the Gobi kernel module?

To debug the Gobi kernel module, you need to set the gobi_debug module parameter on the gobi module. There are two ways to do this:

To set the parameter temporarily (until the module is unloaded, such as when you reboot), you can use sysfs:

localhost ~ # echo 1 > /sys/module/gobi/parameters/gobi_debug

To set the parameter permanently, you can configure modprobe to set it automatically:

localhost ~ # echo 'options gobi gobi_debug=1' > /etc/modprobe.d/gobi_debug.conf

You can use either 1 or 2 for the debug level. 1 will show most userspace-relevant error conditions, but won't trace most normal behavior; 2 will dump every control packet to and from the card, and will give more detail about normal behavior.

How do I see the GPS stream on a Gobi modem?

To see the GPS stream on a Gobi modem you first have to enable automatic tracking.

 localhost ~ # echo -e -n '$GPS_START' > /dev/ttyUSB2
    localhost ~ # dbus-send --system --print-reply \
     --dest=org.chromium.ModemManager \
     /org/chromium/ModemManager/Gobi/0 \
     org.chromium.ModemManager.Modem.Gobi.SetAutomaticTracking \
     boolean:true boolean:true
localhost ~ # cat /dev/ttyUSB2

and observe the NMEA stream printed on the console.

Then interrupt the stream (^c), and enter

localhost ~ # dbus-send --system --print-reply \
     --dest=org.chromium.ModemManager \
     /org/chromium/ModemManager/Gobi/0 \
     org.chromium.ModemManager.Modem.Gobi.SetAutomaticTracking \
     boolean:false boolean:false
localhost ~ # cat /dev/ttyUSB2

and observe that the stream has been stopped.

Note that we have an autotest which does all that, it should be invoked as follows:

./ --board=<board> --remote=<taregt ip> hardware_GPS/control

What do all those PIN codes do?

There are 8 different kinds of standard PIN codes defined for GSM devices. Two of these apply to the SIM card, and the others apply to the device itself. The following table describes each kind of PIN. Most PINs allow some number of incorrect entries, after which the PIN becomes "blocked". At that point the PIN must be "unblocked" by entering a PUK code. Each PIN type has its own corresponding type of PUK.

SIM locks can be disabled, which is different than unlocking. Unlocking only lasts until the next power cycle. Disabling prevents the SIM from being locked, even following a power cycle. To disable a SIM lock, the SIM PIN must be supplied.

Device locks, also known as personalization locks, restrict usage of the device, as described below. For personalization, there is no distinction between unlocking and disabling. For each type of personalization, there is a code that must be entered. If the correct code is entered, the corresponding device restriction is lifted.

Refer to 3GPP spec TS 22.022 for full details.


How do I run tests on cell modems?

You can run autotests against a live carrier network, or you can use an emulated-network testbed. See Running and Writing Autotests for Cell Emulators and ChromeOS Cellular Testbed Setup.