Setting up EVDO in Linux

January 29th, 2008 | by MPGehrisch |

Verizon and Sprint began rolling out EVDO on their networks a few years ago. While they are still continuing to expand their 3G data services, they have been able to cover the majority of their service areas with their wireless broadband services. Verizon refers to their EVDO service as “BroadbandAccess” or “vCast”. Sprint uses the term “Power Vision” for their 3G data service.

For some, EVDO means the ability to stay connected or do business anywhere. For others, it is simply be the only broadband connection available in areas that are not serviced by cable or DSL. High speed data plans are a little more expensive than other types of broadband, but they also offer a convenience and flexibility that has never been possible before.

If you run Microsoft Windows or Apple’s MacOS X, both Verizon and Sprint offer device drivers and connection manager software for your computer. If you want to use these services with Linux, you aren’t quite so lucky. In order to use your EVDO connection under Linux, you will have to set it up manually. If you use a USB or PCMCIA based EVDO air card, the card will have to be initialized on a Windows or MacOS machine before it can be used in Linux. You may be able to talk your local Sprint or Verizon rep into initializing the card for you at the store if necessary.

The instructions in this article are based on setting up an EVDO connection in Kubuntu 7.10. The device is an AirPrime PC5220 from Verizon. The concepts will be the same, and the procedure will be very similar with other Linux distributions, aircards, and carriers.

The PC5220, like most EVDO cards and handsets, looks and operates like a serial modem. From this point forward, I will refer to these devices as EVDO modems. The majority of these EVDO modems use the usbserial driver. If your distribution does not include the usbserial driver, you may need to install or compile a custom kernel in order to add it. The Ubuntu family of distributions includes this driver module by default.

When you connect your EVDO modem to the computer, the system does not know which driver to use. We can fix this problem by adding a single line to the file /etc/modules. For the PC5220 card, the line is:

usbserial vendor=0xf3d product=0×0112 maxsize=2048

This line tells the system to load the usbserial driver for the device that matches this vendor and product ID. The maxsize=2048 argument can help with data throughput on the serial port if your kernel module supports it. If not, the maxsize argument will be ignored.

If you are not using a PC5220 card, you will need to find the vendor and product ID for your card. To do so, you can use the lsusb command from the command line. Look through the output of the lsusb command and find the line for your EVDO modem. For my Airprime card, the line looked like this:

ID 0f3d:0112 Airprime, Incorporated CDMA 1xEVDO PC Card, PC5220

As you can see, right after ID, the first number (0f3d) is the vendor code, the second (0112) is the product code. I don’t know why it is necessary to add the x’s to the usbserial arguments, but if you follow the pattern it should work.

After you edit /etc/modules, save the file, disconnect your phone, wait a few seconds, and reconnect it. You could also reboot to be absolutely sure that the updated info gets read when you connect your phone, but it isn’t necessary.

The next step is to edit /etc/ppp/options. Look for any configuration lines that start with “lcp”. You will want to comment those lines out by adding a # in front of them. By commenting out those lines, you disable lcp packets which can help solve problems with random disconnects.

Once the phone is reconnected, you will need to setup your PPP connection. Some users prefer to write shell scripts to handle the connections, and others prefer to use the GUI tools that are available. For my setup, I opted to use the kPPP dialer that is included in KDE.

Run kPPP and click configure. First, select the modem tab. You need to give the modem that you’re setting up a name. The name is arbitrary, but something simple like EVDO works well. In the device drop down, select /dev/ttyusb0.  This part may vary by device.  I have a Samsung A900 phone that uses the device /dev/ttyusb2.

After you setup your EVDO modem in kPPP, you can create a new dial-up account. For Verizon, dial #777. The username will be:, where the x’s are your device’s 10 digit phone number. The password to connect is vzw.  For Sprint, which does not require a unique ID, use the word “user” for both the username and the password.  Login information for other carriers is available online if you are not with Verizon or Sprint.

