Translation(s): English - Italiano

Huawei E220

This page describes how to enable support for the Huawei E220 on Debian systems.

The Huawei E220 (also called vodem) is an external 3.6Mbps HSDPA USB modem.


E220 is supported natively in Linux kernels 2.6.20 and later, using the usbserial.ko (usbserial-generic interface) module.

Also usb_storage.ko is aware of HUAWEI E220 modem and no further action needs to be taken.

The following need to be compiled into the kernel (this does work) or available as modules:


You should find three /dev/ttyUSB* devices directly after you plug E220 into a USB port. Configuration files for pppd and Wvdial are included below.

You can then dial the modem with:

wvdial hsdpa

The Modem

The USB device doesn't appear to need any particular new driver. The USB one simply presents as a usb-serial device, provided you tell your kernel to ignore the usb-storage device that it also presents, and treat it as usb-serial. This can be tricky, one suggestion is to disable usb_storage, not much use if you are using USB memory sticks! A solution that works is to use usb-modeswitch.

The USB storage device that's built-in has the Windows drivers, quite clever really, a device that carries its own drivers with it! Which is presumably why the device is seen as being storage when it is plugged in, on Windows machines it then auto runs the drivers that do the rest.

The PCMCIA devices appear to have a PCMCIA-to-USB chip, then link to the usb on board modem chip. Quite a rigmarole, but I suppose if you have an existing USB chip, and PCMCIA-to-USB chips are cheap, it's an easy way to go.


Startup script with the following (or a variant thereof):

modprobe usb-ohci
modprobe usb-uhci
modprobe usbserial vendor=0x12d1 product=0x1001
modprobe usbserial vendor=0x12d1 product=0x1003
mknod /dev/ttyUSB0 c 188 0
mknod /dev/ttyUSB1 c 188 1
mknod /dev/ttyUSB2 c 188 2


You can use modconf to load usbserial drivers with card vendor & id as arguments (if you don't want to #modprobe each time).

Also, you can use some of the available scripts from PHARscape, particularly related to Wvdial usage, and eventually simple ln -s softlink from ttyUSB0 to modem and wvdial with 'internet' argument get you online and jumping for joy.


The Huawei E220 can be a USB 'dongle' for HSDPA connection through (for me, anyway) the Vodaphone network.

When inserted into a Ubuntu OS, it is immediately detected as a SCSI/CDROM type bulk storage device, and the files that are used by Windows appear attached to the filesystem similar to any other USB storage device.

Close any window that might be showing you those files. Then unmount the device (eject the CDROM icon you'll find on the desktop created when you inserted the device).

All commands I give here are just the commands - you will likely need to put 'sudo' in front of them so you have the permissions of root to carry them out...

Insert the device and give it a chance to settle down (enjoy watching the lights flash...)

When you insert the device and it gets recognised as a storage device, it will have created /dev/ttyUSB0. You can see that with:

ls -la /dev/ttyU*

You will likely only see one entry: ttyUSB0.

To make the modem work, you must first remove the module that is used for USB storage devices. You can do that with:

rmmod usb-storage

If you are told it is in use, that is an indication you didn't close windows and eject the device first.

This next command may not be absolutely necessary, but it won't hurt anything (heh, heh...):

rmmod usb-serial

You are now going to re-insert that module, but giving the specific details of your modem. First, make sure you have the right details by using:


You should see an entry similar to this in the output:

Bus 004 Device 004: ID 12d1:1003

The Bus and/or Device number might be different for you, but the important part is the ID. If yours is not 12d1:1003, you'll need to modify the next command, but I *think* it will be either that or 12d1:1001...

This command will insert the module with the device specific details:

modprobe usbserial vendor=0x12d1 product=0x1003

Now, remove the device, wait a bit for things to settle, and then plug it back in.

I *think* you may now have maybe three entries if you do:

ls -la /dev/ttyU*

Basically, what has been done is that you have removed the initial inclination to treat the device only as a bulk storage (removing the module that handles that). You've also manually caused the recognition of the device (using the modprobe command). So that when you re-plugged it, it should now be able to work with the *modem* part of the device addressing it as /dev/ttyUSB0, rather than that being the bulk storage device.

Use a text editor such as pico to edit or create if necessary the file to handle the dialling configuration. My /etc/wvdial.conf file looks like this:

# wvdial for Vodacom Data. Created by Tazz_tux
# Version 1.0

# Change Log:
# Added support for HSDPA.
# Added Headers and version control.

[Dialer Defaults]
Phone = *99***1#
Username = username
Password = password
Stupid Mode = 1
Dial Command = ATDT

[Dialer hsdpa]
Modem = /dev/ttyUSB0
Baud = 460800
Init2 = ATZ
Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
ISDN = 0
Modem Type = Analog Modem

You can dial the modem with:

wvdial hsdpa

If all is happy, you'll see the messages in the terminal window to show how it is connecting, your IP address, your remote gateway and 2 nameservers the network provides for you.

If it looks like you've connected but are not able to connect to any sites, etc, look for a message telling you that /etc/ppp/pap-secrets and /etc/ppp/chap-secrets are not able to be written to - that may well indicate that you for sure need to run the wvdial command as sudo (If you are running it as a normal user, that user would need to have the ability to write to those files for the connection to be able to work...)

See Also

Hardware | Modem