Huawei E220 in Gutsy Gibbon (Kubuntu)
Posted on 05 Dec, 2007, categorized under Information Insemination
I received a package earlier today, and was very happy to find out that it’s the Huawei E220 that I ordered few days ago. This Huawei E220 is a 3G card that supports speed of up to 3.6 Mbps, using HSDPA technology, and it makes me can’t wait to have it work with Gutsy Gibbon. After struggling for quite some time, I found out that the answer to my problem was just these two lines of command:
sudo modprobe -r uhci_hcd sudo modprobe uhci_hcd
If that short version of my solution doesn’t help, please read ahead…
I’ve been trying to get this modem to work with Gutsy Gibbon, but the online howtos that I found on the net doesnt reliably work for me.
Weird enough for me initially as sometime I can just use wvdial (more on this afterward) and get connected, while most of the time I got various errors about the modem. With these non-reproducible errors and successes, I do some trial and error while looking at the kernel logs, and came up with this one final observation;
shakir@herugrim ~ $ uname -r # just to show the kernel I'm using, as your mileage may vary 2.6.22-14-generic
At one shell I run this to see kernel messages;
sudo tail -f /var/log/messages
and got this messages upon plugging in my Huawei E220 to the USB port;
usb 3-1: new full speed USB device using uhci_hcd and address 5 usb 3-1: configuration #1 chosen from 1 choice usbcore: registered new interface driver libusual usbcore: registered new interface driver usbserial /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial support registered for generic usbcore: registered new interface driver usbserial_generic /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial Driver core /build/buildd/linux-source-2.6.22-2.6.22/drivers/usb/serial/usb-serial.c: USB Serial support registered for GSM modem (1-port) option 3-1:1.0: GSM modem (1-port) converter detected usb 3-1: GSM modem (1-port) converter now attached to ttyUSB0
Nice, it has detected my Huawei E220 as GSM modem, and attach it to /dev/ttyUSB0. Let’s create a wvdial configuration to connect to the telco (Celcom in my case). My /etc/wvdial.conf looks like this;
[Dialer Celcom3G] Phone = *99***1# Modem = /dev/ttyUSB0 Username = user Password = pass ISDN = 0 New PPPD = yes Baud = 1843200 Init2 = ATZ Init3 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Modem Type = Analog Modem
So let’s just connect;
shakir@herugrim ~ $ sudo wvdial Celcom3G WvDial<*1>: WvDial: Internet dialer version 1.56 WvModem<*1>: Cannot get information for serial port. WvDial<*1>: Initializing modem. WvDial<*1>: Sending: ATZ WvDial<*1>: Sending: ATQ0 WvDial<*1>: Re-Sending: ATZ WvDial: Modem not responding.
Ouch, an error. The modem has been detected, what could go wrong? After some time, and no success with the available tutorials, I finally got this working, as the problem was related to the USB drivers. What I did was to reload the uhci_hcd module
shakir@herugrim ~ $ sudo modprobe -r uhci_hcd
Lets take a look at what the kernel says about this;
[..snipped..] Dec 4 22:45:24 herugrim kernel: [ 1343.504000] usb 3-1: USB disconnect, address 6 Dec 4 22:45:24 herugrim kernel: [ 1343.504000] option1 ttyUSB0: GSM modem (1-port) converter now disconnected from ttyUSB0 Dec 4 22:45:24 herugrim kernel: [ 1343.504000] option 3-1:1.0: device disconnected [..snipped..]
and then lets load the module back again
shakir@herugrim ~ $ sudo modprobe uhci_hcd
and see what happens;
USB Universal Host Controller Interface driver v3.0 ACPI: PCI Interrupt 0000:00:1a.0[A uhci_hcd 0000:00:1a.0: UHCI Host Controller [..snipped..] usb 3-1: new full speed USB device using uhci_hcd and address 2 usb 3-1: configuration #1 chosen from 1 choice option 3-1:1.0: GSM modem (1-port) converter detected usb 3-1: GSM modem (1-port) converter now attached to ttyUSB0 option 3-1:1.1: GSM modem (1-port) converter detected usb 3-1: GSM modem (1-port) converter now attached to ttyUSB1 option 3-1:1.2: GSM modem (1-port) converter detected usb 3-1: GSM modem (1-port) converter now attached to ttyUSB2 [..snipped..]
Last time the GSM modem was attached to just /dev/ttyUSB0, but now it’s also attached to /dev/ttyUSB1 and /dev/ttyUSB2. And I guess it’s time to connect using wvdial;
WvDial<*1>: WvDial: Internet dialer version 1.56 WvModem<*1>: Cannot get information for serial port. WvDial<*1>: Initializing modem. WvDial<*1>: Sending: ATZ WvDial Modem<*1>: ATZ WvDial Modem<*1>: OK WvDial<*1>: Sending: ATZ WvDial Modem<*1>: ATZ WvDial Modem<*1>: OK WvDial<*1>: Sending: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 WvDial Modem<*1>: ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 WvDial Modem<*1>: OK WvDial<*1>: Modem initialized. WvDial<*1>: Sending: ATDT*99***1# WvDial<*1>: Waiting for carrier. WvDial Modem<*1>: ATDT*99***1# WvDial Modem<*1>: CONNECT WvDial<*1>: Carrier detected. Waiting for prompt. WvDial: Don't know what to do! Starting pppd and hoping for the best. WvDial : Starting pppd at Tue Dec 4 22:49:25 2007 WvDial : Pid of pppd: 6433 WvDial<*1>: Using interface ppp0 WvDial<*1>: local IP address 10.188.15.175 WvDial<*1>: remote IP address 10.64.64.64 WvDial<*1>: primary DNS address 202.188.0.133 WvDial<*1>: secondary DNS address 202.188.1.5
It works, yeay
As usual, lets create a script for this;
#!/bin/bash
sudo modprobe -r uhci_hcd
sudo modprobe uhci_hcd
echo "Waiting kernel to detect modem device"
# Wait till the kernel recognizes our E220
while true; do
# Read log
tail -n 20 /var/log/messages > access.history
sleep 1
tail -n 20 /var/log/messages > access.current
LOG=`diff access.history access.current | grep ">" | tr -d ">"`
# Check if it is detected
if [[ "$LOG" =~ "converter now attached to ttyUSB1" ]]; then
echo "Modem device detected, dialing..."
# If it is, get out of the loop immedietly
break
fi
done
rm access.history access.current
# Start dialing
sudo wvdial Celcom3G
p/s: The script is now maintained here. Please go there to see the latest updates and discussions



