How to connect a cell phone via USB to a Linux laptop
and dial-up an internet connection
NOTE: I have a Siemens M65 cell phone, but I suppose the methods won't differ too much for other models.
For hints about Linux on my laptop model see:Linux on the HP Pavilion ze4300.
HP Pavilion ze4300
Siemens Data Cable USB DCA-540
Linux Gentoo, Kernel 2.6.10
Variant: A 115
1) Get a cell phone with an internal modem (most have one today, because of
GPRS, I think). Mine was the Siemens M65, as described above.
2) First, before purchasing the USB cable, I took my laptop to the shop and
asked if I could connect my cellphone to my laptop with the cable before
actually bying it.
The relevant output from "lsmod" regarding the USB subsystem at that point
usb_storage 101264 0
uhci_hcd 33420 0
ohci_hcd 34952 0
usbcore 129784 4 usb_storage,uhci_hcd,ohci_hcd
When I attached the phone, the device was recognized:
Feb 9 17:29:31 blue kernel: usb 1-2: new full speed USB device using ohci_hcd and address 2
Feb 9 17:29:31 blue kernel: usb 1-2: Product: Siemens USB Connectivity
Feb 9 17:29:31 blue kernel: usb 1-2: Manufacturer: Siemens AG
Feb 9 17:29:31 blue kernel: usb 1-2: SerialNumber: 353669000550637
I then decided, that it's worth the risk, and bought the cable.
3) Then came Google time.
The two pages that helped me most were:
For the GPRS connection I found the following discussion very helpful (Long live public mailing list archives!):
4) What it all boils down to, is:
Prepare your kernel carefully. As I always do, I compiled all the necessary
options as modules (for better control and adaptability). You can probably as
well just compile it into the kernel, if you like.
Besides the standard, I needed the following options:
Device Drivers -> Networking Support -> Network Device Support
# CONFIG_PPP_MULTILINK is not set
# CONFIG_PPPOE is not set
Device Drivers -> USB support
You definitely don't need all of those, but not knowing what your hardware
is (as is likely with a cell phone internal usb modem ;-), you might first try
to build all modules and let the autoloader figure out which one to use, then
disable the rest in a second kernel build.
You will definitely need at least (well, if you have my hardware, anyway):
(depending on your usb hardware)
CONFIG_USB_ACM=m (I didn't need it, but that's likely to be an exception)
(remember that your modem/cable combination could require another option!)
I'm not sure about the following
# USB Host-to-Host Cables
You also need a module called "slhc", for which I can't find the config option at the moment.
Compile, install and reboot if necessary.
5) Now what remains is to load the modules and configure a dialer.
NOTE: Since I couldn't get it to work properly with wvdial, I used kppp, which
works fine, although I don't see the difference in the configuration.
Now attach the phone with the USB cable to your computer.
You should see the kernel registering the necessary devices.
Feb 9 21:03:25 blue kernel: drivers/usb/serial/usb-serial.c: USB Serial support registered for Generic
Feb 9 21:03:25 blue kernel: usbcore: registered new driver usbserial_generic
Feb 9 21:03:25 blue kernel: usbcore: registered new driver usbserial
Feb 9 21:03:25 blue kernel: drivers/usb/serial/usb-serial.c: USB Serial Driver core v2.0
Feb 9 21:03:44 blue kernel: usb 1-2: new full speed USB device using ohci_hcd and address 2
Feb 9 21:03:44 blue kernel: usb 1-2: Product: Siemens USB Connectivity
Feb 9 21:03:44 blue kernel: usb 1-2: Manufacturer: Siemens AG
Feb 9 21:03:44 blue kernel: usb 1-2: SerialNumber: 353669000550637
Feb 9 21:03:45 blue kernel: drivers/usb/serial/usb-serial.c: USB Serial support registered for PL-2303
Feb 9 21:03:45 blue kernel: pl2303 1-2:1.0: PL-2303 converter detected
Feb 9 21:03:45 blue kernel: usb 1-2: PL-2303 converter now attached to ttyUSB0
Feb 9 21:03:45 blue kernel: usbcore: registered new driver pl2303
Feb 9 21:03:45 blue kernel: drivers/usb/serial/pl2303.c: Prolific PL2303 USB to serial adaptor driver v0.12
You should now have /dev/ttyUSB0 (or /dev/usb/tts/0 under devfs). This is your
serial line modem. Use any dialer on it you want to.
Add "noauth" to /etc/ppp/options, as your provider will most likely not
authenticate to you. If you are a pppd expert, besides probably
not needing this tutorial, you can configure pppd in /etc/ppp to your heart's
content. In my case kppp does all that magic for me on the fly when dialling.
You would probably want to add "defaultroute" and "usepeerdns" to the options file.
Note for GPRS
In order to use the faster (and sometimes cheaper) GPRS, you will need to change a few
settings in your dialer configuration. The basic modules and stuff remain the same. I still didn't get wvdial to play along, but in the meantime added pppd itself to the list of working dialers. Here's how:
First (for convenience only) I made a link from /dev/usb/tts/0 to /dev/gprsmodem:
# ln -s /dev/usb/tts/0 /dev/gprsmodem
Then created the file /etc/ppp/peers/gprs with the following content:
connect "/usr/sbin/chat -v -f /etc/ppp/gprsmodem.chat"
Please note that the option "usepeerdns" MUST NOT be set. You need to create a file "/etc/ppp/resolv.conf" instead with a set of valid nameservers. In my case it reads:
The "ipcp-no-addresses" and "noipdefault" options tell pppd not to consider
the local machine's IP configuration when negotiating with the other side. Orange's dial-up PPP server is very picky when it comes to what it expects you to send after authenticating. Anything else than "[IPCP ConfReq id=0x1 <addr 0.0.0.0>]" will result in a negotiation timeout.
In /etc/ppp/gprsmodem.chat there's:
'ABORT' 'NO ANSWER'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'ABORT' 'Invalid Login'
'ABORT' 'Login incorrect'
(The parameters are quite public, part of it is on the homepage, part of it
you get from customer support. Those settings are for Orange, I don't know if
they work with other providers. I think you need a special contract ("Express") to use GPRS.)
Note: Please see Pieter de Preez' notes on
getting this to work on 64bit Debian et al. It contains further valuable tips an links.
When using pppd as a dialer, you can now call
# pppd call gprs
Watch /var/log/messages (and on Gentoo /var/log/daemon.log) for progress.
The configuration for kppp is similar.
Create a new account. Add the pppd options from /etc/ppp/peers/gprs under "Customize pppd Arguments". Authentication PAP/CHAP, Number
*99***1#. Set DNS configuration to "Manual" and add your namesevers.
Add a new modem on /dev/usb/tts/0. In the "Modem Commands" section, set the "Initialization string 2" to
This should do, you're set. Your system log should tell you more:
Feb 9 22:23:50 blue net.agent: add called for ppp0
Feb 9 22:23:51 blue kernel: PPP BSD Compression module registered
Feb 9 22:23:52 blue kernel: PPP Deflate Compression module registered
Starting pppd (either by hand or automatically from your dialler) will load
some more modules.
pl2303 20356 0
usbserial 30312 1 pl2303
ppp_deflate 6272 0
zlib_deflate 22808 1 ppp_deflate
zlib_inflate 18304 1 ppp_deflate
bsd_comp 6144 0
ppp_async 11776 0
ppp_generic 27284 3 ppp_deflate,bsd_comp,ppp_async
slhc 7680 1 ppp_generic
usb_storage 101264 0
uhci_hcd 33420 0
ohci_hcd 34952 0
usbcore 129784 6 pl2303,usbserial,usb_storage,uhci_hcd,ohci_hcd
Note on CSD (GSM)
Now all you need is a provider that will accept your data call. I use Orange
here in Switzerland (see http://www.orange.ch/pricesservices/services/dataAccess/webOrange?ts=1107956611879),
and no registration is needed. Dial-up numbers, username and password are also on the above website. Beware! The fees on the site are charged in addition to normal connection fees!
webmaster wernig net