If you are tethering a handset to your computer using a USB cable, I want to add a warning regarding data plans. The cell phone carriers make a distinction between unlimited data plans for the handset and phone as modem (PAM) plans. Most handsets allow the carrier to differentiate between data used on the phone itself, and data used by a computer using the phone as an EVDO modem. If you are going to use your handset as a modem, make sure that you have the correct calling plan. For example, Sprint charges $.03 per kilobyte if you tether your phone to your PC without a PAM plan. That costs $30.72 per megabyte. At that rate, downloading a typical 3 megabyte MP3 file would cost over $90.00 in usage fees on your wireless bill. Be very careful, make sure that you have your plan setup correctly or it could get very expensive.

  1. 8 Responses to “Setting up EVDO in Linux”

  2. By foxx on Mar 29, 2008 | Reply

    Absolutely FANTASTIC advice, thank you! The lcp packets aren’t handled properly by Verizon and your suggestion to disable it outright (or set to 65535 for the wait interval, depending on needs) in the /etc/ppp/options was fantastic, fixed the disconnect after two minutes beautifully.

  3. By Sergey on Apr 27, 2008 | Reply

    Do anybody know how setup UBIQUAM UM-300 evdo modem?
    This advice doesn’t help.

    2.6.25 kernel
    modprobe usbserial vendor=0x015d product=0x4c45
    No usb servial device….

    lspcmcia -v
    Socket 0 Bridge: [yenta_cardbus] (bus ID: 0000:02:00.0)
    Configuration: state: on ready: yes
    Voltage: 3.3V Vcc: 3.3V Vpp: 3.3V
    Socket 0 Device 0: [-- no driver --] (bus ID: 0.0)
    Configuration: state: on
    Product Name: Ubiquam UM-300
    Identification: manf_id: 0x015d card_id: 0x4c45
    function: 254 (unknown)
    prod_id(1): “Ubiquam” (0x6eaf573c)
    prod_id(2): “UM-300″ (0x71ca2fc9)
    prod_id(3): — (—)
    prod_id(4): — (—)
    Socket 0 Device 1: [-- no driver --] (bus ID: 0.1)
    Configuration: state: on
    Product Name: Ubiquam UM-300
    Identification: manf_id: 0x015d card_id: 0x4c45
    function: 254 (unknown)
    prod_id(1): “Ubiquam” (0x6eaf573c)
    prod_id(2): “UM-300″ (0x71ca2fc9)
    prod_id(3): — (—)
    prod_id(4): — (—)

  4. By MPGehrisch on Apr 27, 2008 | Reply

    I’m not familiar with that card. Something to try that might give you a little more information is to run dmesg before you insert the card, then insert the card and run dmesg again without running modprobe first. You might find some information there. It would let you know if the system is detecting that device as some other type of hardware.


  5. By Dominique on Jun 3, 2008 | Reply

    I am using the same evdo card (Verizon AirPrime PC5220),connected to the my pc through a u132 elan pc card adapter running on ubuntu 7.10.The system recognize the card adapter automatically and load necessary driver for it…how to deal with the inserted modem card in this scenario ? lsusb,lspcmcia don’t display anything about it

  6. By MPGehrisch on Jul 12, 2008 | Reply

    I’m not familiar with that Elan adapter.

    I know that the PC-5220 adds a USB controller to your system. The card then hangs a USB to serial adapter on that USB controller.

    For instance, in my system, the chain would be:

    PCI bus > PCMCIA controller > Lucent USB controller > USB serial port adapter > Airprime serial modem

    In your system, the chain would be:

    Motherboard USB controller > PCMCIA controller > Lucent USB controller > USB serial port adapter > Airprime serial modem

    You may be running into problems when you daisy chain two USB controllers. I don’t know for sure, since I don’t have the hardware here to play with, but off the top of my head, it seems to be the only thing I can think of that would keep the second USB controller from being detected and displayed by lsusb.


  7. By Zack K. on Dec 18, 2008 | Reply

    I am running Linux Mint 5 w/ KDE. I was able to load the drivers for my Sierra USB727 and kppp recognizes it, and “connects”, however, it will only do a very small amount of data transfer (like 64 bytes in and 97 bytes out) upon connecting and then nothing. I’ve double checked my settings in kppp, but everything you mentioned is entered correctly. I was wondering if some of the unmentioned fields in the modem configuration need to be set to something specific. For instance, Flow Control, Line termination, anything like that. The ID and Vendor code are 1410:4100.


  8. By MPGehrisch on Jan 22, 2009 | Reply

    I apologize that its taken me so long to respond. It is possible that you might have better results using a different driver than usbserial. I believe an alternative could be the cdc-acm driver. I don’t know if it will fix your problem, but it’s worth looking into.


  9. By B. Peterson on Feb 15, 2009 | Reply

    I would love if someone could give me some advice. I have a Verizon Wireless USB727 USB modem. I use it on my PC (the computer I’m on now) as my only method of internet access.
    I recently wiped a laptop and installed Ubuntu 8.04 (Hardy Heron) on it. I’ve looked for a way to use it with my Ubuntu laptop, and everything seems to be either very technical, or it requires an internet connection.

    Obviously, I don’t have an internet connection on that computer, which is why I’m trying to get the USB modem to work. Also, I’m entirely new when it comes to Ubuntu/Linux.

    If anyone can tell me a way to get my USB device to work on my laptop in simple, idiot-proof language, I’d really, really appreciate it.

Post a Comment