Posted on 2007-12-14 21:00:00, modified on 2007-12-17 07:30:00
Tags: Huawei E220, FreeBSD, Networking, 3G
I'm the lucky owner of a Huawei E220 3G USB modem. For certain degrees of lucky that is: Getting it to work has been an interesting challenge.
The E220 is by default (FreeBSD 6.3-BETA) recognized as an umass(4) (USB Mass Storage Device) device. That's true, there is a memory disk in it. It is recognized as /dev/cd0 and you can mount it with mount_cd9660 /dev/cd0 /mnt, giving you 10 megabytes of space.
But that is not what you bought the E220 for. You want to use it
as a modem. You need to change a couple things in your kernel to
get it all working.
First, add a line to /sys/dev/usb/usbdevs:
See the
FreeBSD PR usb/118686 for a full patch.
And to /sys/dev/usb/usba.c:
/* HP products */
product HP2 C500 0x6002 PhotoSmart C500
/* HUAWEI products */
product HUAWEI MOBILE 0x1001 Huawei Mobile
+product HUAWEI E220 0x1003 Huawei E220 HSDPA USB Modem
/* IBM Corporation */
product IBM USBCDROMDRIVE 0x4427 USB CD-ROM Drive
{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3G },
/* Option GlobeTrotter 3G QUAD */
{ USB_VENDOR_OPTION, USB_PRODUCT_OPTION_GT3GQUAD },
/* Huawei Mobile */
{ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_MOBILE },
+{ USB_VENDOR_HUAWEI, USB_PRODUCT_HUAWEI_E220 },
{ 0, 0 }
};
Second, you have to disable the umass(4) device from your kernel configuration and rebuild a new kernel. Will this break things? Most likely, specially when you have USB disks and sticks. But you will load it as a module, which will undo the damage you just did to it. In your /boot/loader.conf, add the following lines:
ubsa_load="YES" umass_load="YES"
ubsa(4) is the USB support for Belkin serial adapter. That sounds more like a modem. Next, reboot the machine and see if all modules are loaded correctly:
# kldstat Id Refs Address Size Name 1 20 0xc0400000 72e17c kernel 2 1 0xc0b2f000 e6a4 if_iwi.ko 3 3 0xc0b3e000 2f9c firmware.ko 4 1 0xc0b41000 6cdc ugen.ko 5 1 0xc0b48000 75b4 umass.ko 6 1 0xc0b50000 7958 ng_ubt.ko 7 2 0xc0b58000 cb78 netgraph.ko 8 1 0xc0b65000 2ef0 ubsa.ko 9 2 0xc0b68000 4374 ucom.ko 10 1 0xc0b6d000 5c304 acpi.ko 11 1 0xc4868000 30000 iwi_bss.ko
Next, plugin your E220 and see what happens:
ucom0: HUAWEI Technologies HUAWEI Mobile, rev 1.10/0.00, addr 2
ucom0: Could not find interrupt in
device_attach: ucom0 attach returned 6
Yes! No! Something is wrong. But a little bit of finger skill will
resolve it:
At the USB modem side of the USB cable (not the computer side!),
carefully pull the cable from the modem and when you see this on
your screen, plug it back in:
ucom0: at uhub1 port 1 (addr 2) disconnected ucom0: HUAWEI Technologies HUAWEI Mobile, rev 1.10/0.00, addr 2
It's loaded! If it doesn't work at the first go, try it a couple
of times more. Once you are without the dreaded "Couldn't find
interrupt in" message you are a happy person.
Check /dev/cuaaU0, it exists! If you have comms/minicom installed, you can do this:
OK ATI Manufacturer: huawei Model: E220 Revision: 11.117.06.00.100 IMEI: 358191018517800 +GCAP: +CGSM,+DS,+ES OK
And if you dial out, you will end up with a whooping 7.2Mbps connection;
OK ATDT *90# CONNECT 7200000
Now it is time to train ppp(1). Add this to your /etc/ppp/ppp.conf:
three: set device /dev/cuaU0 set speed 57600 set phone *99\# set authname set authkey set ifaddr 10.0.0.1/0 10.0.0.2/0 0.0.0.0 0.0.0.0 set vj slotcomp off add default HISADDR
And dial:
$ ppp three ppp> dial Ppp> PPp>
That's not good, there should be three capital P's... Going through the PPP log, you will see that the IPCP layer doesn't get initialized properly. Why? No idea. How to resolve it? Put your USB modem in a windows machine, run it once there and put it back into your FreeBSD machine. Why? No idea. It works. The USB modem didn't work with under MacOS/X neither until I did this trick. Why? No idea. It works.
Dial again:
$ ppp three ppp> dial Ppp> PPp> PPP> $ ifconfig tun0 tun0: flags=8051mtu 1500 inet 119.11.32.164 --> 10.0.0.2 netmask 0xffffffff Opened by PID 22997 $ ping www.freebsd.org PING www.freebsd.org (69.147.83.33): 56 data bytes 64 bytes from 69.147.83.33: icmp_seq=0 ttl=48 time=477.662 ms 64 bytes from 69.147.83.33: icmp_seq=1 ttl=51 time=416.606 ms ^C --- www.freebsd.org ping statistics --- 3 packets transmitted, 2 packets received, 33% packet loss round-trip min/avg/max/stddev = 416.606/447.134/477.662/30.528 ms
Your console and /var/log/messages will be spammed with "kernel: ucom0: usba_request: STALLED" messages for some reason, but it works.
| Share on Facebook | Share on TwitterFrom: | Edwin Groothuis |
URL: | http://www.mavetju.org |
Posted on: | 2007-12-14 20:40:42 |
Comment | See http://docs.freebsd.org/cgi/getmsg.cgi?fetch=84233+0+current/freebsd-usb for some gory details. |
Reply | - |
From: | Edwin Groothuis |
URL: | |
Posted on: | 2007-12-16 20:11:43 |
Comment | See http://www.freebsd.org/cgi/query-pr.cgi?pr=usb/118686 for patches which don't require the taking out of the USB cable anymore but work immediately. |
Reply | - |