Linux下通過USB串連並利用手機撥接

來源:互聯網
上載者:User
How to connect a cell phone via USB to a Linux laptop and dial-up an internet connection

轉自:http://markus.wernig.net/en/it/usb-serial-handy-ppp.phtml

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.

Hardware involved:
HP Pavilion ze4300
Siemens M65
Siemens Data Cable USB DCA-540

Software:
Linux Gentoo, Kernel 2.6.10
Siemens firmware:
Product: M65
P-Date: 2004-12-01
SW-Version:16
Baseline:kzdb4#main_1.0_V119.8
FFS-Version:M65_2_xx-FFS-LG01_16_0259
Variant:A 115

Protocols
CSD (GSM)
GPRS

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 was:

# lsmod
[...]
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:

http://www.peerfear.org/rss/permalink/2004/11/30/WirelessIPWithSprintUSBAndKernel26/

and

http://www.linuxformat.co.uk/modules.php?op=modload&name=phpBB_14&file=index&action=viewtopic&topic=9210&forum=1&6

For the GPRS connection I found the following discussion very helpful (Long live public mailing list archives!):
http://www.webservertalk.com/archive216-2004-4-189602.html

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=m
# CONFIG_PPP_MULTILINK is not set
CONFIG_PPP_FILTER=y
CONFIG_PPP_ASYNC=m
CONFIG_PPP_SYNC_TTY=m
CONFIG_PPP_DEFLATE=m
CONFIG_PPP_BSDCOMP=m
# 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):

CONFIG_USB=m
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
CONFIG_USB_OHCI_HCD=m
CONFIG_USB_UHCI_HCD=m
(depending on your usb hardware)
CONFIG_USB_ACM=m (I didn't need it, but that's likely to be an exception)
CONFIG_USB_SERIAL=m
CONFIG_USB_SERIAL_GENERIC=y
CONFIG_USB_SERIAL_PL2303=m
(remember that your modem/cable combination could require another option!)

I'm not sure about the following
# USB Host-to-Host Cables
CONFIG_USB_ALI_M5632=y
CONFIG_USB_AN2720=y
CONFIG_USB_BELKIN=y
CONFIG_USB_GENESYS=y
CONFIG_USB_NET1080=y
CONFIG_USB_PL2301=y
CONFIG_USB_KC2190=y

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.

modprobe cdc-acm
modprobe usbserial
modprobe pl2303

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:

user USER
password PASSWORD
defaultroute
/dev/gprsmodem
connect "/usr/sbin/chat -v -f /etc/ppp/gprsmodem.chat"
debug
kdebug 4
ipcp-no-addresses
noipdefault
noauth
novj
noccp

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:

nameserver 213.55.128.1
nameserver 213.55.128.2

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' 'BUSY'
'ABORT' 'ERROR'
'ABORT' 'NO ANSWER'
'ABORT' 'NO CARRIER'
'ABORT' 'NO DIALTONE'
'ABORT' 'Invalid Login'
'ABORT' 'Login incorrect'
'' 'ATZ'
'TIMEOUT' '10'
'OK' 'ATM1L1'
'OK' 'AT&f+cgdcont=1,"IP","internet","",0,0'
'OK' 'ATDT*99***1#'
'CONNECT' ''

(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.)

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 AT&f+cgdcont=1,"IP","internet","",0,0.

This should do, you're set. Your system log should tell you more:

Feb  9 22:23:50 blue net.agent[11720]: 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.

# lsmod
[...]
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!

Markus Wernig

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.