Huawei E220 (also called vodem) is an external 3.6Mbps HSDPA USB modem.
See also: Modem/3G, VodafoneMobileConnectCardDriverForLinux.
Kernel
2.6.20
E220 is supported natively by Linux Kernel 2.6.20 or higher, over usbserial.ko (usbserial-generic) interface.
Also usb_storage.ko is aware of HUAWEI E220 modem and no further action needs to be taken.
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 dial the modem with:
wvdial hsdpa
Older kernels
There are workarounds for distributions with older kernels, eg for Debian etch's 2.6.18 (http://oozie.fm.interia.pl/pro/huawei-e220/ , http://javaaddict.blogspirit.com/archive/2006/12/31/huawei-e220-working-on-linux.html , http://www.kernel.org/pub/linux/kernel/people/gregkh/usb/2.6/2.6.20-rc1/)
From 2.6.20-rc2-[mm1 version kernel includes in the git tree :
-gregkh-usb-usb-storage-ignore-the-virtual-cd-drive-of-the-huawei-e220-usb-modem.patch
-gregkh-usb-usb-gsm-driver-added-vendorid-and-productid-for-huawei-e220-usb-modem.patch
See :
On older kernels this utility :
http://www.kanoistika.sk/bobovsky/archiv/umts/ can activate the ttyUSBx devices and see this text file.
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. (Incidentally this looks like a job for udev, or hotplug, or something).
The usb-storage device thats built in has the windows drivers, quite clever really, a device that carries its own drivers with it!
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, its an easy way to go.
Script
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
modconf
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.
Ubuntu
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
I've only put in the relevant sections - the full file can be found at the address below this posting.
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.
Do remember the various need for 'sudo' unless you change ownerships/permissions. In particular, 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...)