Huawei e220 on Ubuntu Server
This document describes the Installation procedures for the Huawei E220 HSDPA USB MODEM on a Recent Ubuntu Server install (>8.04)
I got the device from Tango Tele2 www.tele2.lu and YES I am affiliated and NO they have not asked me to write this entry.
Getting it to work under Linux was more or less straight forward, you just need to put the device into modem-mode with a small C program written by a Russian Hacker.
Getting it to work under Mac OS X Leopard requires a few reboots and after that a reconfig of the device to make it a Generic GPRS/3G modem
Post Config:
udev rules gnokiirc wvdial.conf
3rd party tool: huaweiAktBbo
apt-get install libusb-dev wvdial bzip2 ncurses-dev sysv-rc-conf
The huaweiAktBbo is not needed anymore on Ubuntu Intrepid!
get huaweiAktBbo.c
cc -lusb huaweiAktBbo.c -o huaweiAktBbo sudo cp huaweiAktBbo /sbin/
sudo cat << EOF >> /etc/udev/rules.d/50-huawei-e220.rules
SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/sbin/huaweiAktBbo"
SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/bin/sleep 5"
SUBSYSTEM=="usb", SYSFS{idProduct}=="1003", SYSFS{idVendor}=="12d1", RUN+="/sbin/modprobe usbserial vendor=0x12d1 product=0x1003"
EOF/etc/wvdial.conf
# 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
The following is needed to Share your Network Connection
nat-enable.sh
PATH=/usr/sbin:/sbin:/bin:/usr/bin
INTERNET_IF=eth2
LOCAL_IF=eth0
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT
# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! ${INTERNET_IF} -j ACCEPT
iptables -A FORWARD -i ${INTERNET_IF} -o ${LOCAL_IF} -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i ${LOCAL_IF} -o ${INTERNET_IF} -j ACCEPT
# Masquerade.
iptables -t nat -A POSTROUTING -o ${INTERNET_IF} -j MASQUERADE
# Don't forward from the outside to the inside.
iptables -A FORWARD -i ${INTERNET_IF} -o ${INTERNET_IF} -j REJECT
# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forwardIf you want to Send SMS install gnokii
/etc/gnokiirc
[global] port = /dev/ttyUSB1 model = AT-HW initlength = default connection = serial use_locking = yes serial_baudrate = 115200 handshake = hardware smsc_timeout = 30 [gnokiid] bindir = /usr/sbin/ [connect_script] TELEPHONE = 12345678 [disconnect_script] [logging] debug = off rlpdebug = off xdebug = off
echo testing_sms | gnokii --sendsms +352621496092
Mar 19 16:22:10 k116-ap kernel: usb 2-1: new full speed USB device using uhci_hcd and address 2 Mar 19 16:22:10 k116-ap kernel: usb 2-1: configuration #1 chosen from 1 choice Mar 19 16:22:11 k116-ap kernel: Initializing USB Mass Storage driver... Mar 19 16:22:11 k116-ap kernel: scsi0 : SCSI emulation for USB Mass Storage devices Mar 19 16:22:11 k116-ap kernel: usbcore: registered new driver usb-storage Mar 19 16:22:11 k116-ap kernel: USB Mass Storage support registered. Mar 19 16:22:16 k116-ap kernel: Vendor: HUAWEI Model: Mass Storage Rev: 2.31 Mar 19 16:22:16 k116-ap kernel: Type: CD-ROM ANSI SCSI revision: 02 Mar 19 16:22:16 k116-ap kernel: sr0: scsi-1 drive Mar 19 16:22:16 k116-ap kernel: Uniform CD-ROM driver Revision: 3.20 Mar 19 16:22:16 k116-ap kernel: sr 0:0:0:0: Attached scsi generic sg0 type 5 Mar 19 16:22:46 k116-ap kernel: usb 2-1: USB disconnect, address 2 Mar 19 16:22:47 k116-ap kernel: usb 2-1: new full speed USB device using uhci_hcd and address 3 Mar 19 16:22:47 k116-ap kernel: usb 2-1: configuration #1 chosen from 1 choice Mar 19 16:22:47 k116-ap kernel: scsi1 : SCSI emulation for USB Mass Storage devices Mar 19 16:22:52 k116-ap kernel: Vendor: HUAWEI Model: Mass Storage Rev: 2.31 Mar 19 16:22:52 k116-ap kernel: Type: CD-ROM ANSI SCSI revision: 02 Mar 19 16:22:52 k116-ap kernel: sr0: scsi-1 drive Mar 19 16:22:52 k116-ap kernel: sr 1:0:0:0: Attached scsi generic sg0 type 5
Huawei UMTS USB Stick E169 with Linux
For questions concerning this document, contact me at: l a r s [DoT} b a m b e r g e r {At) gmx (dOT} d e
(Please read the note at the end of the document before you do!)
SUMMARY: This document describes how I got the Huawei UMTS USB Stick E169 to peacefully work with Linux and how to connect to e-plus acting as ISP. The E169 itself and the drivers
The Stick is a HSDPA / UMTS / GPRS / GSM modem for mobile access to the Internet. It plugs into the USB port and comes complete with an extension cord. It is manufactured by Huawei Technologies CO., Ltd. of the People's Republic of China. The maximum rated data transfer rate is 7.2 Mbit/s for HSDPA and 384 kbit/s for UMTS. It is possible to send and receive SMS and it contains a microSD card slot and a port for an external antenna.
The E169 is a composite USB device, that means it behaves differently depending on the computer it is connected to. Attached to a computer running MacOS, it will announce itself as a removable CD-ROM device an it will contain the MacOS drivers. Attached to a windows box, it will also announce itself as a removable CD-ROM but it will contain he Windows-drivers for installation. The E169 usually switches to being a modem after the driver has sent a special command. It is a different story with Linux. Depending on attachment at boot-time or after boot-time and on weather the kernel drivers are available it will behave either as a removable CD-ROM with the Windows drivers on it only (you can actually mount it) or as three distinct modem devices and the CD-ROM. To make sure the E169 is in the modem-mode, send it the appropriate command. I use usb_modeswitch for that. I use this configuration file for the E169:
# /etc/usb_modeswitch.conf # Huawei E169 # DefaultVendor= 0x12d1; DefaultProduct= 0x1001 DetachStorageOnly=0 HuaweiMode=1 # End
To make sure that the E169 is correctly initialized, do a cat /proc/bus/usb/device. The output should include these lines:
T: Bus=01 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=12 MxCh= 0 D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 1 P: Vendor=12d1 ProdID=1001 Rev= 0.00 S: Manufacturer=������������������� S: Product=HUAWEI Mobile S: SerialNumber=������������������� C:* #Ifs= 4 Cfg#= 1 Atr=a0 MxPwr=500mA I:* If#= 0 Alt= 0 #EPs= 3 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) E: Ad=81(I) Atr=03(Int.) MxPS= 16 Ivl=128ms E: Ad=82(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=02(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) E: Ad=84(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=03(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 2 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none) E: Ad=85(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=05(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms I:* If#= 3 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=06 Prot=50 Driver=(none) E: Ad=83(I) Atr=02(Bulk) MxPS= 64 Ivl=0ms E: Ad=04(O) Atr=02(Bulk) MxPS= 64 Ivl=0ms
The E169 now acts as four devices. The first three are used for connectivity, the fourth is the ZeroCD device. And yes, the Manufacturer and the Serial-number are messed up. Now for the needed drivers: You need to have configured as a kernel model or built-in the following drivers:
USB Driver for GSM and CDMA modems
Device Drivers => USB support => USB Serial Converter support => USB Generic Serial Driver => USB Driver for GSM and CDMA modems, module name: option
PPP support for sync tty ports Host USB support for your linux box All the other stuff for TCP/IP networking
- This should normally already be configured
After a modprobe option you should find the appropriate entries in the system log and you will find that the output of cat /proc/bus/usb/devices reveals the driver associated with the E169 devices. If you have udev you should now have /dev/ttyUSB0, /dev/ttyUSB1 and /dev/ttyUSB2. These are the devices for the UMTS modem, for the GSM modem and a device for sending an receiving SMS, respectively Establishing an Internet connection
You might want to talk directly to the modem using a minicom for example. Here is a list of commands the modem understands:
AT&V &C: 2; &D: 2; &E: 0; &F: 0; &S: 0; &W: 0; E: 1; L: 0; M: 0; Q: 0; V: 1; X: 0; Z: 0; \Q: 3; \S: 0; \V: 0; S0: 0; S2: 43; S3: 13; S4: 10; S5: 8; S6: 2; S7: 50; S8: 2; S9: 6; S10: 14; S11: 95; S30: 0; S103: 1; S104: 1; +FCLASS: 0; +ICF: 3,3; +IFC: 2,2; +IPR: 115200; +DR: 0; +DS: 0,0,2048,6; +WS46: 12; +CBST: 0,0,1; +CRLP: (61,61,48,6,0),(61,61,48,6,1),(240,240,52,6,2); +CV120: 1,1,1,0,0,0; +CHSN: 0,0,0,0; +CSSN: 0,0; +CREG: 0; +CGREG: 0; +CFUN:; +CSCS: "IRA"; +CSTA: 129; +CR: 0; +CRC: 0; +CMEE: 0; +CGDCONT: (1,"IP"," internet.eplus.de","0.0.0.0",0,0) ; +CGDSCONT: ; +CGTFT: ; +CGEQREQ: (1,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(2,2,0,0, 0,0,2,0,"0E0","0E0",3,0,0),(3,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(4,2,0,0,0,0,2,0, "0E0","0E0",3,0,0),(5,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(6,2,0,0,0,0,2,0,"0E0","0 E0",3,0,0),(7,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(8,2,0,0,0,0,2,0,"0E0","0E0",3,0, 0),(9,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(10,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(11, 2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(12,2,0,0,0,0,2,0,"0E 0","0E0",3,0,0),(13,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(14,2,0,0,0,0,2,0,"0E0","0E 0",3,0,0),(15,2,0,0,0,0,2,0,"0E0","0E0",3,0,0),(16,2,0,0,0,0,2,0,"0E0","0E0",3,0 ,0) ; +CGEQMIN: ; +CGQREQ: ; +CGQMIN: ; ; +CGEREP: 0,0; +CGCLASS: "A"; +CGSMS: 0; +CSMS: 0; +CMGF: 0; +CSAS: 0; +CRES: 0; +CSCA: "",; +CSMP: ,,0,0; +CSDH: 0; +CSCB: 0,"",""; +FDD: 0; +FAR: 0; +FCL: 0; +FIT: 0,0; +ES: ; +ESA: 0,,0,0,255,; +CMOD: 0; +CVHU: 1; ; +CPIN: ,; +CMEC: 0,0,0; +CKPD: 1,1; +CGATT: 0; +CGACT: 0; +CPBS: "SM"; +CPMS: "SM","SM","SM"; +CNMI: 0,0,0,0,0; +CMMS: 2; +FTS: 0; +FRS: 0; +FTH: 3; +FRH: 3; +FTM: 96; +FRM: 96; +CCUG: 0,0,0; +COPS: 0,2,""; +CUSD: 0; +CAOC: 1; +CCWA: 0; +CCLK: ""; +CLVL: 2; +CMUT: 0; +CPOL: 0,2,"",0,0,0; +CPLS: 0; +CTZR: 0; +CTZU: 0; +CLIP: 0; +COLP: 0; +CDIP: 0; +CLIR: 0; PORTSEL: 0; CPIN: ,; ^ATRECORD: 0; FREQLOCK: 12535688,13095612; CVOICE: 0; DDSETEX: 0@
The most important ones are:
ATI
- Return modem ID
ATZ
- Reset modem
AT&F
- Load firmware defaults
AT&V
- Return supported commands
AT+CGMI
- Return manufacturer
AT+CGMM
- Return model
AT+CGMR
- Return version number
AT+CGSN
- Return IMEI
AT+CPIN?
- Return PIN status. Possible responses are:
+CPIN: SIM PUK
- The PUK needs to be entered. After that, a new PIN needs to be set.
+CPIN: SIM PIN
- A PIN has not been entered yet.
+CPIN: READY
- A correct PIN has been entered. Modem is ready for use.
AT+CPIN="XXXX"
- Enter the PIN. (Replace XXXX with the PIN)
AT+CPIN="YYYYYYYY","XXXX"
- Set a new PIN. (Replace YYYYYYYY with the PUK and XXXX with the new PIN)
AT+CLCK="SC",0,"XXXX"
- Disable PIN inquiry. (Replace XXXX with the PIN)
AT+CLCK="SC",1,"XXXX"
- Enable PIN inquiry. (Replace XXXX with the PIN)
AT+CLCK="SC",2
- Return PIN requirement. Possible responses are:
+CLCK: 0
- PIN not required
+CLCK: 1
- PIN required
AT+CREG?
- Return modem status. Possible responses are:
+CREG: 0,1
- Modem logged in
+CREG: 0,2
- Modem not logged in
AT+COPS?
- Return the network the modem is logged in
AT+COPS=?
- Return all available networks. This might take a while to complete.
AT+CSQ
- Signal strength and biterrorrate
AT+CGDCONT=
- Set the APN (Access Point Name). This value depends on your ISP. Normally something like AT+CGDCONT=1,"IP","internet" should work. For e-plus, this is: AT+CGDCONT=1,"IP","internet.eplus.de","0.0.0.0"
ATD*99#
- Connect to the preset APN
ATD*99***1#
- Connect to the first APN stored in the modem
Now, in theory it should be possible to connect to your ISP with pppd and a chat script that will enter the PIN. However, up until now, this never worked out. The peer will refuse to supply an IP address and the configuration of the link fails. You need to install and use wvdial. Here are the configuration files:
[Dialer pin] Modem = /dev/ttyUSB0 Init1 = AT+CPIN=XXXX (Replace XXXX with your PIN)
[Dialer umts] Modem = /dev/ttyUSB0 Baud = 460800 New PPPD = yes Dial Command = ATDT Init1 = ATZ Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0 Init3 = AT+cgdcont=1,"IP","internet.eplus.de","0.0.0.0" (Modify for your ISP. This is for e-plus only.) ISDN = 0 Modem Type = Analog Modem Phone = *99# Username = eplus Password = gprs Timeout = 120 Stupid Mode = yes Idle Seconds = 500
/etc/ppp/peers/wvdial noccp noauth debug lock defaultroute noipdefault usepeerdns
Summary
To set up an Internet connection:
- Switch the modem to modem mode using usb_modeswitch if required.
- Have the kernel driver option available. (And also others.)
- Do a wvdial pin and wait for the modem to log in. The LED should change color to blue when logged into an UMTS network.
- Do a wvdial umts and enjoy!
NOTE:
I am not a Linux professional, I spend parts of my free time on Linux. This document is intended only to share my experience with other users. Please keep that in mind if you should mail me. You are always welcome to contribute to this document.
With respect to German law, this is the 'Impressum'.
localhost wiki